diff --git a/address/pom.xml b/address/pom.xml index f97092c61f7..50643dd9d15 100644 --- a/address/pom.xml +++ b/address/pom.xml @@ -16,7 +16,7 @@ nacos-all com.alibaba.nacos - 1.3.0-BETA + 1.3.0 4.0.0 @@ -24,7 +24,7 @@ jar nacos-address ${project.version} - http://maven.apache.org + http://nacos.io UTF-8 @@ -56,13 +56,11 @@ org.mockito mockito-all - 1.10.19 test org.hamcrest hamcrest-all - 1.3 test @@ -80,7 +78,6 @@ org.codehaus.mojo findbugs-maven-plugin - 3.0.4 diff --git a/address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java b/address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java index 347b792d811..c917201d25b 100644 --- a/address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java +++ b/address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java @@ -21,7 +21,7 @@ import com.alibaba.nacos.address.misc.Loggers; import com.alibaba.nacos.address.util.AddressServerParamCheckUtil; import com.alibaba.nacos.api.common.Constants; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.core.Service; diff --git a/api/pom.xml b/api/pom.xml index 0349a81a05b..7cd60209eec 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -16,7 +16,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 4.0.0 @@ -25,7 +25,7 @@ jar nacos-api ${project.version} - http://maven.apache.org + http://nacos.io @@ -45,8 +45,12 @@ - com.alibaba - fastjson + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-databind org.apache.commons diff --git a/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosDeserializationException.java b/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosDeserializationException.java new file mode 100644 index 00000000000..77c423e87cd --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosDeserializationException.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.exception.runtime; + +/** + * Nacos deserialization exception. + * + * @author yangyi + */ +public class NacosDeserializationException extends NacosRuntimeException { + + public static final int ERROR_CODE = 101; + + private static final long serialVersionUID = -2742350751684273728L; + + private static final String DEFAULT_MSG = "Nacos deserialize failed. "; + + private static final String MSG_FOR_SPECIFIED_CLASS = "Nacos deserialize for class [%s] failed. "; + + private Class targetClass; + + public NacosDeserializationException() { + super(ERROR_CODE); + } + + public NacosDeserializationException(Class targetClass) { + super(ERROR_CODE, String.format(MSG_FOR_SPECIFIED_CLASS, targetClass.getName())); + this.targetClass = targetClass; + } + + public NacosDeserializationException(Throwable throwable) { + super(ERROR_CODE, DEFAULT_MSG, throwable); + } + + public NacosDeserializationException(Class targetClass, Throwable throwable) { + super(ERROR_CODE, String.format(MSG_FOR_SPECIFIED_CLASS, targetClass.getName()), throwable); + this.targetClass = targetClass; + } + + public Class getTargetClass() { + return targetClass; + } +} diff --git a/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosRuntimeException.java b/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosRuntimeException.java new file mode 100644 index 00000000000..8f63c90d6ee --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosRuntimeException.java @@ -0,0 +1,59 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.exception.runtime; + +/** + * Nacos runtime exception. + * + * @author yangyi + */ +public class NacosRuntimeException extends RuntimeException { + + private static final long serialVersionUID = 3513491993982293262L; + + public static final String ERROR_MESSAGE_FORMAT = "errCode: %d, errMsg: %s "; + + private int errCode; + + public NacosRuntimeException(int errCode) { + super(); + this.errCode = errCode; + } + + public NacosRuntimeException(int errCode, String errMsg) { + super(String.format(ERROR_MESSAGE_FORMAT, errCode, errMsg)); + this.errCode = errCode; + } + + public NacosRuntimeException(int errCode, Throwable throwable) { + super(throwable); + this.errCode = errCode; + } + + public NacosRuntimeException(int errCode, String errMsg, Throwable throwable) { + super(String.format(ERROR_MESSAGE_FORMAT, errCode, errMsg), throwable); + this.errCode = errCode; + } + + public int getErrCode() { + return errCode; + } + + public void setErrCode(int errCode) { + this.errCode = errCode; + } +} diff --git a/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosSerializationException.java b/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosSerializationException.java new file mode 100644 index 00000000000..b783ab27c08 --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/exception/runtime/NacosSerializationException.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.exception.runtime; + +/** + * Nacos serialization exception. + * + * @author yangyi + */ +public class NacosSerializationException extends NacosRuntimeException { + + public static final int ERROR_CODE = 100; + + private static final long serialVersionUID = -4308536346316915612L; + + private static final String DEFAULT_MSG = "Nacos serialize failed. "; + + private static final String MSG_FOR_SPECIFIED_CLASS = "Nacos serialize for class [%s] failed. "; + + private Class serializedClass; + + public NacosSerializationException() { + super(ERROR_CODE); + } + + public NacosSerializationException(Class serializedClass) { + super(ERROR_CODE, String.format(MSG_FOR_SPECIFIED_CLASS, serializedClass.getName())); + this.serializedClass = serializedClass; + } + + public NacosSerializationException(Throwable throwable) { + super(ERROR_CODE, DEFAULT_MSG, throwable); + } + + public NacosSerializationException(Class serializedClass, Throwable throwable) { + super(ERROR_CODE, String.format(MSG_FOR_SPECIFIED_CLASS, serializedClass.getName()), throwable); + this.serializedClass = serializedClass; + } + + public Class getSerializedClass() { + return serializedClass; + } +} diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/AbstractHealthChecker.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/AbstractHealthChecker.java deleted file mode 100644 index 97259572b06..00000000000 --- a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/AbstractHealthChecker.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed 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. - */ -package com.alibaba.nacos.api.naming.pojo; - -import com.alibaba.fastjson.annotation.JSONField; -import com.alibaba.fastjson.serializer.SerializeWriter; -import com.alibaba.nacos.api.common.Constants; -import org.apache.commons.lang3.StringUtils; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import com.google.common.base.Objects; - -/** - * @author nkorange - */ -public abstract class AbstractHealthChecker implements Cloneable { - - protected String type = "unknown"; - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - /** - * Clone all fields of this instance to another one - * - * @return Another instance with exactly the same fields. - * @throws CloneNotSupportedException - */ - @Override - public abstract AbstractHealthChecker clone() throws CloneNotSupportedException; - - /** - * used to JsonAdapter - */ - public void jsonAdapterCallback(SerializeWriter writer) { - // do nothing - } - - public static class None extends AbstractHealthChecker { - - public static final String TYPE = "NONE"; - - public None() { - this.setType(TYPE); - } - - @Override - public AbstractHealthChecker clone() throws CloneNotSupportedException { - return new None(); - } - } - - public static class Http extends AbstractHealthChecker { - public static final String TYPE = "HTTP"; - - private String path = ""; - private String headers = ""; - - private int expectedResponseCode = 200; - - public Http() { - this.type = TYPE; - } - - public int getExpectedResponseCode() { - return expectedResponseCode; - } - - public void setExpectedResponseCode(int expectedResponseCode) { - this.expectedResponseCode = expectedResponseCode; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getHeaders() { - return headers; - } - - public void setHeaders(String headers) { - this.headers = headers; - } - - @JSONField(serialize = false) - public Map getCustomHeaders() { - if (StringUtils.isBlank(headers)) { - return Collections.emptyMap(); - } - - Map headerMap = new HashMap(16); - for (String s : headers.split(Constants.NAMING_HTTP_HEADER_SPILIER)) { - String[] splits = s.split(":"); - if (splits.length != 2) { - continue; - } - - headerMap.put(StringUtils.trim(splits[0]), StringUtils.trim(splits[1])); - } - - return headerMap; - } - - /** - * used to JsonAdapter - * - * @param writer - */ - @Override - public void jsonAdapterCallback(SerializeWriter writer) { - writer.writeFieldValue(',', "path", getPath()); - writer.writeFieldValue(',', "headers", getHeaders()); - } - - @Override - public int hashCode() { - return Objects.hashCode(path, headers, expectedResponseCode); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof Http)) { - return false; - } - - Http other = (Http) obj; - - if (!strEquals(type, other.getType())) { - return false; - } - - if (!strEquals(path, other.getPath())) { - return false; - } - if (!strEquals(headers, other.getHeaders())) { - return false; - } - return expectedResponseCode == other.getExpectedResponseCode(); - } - - @Override - public Http clone() throws CloneNotSupportedException { - Http config = new Http(); - - config.setPath(this.getPath()); - config.setHeaders(this.getHeaders()); - config.setType(this.getType()); - config.setExpectedResponseCode(this.getExpectedResponseCode()); - - return config; - } - } - - public static class Tcp extends AbstractHealthChecker { - public static final String TYPE = "TCP"; - - public Tcp() { - this.type = TYPE; - } - - @Override - public int hashCode() { - return Objects.hashCode(TYPE); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof Tcp; - - } - - @Override - public Tcp clone() throws CloneNotSupportedException { - Tcp config = new Tcp(); - config.setType(this.type); - return config; - } - } - - public static class Mysql extends AbstractHealthChecker { - public static final String TYPE = "MYSQL"; - - private String user; - private String pwd; - private String cmd; - - public Mysql() { - this.type = TYPE; - } - - public String getCmd() { - return cmd; - } - - public String getPwd() { - return pwd; - } - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public void setCmd(String cmd) { - this.cmd = cmd; - } - - public void setPwd(String pwd) { - this.pwd = pwd; - } - - /** - * used to JsonAdapter - * - * @param writer - */ - @Override - public void jsonAdapterCallback(SerializeWriter writer) { - writer.writeFieldValue(',', "user", getUser()); - writer.writeFieldValue(',', "pwd", getPwd()); - writer.writeFieldValue(',', "cmd", getCmd()); - } - - @Override - public int hashCode() { - return Objects.hashCode(user, pwd, cmd); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof Mysql)) { - return false; - } - - Mysql other = (Mysql) obj; - - if (!strEquals(user, other.getUser())) { - return false; - } - - if (!strEquals(pwd, other.getPwd())) { - return false; - } - - return strEquals(cmd, other.getCmd()); - - } - - @Override - public Mysql clone() throws CloneNotSupportedException { - Mysql config = new Mysql(); - config.setUser(this.getUser()); - config.setPwd(this.getPwd()); - config.setCmd(this.getCmd()); - config.setType(this.getType()); - - return config; - } - } - - private static boolean strEquals(String str1, String str2) { - return str1 == null ? str2 == null : str1.equals(str2); - } -} diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Cluster.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Cluster.java index a571e0edb24..04a91c463d5 100644 --- a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Cluster.java +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Cluster.java @@ -18,6 +18,9 @@ import java.util.HashMap; import java.util.Map; +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Tcp; + /** * Cluster * @@ -38,7 +41,7 @@ public class Cluster { /** * Health check config of this cluster */ - private AbstractHealthChecker healthChecker = new AbstractHealthChecker.Tcp(); + private AbstractHealthChecker healthChecker = new Tcp(); /** * Default registered port for instances in this cluster. diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Instance.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Instance.java index ba6c7dd2c38..3d2c120e1df 100644 --- a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Instance.java +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/Instance.java @@ -15,9 +15,11 @@ */ package com.alibaba.nacos.api.naming.pojo; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.PreservedMetadataKeys; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + import org.apache.commons.lang3.StringUtils; import java.util.HashMap; @@ -30,6 +32,7 @@ * * @author nkorange */ +@JsonInclude(Include.NON_NULL) public class Instance { /** @@ -173,7 +176,18 @@ public void setEphemeral(boolean ephemeral) { @Override public String toString() { - return JSON.toJSONString(this); + return "Instance{" + + "instanceId='" + instanceId + '\'' + + ", ip='" + ip + '\'' + + ", port=" + port + + ", weight=" + weight + + ", healthy=" + healthy + + ", enabled=" + enabled + + ", ephemeral=" + ephemeral + + ", clusterName='" + clusterName + '\'' + + ", serviceName='" + serviceName + '\'' + + ", metadata=" + metadata + + '}'; } public String toInetAddr() { diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ListView.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ListView.java index 7df2672d390..a59a531e432 100644 --- a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ListView.java +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ListView.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.api.naming.pojo; -import com.alibaba.fastjson.JSON; - import java.util.List; /** @@ -47,6 +45,9 @@ public void setCount(int count) { @Override public String toString() { - return JSON.toJSONString(this); + return "ListView{" + + "data=" + data + + ", count=" + count + + '}'; } } diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ServiceInfo.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ServiceInfo.java index 98ea5cca406..0c13c52f2b7 100644 --- a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ServiceInfo.java +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/ServiceInfo.java @@ -15,8 +15,10 @@ */ package com.alibaba.nacos.api.naming.pojo; -import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.nacos.api.common.Constants; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -29,10 +31,12 @@ * * @author nkorange */ +@JsonInclude(Include.NON_NULL) public class ServiceInfo { - @JSONField(serialize = false) + @JsonIgnore private String jsonFromServer = EMPTY; + public static final String SPLITER = "@@"; private String name; @@ -43,7 +47,6 @@ public class ServiceInfo { private long cacheMillis = 1000L; - @JSONField(name = "hosts") private List hosts = new ArrayList(); private long lastRefTime = 0L; @@ -162,7 +165,7 @@ public boolean validate() { return true; } - @JSONField(serialize = false) + @JsonIgnore public String getJsonFromServer() { return jsonFromServer; } @@ -171,12 +174,12 @@ public void setJsonFromServer(String jsonFromServer) { this.jsonFromServer = jsonFromServer; } - @JSONField(serialize = false) + @JsonIgnore public String getKey() { return getKey(name, clusters); } - @JSONField(serialize = false) + @JsonIgnore public String getKeyEncoded() { try { return getKey(URLEncoder.encode(name, "UTF-8"), clusters); @@ -185,7 +188,6 @@ public String getKeyEncoded() { } } - @JSONField(serialize = false) public static ServiceInfo fromKey(String key) { ServiceInfo serviceInfo = new ServiceInfo(); int maxSegCount = 3; @@ -201,7 +203,7 @@ public static ServiceInfo fromKey(String key) { return serviceInfo; } - @JSONField(serialize = false) + @JsonIgnore public static String getKey(String name, String clusters) { if (!isEmpty(clusters)) { diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/AbstractHealthChecker.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/AbstractHealthChecker.java new file mode 100644 index 00000000000..d74f8761130 --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/AbstractHealthChecker.java @@ -0,0 +1,75 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ +package com.alibaba.nacos.api.naming.pojo.healthcheck; + +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker.None; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Http; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Mysql; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Tcp; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; + +/** + * @author nkorange + */ + +@JsonTypeInfo(use = Id.NAME, property = "type", defaultImpl = None.class) +@JsonSubTypes({ + @JsonSubTypes.Type(name = Http.TYPE, value = Http.class), + @JsonSubTypes.Type(name = Mysql.TYPE, value = Mysql.class), + @JsonSubTypes.Type(name = Tcp.TYPE, value = Tcp.class) +}) +public abstract class AbstractHealthChecker implements Cloneable { + + @JsonIgnore + protected final String type; + + protected AbstractHealthChecker(String type) { + this.type = type; + } + + public String getType() { + return type; + } + + /** + * Clone all fields of this instance to another one. + * + * @return Another instance with exactly the same fields + * @throws CloneNotSupportedException clone not supported exception + */ + @Override + public abstract AbstractHealthChecker clone() throws CloneNotSupportedException; + + /** + * Default implementation of Health checker. + */ + public static class None extends AbstractHealthChecker { + + public static final String TYPE = "NONE"; + + public None() { + super(TYPE); + } + + @Override + public AbstractHealthChecker clone() throws CloneNotSupportedException { + return new None(); + } + } +} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckType.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckType.java similarity index 50% rename from naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckType.java rename to api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckType.java index 025211a82a4..0d9e7313659 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckType.java +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckType.java @@ -13,9 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.nacos.naming.healthcheck; +package com.alibaba.nacos.api.naming.pojo.healthcheck; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Http; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Mysql; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Tcp; import java.util.ArrayList; import java.util.List; @@ -29,37 +31,36 @@ public enum HealthCheckType { /** * TCP type */ - TCP("tcp", AbstractHealthChecker.Tcp.class), + TCP(Tcp.class), /** * HTTP type */ - HTTP("http", AbstractHealthChecker.Http.class), + HTTP(Http.class), /** * MySQL type */ - MYSQL("mysql", AbstractHealthChecker.Mysql.class), + MYSQL(Mysql.class), /** * No check */ - NONE("none", AbstractHealthChecker.None.class); + NONE(AbstractHealthChecker.None.class); - private String name; + private final Class healthCheckerClass; - private Class healthCheckerClass; + private static final Map> EXTEND = new ConcurrentHashMap>(); - private static Map EXTEND = - new ConcurrentHashMap<>(); - - HealthCheckType(String name, Class healthCheckerClass) { - this.name = name; + HealthCheckType(Class healthCheckerClass) { this.healthCheckerClass = healthCheckerClass; } - public static void registerHealthChecker(String type, Class healthCheckerClass){ - EXTEND.putIfAbsent(type, healthCheckerClass); + public static void registerHealthChecker(String type, Class healthCheckerClass){ + if (!EXTEND.containsKey(type)) { + EXTEND.put(type, healthCheckerClass); + HealthCheckerFactory.registerSubType(healthCheckerClass, type); + } } - public static Class ofHealthCheckerClass(String type){ + public static Class ofHealthCheckerClass(String type){ HealthCheckType enumType; try { enumType = valueOf(type); @@ -69,12 +70,12 @@ public static Class ofHealthCheckerClass(String type){ return enumType.healthCheckerClass; } - public static List getLoadedHealthCheckerClasses(){ - List all = new ArrayList<>(); + public static List> getLoadedHealthCheckerClasses(){ + List> all = new ArrayList>(); for(HealthCheckType type : values()){ all.add(type.healthCheckerClass); } - for(Map.Entry entry : EXTEND.entrySet()){ + for(Map.Entry> entry : EXTEND.entrySet()){ all.add(entry.getValue()); } return all; diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckerFactory.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckerFactory.java new file mode 100644 index 00000000000..540cc3d7eba --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckerFactory.java @@ -0,0 +1,97 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck; + +import java.io.IOException; + +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker.None; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.NamedType; + +/** + * health checker factory. + * + * @author yangyi + */ +public class HealthCheckerFactory { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + static { + MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + } + + /** + * Register new sub type of health checker to factory for serialize and deserialize. + * + * @param extendHealthChecker extend health checker + */ + public static void registerSubType(AbstractHealthChecker extendHealthChecker) { + registerSubType(extendHealthChecker.getClass(), extendHealthChecker.getType()); + } + + /** + * Register new sub type of health checker to factory for serialize and deserialize. + * + * @param extendHealthCheckerClass extend health checker + * @param typeName typeName of health checker + */ + public static void registerSubType(Class extendHealthCheckerClass, String typeName) { + MAPPER.registerSubtypes(new NamedType(extendHealthCheckerClass, typeName)); + } + + /** + * Create default {@link None} health checker. + * + * @return new none health checker + */ + public static None createNoneHealthChecker() { + return new None(); + } + + /** + * Deserialize and create a instance of health checker. + * + * @param jsonString json string of health checker + * @return new instance + */ + public static AbstractHealthChecker deserialize(String jsonString) { + try { + return MAPPER.readValue(jsonString, AbstractHealthChecker.class); + } catch (IOException e) { + // TODO replace with NacosDeserializeException. + throw new RuntimeException("Deserialize health checker from json failed", e); + } + } + + /** + * Serialize a instance of health checker to json + * + * @param healthChecker health checker instance + * @return son string after serializing + */ + public static String serialize(AbstractHealthChecker healthChecker) { + try { + return MAPPER.writeValueAsString(healthChecker); + } catch (JsonProcessingException e) { + // TODO replace with NacosSerializeException. + throw new RuntimeException("Serialize health checker to json failed", e); + } + } +} diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Http.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Http.java new file mode 100644 index 00000000000..4b04ac6f92b --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Http.java @@ -0,0 +1,121 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck.impl; + +import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.google.common.base.Objects; +import org.apache.commons.lang3.StringUtils; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * Implementation of health checker for HTTP. + * + * @author yangyi + */ +public class Http extends AbstractHealthChecker { + public static final String TYPE = "HTTP"; + + private String path = ""; + + private String headers = ""; + + private int expectedResponseCode = 200; + + public Http() { + super(TYPE); + } + + public int getExpectedResponseCode() { + return expectedResponseCode; + } + + public void setExpectedResponseCode(int expectedResponseCode) { + this.expectedResponseCode = expectedResponseCode; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getHeaders() { + return headers; + } + + public void setHeaders(String headers) { + this.headers = headers; + } + + @JsonIgnore + public Map getCustomHeaders() { + if (StringUtils.isBlank(headers)) { + return Collections.emptyMap(); + } + Map headerMap = new HashMap(16); + for (String s : headers.split(Constants.NAMING_HTTP_HEADER_SPILIER)) { + String[] splits = s.split(":"); + if (splits.length != 2) { + continue; + } + headerMap.put(StringUtils.trim(splits[0]), StringUtils.trim(splits[1])); + } + return headerMap; + } + + @Override + public int hashCode() { + return Objects.hashCode(path, headers, expectedResponseCode); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Http)) { + return false; + } + + Http other = (Http) obj; + + if (!StringUtils.equals(type, other.getType())) { + return false; + } + + if (!StringUtils.equals(path, other.getPath())) { + return false; + } + if (!StringUtils.equals(headers, other.getHeaders())) { + return false; + } + return expectedResponseCode == other.getExpectedResponseCode(); + } + + @Override + public Http clone() throws CloneNotSupportedException { + Http config = new Http(); + config.setPath(this.getPath()); + config.setHeaders(this.getHeaders()); + config.setExpectedResponseCode(this.getExpectedResponseCode()); + return config; + } +} diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Mysql.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Mysql.java new file mode 100644 index 00000000000..a9ddb381704 --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Mysql.java @@ -0,0 +1,98 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck.impl; + +import org.apache.commons.lang3.StringUtils; + +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; +import com.google.common.base.Objects; + +/** + * Implementation of health checker for MYSQL. + * + * @author yangyi + */ +public class Mysql extends AbstractHealthChecker { + public static final String TYPE = "MYSQL"; + + private String user; + + private String pwd; + + private String cmd; + + public Mysql() { + super(TYPE); + } + + public String getCmd() { + return cmd; + } + + public String getPwd() { + return pwd; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public void setCmd(String cmd) { + this.cmd = cmd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + @Override + public int hashCode() { + return Objects.hashCode(user, pwd, cmd); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Mysql)) { + return false; + } + + Mysql other = (Mysql) obj; + + if (!StringUtils.equals(user, other.getUser())) { + return false; + } + + if (!StringUtils.equals(pwd, other.getPwd())) { + return false; + } + + return StringUtils.equals(cmd, other.getCmd()); + } + + @Override + public Mysql clone() throws CloneNotSupportedException { + Mysql config = new Mysql(); + config.setUser(this.getUser()); + config.setPwd(this.getPwd()); + config.setCmd(this.getCmd()); + return config; + } +} diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Tcp.java b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Tcp.java new file mode 100644 index 00000000000..a31f3598648 --- /dev/null +++ b/api/src/main/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/Tcp.java @@ -0,0 +1,49 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck.impl; + +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; +import com.google.common.base.Objects; + +/** + * Implementation of health checker for TCP. + * + * @author yangyi + */ +public class Tcp extends AbstractHealthChecker { + + public static final String TYPE = "TCP"; + + public Tcp() { + super(TYPE); + } + + @Override + public int hashCode() { + return Objects.hashCode(TYPE); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof Tcp; + } + + @Override + public Tcp clone() throws CloneNotSupportedException { + return new Tcp(); + } +} diff --git a/api/src/main/java/com/alibaba/nacos/api/selector/AbstractSelector.java b/api/src/main/java/com/alibaba/nacos/api/selector/AbstractSelector.java index 3c9fb579e95..8567ee7f654 100644 --- a/api/src/main/java/com/alibaba/nacos/api/selector/AbstractSelector.java +++ b/api/src/main/java/com/alibaba/nacos/api/selector/AbstractSelector.java @@ -15,24 +15,30 @@ */ package com.alibaba.nacos.api.selector; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; + /** * Abstract selector that only contains a type * * @author nkorange * @since 0.7.0 */ +@JsonTypeInfo(use = Id.NAME, property = "type", defaultImpl = NoneSelector.class) public abstract class AbstractSelector { /** * The type of this selector, each child class should announce its own unique type. */ - private String type; + @JsonIgnore + private final String type; - public String getType() { - return type; + protected AbstractSelector(String type) { + this.type = type; } - protected void setType(String type) { - this.type = type; + public String getType() { + return type; } } diff --git a/api/src/main/java/com/alibaba/nacos/api/selector/ExpressionSelector.java b/api/src/main/java/com/alibaba/nacos/api/selector/ExpressionSelector.java index 00c07980071..6bf5ac417d3 100644 --- a/api/src/main/java/com/alibaba/nacos/api/selector/ExpressionSelector.java +++ b/api/src/main/java/com/alibaba/nacos/api/selector/ExpressionSelector.java @@ -29,7 +29,7 @@ public class ExpressionSelector extends AbstractSelector { private String expression; public ExpressionSelector() { - this.setType(SelectorType.label.name()); + super(SelectorType.label.name()); } public String getExpression() { diff --git a/api/src/main/java/com/alibaba/nacos/api/selector/NoneSelector.java b/api/src/main/java/com/alibaba/nacos/api/selector/NoneSelector.java index 1873007cc38..2444626f397 100644 --- a/api/src/main/java/com/alibaba/nacos/api/selector/NoneSelector.java +++ b/api/src/main/java/com/alibaba/nacos/api/selector/NoneSelector.java @@ -23,6 +23,6 @@ public class NoneSelector extends AbstractSelector { public NoneSelector() { - this.setType(SelectorType.none.name()); + super(SelectorType.none.name()); } } diff --git a/api/src/test/java/com/alibaba/nacos/api/annotation/NacosPropertiesTest.java b/api/src/test/java/com/alibaba/nacos/api/annotation/NacosPropertiesTest.java index a76c2585eeb..bdebc15f4e7 100644 --- a/api/src/test/java/com/alibaba/nacos/api/annotation/NacosPropertiesTest.java +++ b/api/src/test/java/com/alibaba/nacos/api/annotation/NacosPropertiesTest.java @@ -15,7 +15,6 @@ */ package com.alibaba.nacos.api.annotation; -import com.alibaba.fastjson.JSON; import org.junit.Assert; import org.junit.Test; import org.springframework.mock.env.MockEnvironment; diff --git a/api/src/test/java/com/alibaba/nacos/api/naming/pojo/ServiceInfoTest.java b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/ServiceInfoTest.java new file mode 100644 index 00000000000..8c5d725e3e9 --- /dev/null +++ b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/ServiceInfoTest.java @@ -0,0 +1,71 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Before; +import org.junit.Test; +import java.io.IOException; + +import static org.junit.Assert.*; + +public class ServiceInfoTest { + + private ObjectMapper mapper; + + private ServiceInfo serviceInfo; + + @Before + public void setUp() throws Exception { + mapper = new ObjectMapper(); + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + serviceInfo = new ServiceInfo("testName", "testClusters"); + } + + @Test + public void testSerialize() throws JsonProcessingException { + String actual = mapper.writeValueAsString(serviceInfo); + assertTrue(actual.contains("\"name\":\"testName\"")); + assertTrue(actual.contains("\"clusters\":\"testClusters\"")); + assertTrue(actual.contains("\"cacheMillis\":1000")); + assertTrue(actual.contains("\"hosts\":[]")); + assertTrue(actual.contains("\"lastRefTime\":0")); + assertTrue(actual.contains("\"checksum\":\"\"")); + assertTrue(actual.contains("\"valid\":true")); + assertTrue(actual.contains("\"allIPs\":false")); + assertFalse(actual.contains("jsonFromServer")); + assertFalse(actual.contains("key")); + assertFalse(actual.contains("keyEncoded")); + } + + @Test + public void testDeserialize() throws IOException { + String example = "{\"name\":\"testName\",\"clusters\":\"testClusters\",\"cacheMillis\":1000,\"hosts\":[],\"lastRefTime\":0,\"checksum\":\"\",\"allIPs\":false,\"valid\":true,\"groupName\":\"\"}"; + ServiceInfo actual = mapper.readValue(example, ServiceInfo.class); + assertEquals("testName", actual.getName()); + assertEquals("testClusters", actual.getClusters()); + assertEquals("", actual.getChecksum()); + assertEquals("", actual.getGroupName()); + assertEquals(1000, actual.getCacheMillis()); + assertEquals(0, actual.getLastRefTime()); + assertTrue(actual.getHosts().isEmpty()); + assertTrue(actual.isValid()); + assertFalse(actual.isAllIPs()); + } +} diff --git a/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/AbstractHealthCheckerTest.java b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/AbstractHealthCheckerTest.java new file mode 100644 index 00000000000..627fcb37245 --- /dev/null +++ b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/AbstractHealthCheckerTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck; + +import org.junit.Before; +import org.junit.Test; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.NamedType; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; + +public class AbstractHealthCheckerTest { + + private ObjectMapper objectMapper = new ObjectMapper(); + + @Before + public void setUp() { + objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + objectMapper.registerSubtypes(new NamedType(TestChecker.class, TestChecker.TYPE)); + } + + @Test + public void testSerialize() throws JsonProcessingException { + TestChecker testChecker = new TestChecker(); + testChecker.setTestValue(""); + String actual = objectMapper.writeValueAsString(testChecker); + assertTrue(actual.contains("\"testValue\":\"\"")); + assertTrue(actual.contains("\"type\":\"TEST\"")); + } + + @Test + public void testDeserialize() throws IOException { + String testChecker = "{\"type\":\"TEST\",\"testValue\":\"\"}"; + TestChecker actual = objectMapper.readValue(testChecker, TestChecker.class); + assertEquals("", actual.getTestValue()); + assertEquals(TestChecker.TYPE, actual.getType()); + } +} diff --git a/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckerFactoryTest.java b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckerFactoryTest.java new file mode 100644 index 00000000000..551168e583d --- /dev/null +++ b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/HealthCheckerFactoryTest.java @@ -0,0 +1,55 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Tcp; + +public class HealthCheckerFactoryTest { + + @Test + public void testSerialize() { + Tcp tcp = new Tcp(); + String actual = HealthCheckerFactory.serialize(tcp); + assertTrue(actual.contains("\"type\":\"TCP\"")); + } + + @Test + public void testSerializeExtend() { + HealthCheckerFactory.registerSubType(TestChecker.class, TestChecker.TYPE); + TestChecker testChecker = new TestChecker(); + String actual = HealthCheckerFactory.serialize(testChecker); + assertTrue(actual.contains("\"type\":\"TEST\"")); + } + + @Test + public void testDeserialize() { + String tcpString = "{\"type\":\"TCP\"}"; + AbstractHealthChecker actual = HealthCheckerFactory.deserialize(tcpString); + assertEquals(Tcp.class, actual.getClass()); + } + + @Test + public void testDeserializeExtend() { + String tcpString = "{\"type\":\"TEST\",\"testValue\":null}"; + AbstractHealthChecker actual = HealthCheckerFactory.deserialize(tcpString); + assertEquals(TestChecker.class, actual.getClass()); + } +} diff --git a/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/TestChecker.java b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/TestChecker.java new file mode 100644 index 00000000000..229270083b4 --- /dev/null +++ b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/TestChecker.java @@ -0,0 +1,45 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; + +public class TestChecker extends AbstractHealthChecker { + + @JsonTypeInfo(use = Id.NAME, property = "type") + public static final String TYPE = "TEST"; + + private String testValue; + + public String getTestValue() { + return testValue; + } + + public void setTestValue(String testValue) { + this.testValue = testValue; + } + + public TestChecker() { + super(TYPE); + } + + @Override + public AbstractHealthChecker clone() throws CloneNotSupportedException { + return null; + } +} diff --git a/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/HttpTest.java b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/HttpTest.java new file mode 100644 index 00000000000..b7711b5b9c8 --- /dev/null +++ b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/HttpTest.java @@ -0,0 +1,80 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck.impl; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.Map; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class HttpTest { + + private ObjectMapper objectMapper; + + private Http http; + + @Before + public void setUp() { + objectMapper = new ObjectMapper(); + http = new Http(); + } + + @Test + public void testGetExpectedResponseCodeWithEmpty() { + http.setHeaders(""); + assertTrue(http.getCustomHeaders().isEmpty()); + } + + @Test + public void testGetExpectedResponseCodeWithoutEmpty() { + http.setHeaders("x:a|y:"); + Map actual = http.getCustomHeaders(); + assertFalse(actual.isEmpty()); + assertEquals(1, actual.size()); + assertEquals("a", actual.get("x")); + } + + @Test + public void testSerialize() throws JsonProcessingException { + http.setHeaders("x:a|y:"); + http.setPath("/x"); + String actual = objectMapper.writeValueAsString(http); + assertTrue(actual.contains("\"path\":\"/x\"")); + assertTrue(actual.contains("\"type\":\"HTTP\"")); + assertTrue(actual.contains("\"headers\":\"x:a|y:\"")); + assertTrue(actual.contains("\"expectedResponseCode\":200")); + } + + @Test + public void testDeserialize() throws IOException { + String testChecker = "{\"type\":\"HTTP\",\"path\":\"/x\",\"headers\":\"x:a|y:\",\"expectedResponseCode\":200}"; + Http actual = objectMapper.readValue(testChecker, Http.class); + assertEquals("x:a|y:", actual.getHeaders()); + assertEquals("/x", actual.getPath()); + assertEquals(200, actual.getExpectedResponseCode()); + assertEquals("x:a|y:", actual.getHeaders()); + assertEquals(Http.TYPE, actual.getType()); + } +} diff --git a/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/MysqlTest.java b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/MysqlTest.java new file mode 100644 index 00000000000..84a592206a5 --- /dev/null +++ b/api/src/test/java/com/alibaba/nacos/api/naming/pojo/healthcheck/impl/MysqlTest.java @@ -0,0 +1,62 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.api.naming.pojo.healthcheck.impl; + +import static org.junit.Assert.*; + +import java.io.IOException; + +import org.junit.Before; +import org.junit.Test; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class MysqlTest { + + private ObjectMapper objectMapper; + + private Mysql mysql; + + @Before + public void setUp() throws Exception { + mysql = new Mysql(); + mysql.setUser("user"); + mysql.setPwd("pwd"); + mysql.setCmd("cmd"); + objectMapper = new ObjectMapper(); + } + + @Test + public void testSerialize() throws JsonProcessingException { + String actual = objectMapper.writeValueAsString(mysql); + assertTrue(actual.contains("\"user\":\"user\"")); + assertTrue(actual.contains("\"type\":\"MYSQL\"")); + assertTrue(actual.contains("\"pwd\":\"pwd\"")); + assertTrue(actual.contains("\"cmd\":\"cmd\"")); + } + + @Test + public void testDeserialize() throws IOException { + String testChecker = "{\"type\":\"MYSQL\",\"user\":\"user\",\"pwd\":\"pwd\",\"cmd\":\"cmd\"}"; + Mysql actual = objectMapper.readValue(testChecker, Mysql.class); + assertEquals("cmd", actual.getCmd()); + assertEquals("pwd", actual.getPwd()); + assertEquals("user", actual.getUser()); + assertEquals(Mysql.TYPE, actual.getType()); + } +} diff --git a/client/pom.xml b/client/pom.xml index 3a7c3675095..49d845a1c1d 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -16,7 +16,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 ../pom.xml @@ -26,7 +26,7 @@ jar nacos-client ${project.version} - https://github.com/alibaba/nacos + http://nacos.io UTF-8 @@ -109,7 +109,6 @@ io.prometheus simpleclient - 0.5.0 org.mockito diff --git a/client/src/main/java/com/alibaba/nacos/client/config/http/ServerHttpAgent.java b/client/src/main/java/com/alibaba/nacos/client/config/http/ServerHttpAgent.java index 4a042460ae2..05f036a7a0c 100644 --- a/client/src/main/java/com/alibaba/nacos/client/config/http/ServerHttpAgent.java +++ b/client/src/main/java/com/alibaba/nacos/client/config/http/ServerHttpAgent.java @@ -24,11 +24,11 @@ import com.alibaba.nacos.client.config.impl.SpasAdapter; import com.alibaba.nacos.client.identify.STSConfig; import com.alibaba.nacos.client.security.SecurityProxy; -import com.alibaba.nacos.client.utils.JSONUtils; import com.alibaba.nacos.client.utils.LogUtils; import com.alibaba.nacos.client.utils.ParamUtil; import com.alibaba.nacos.client.utils.TemplateUtils; import com.alibaba.nacos.common.utils.IoUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.type.TypeReference; import org.apache.commons.lang3.StringUtils; @@ -366,8 +366,7 @@ private STSCredential getSTSCredential() throws IOException { } } String stsResponse = getSTSResponse(); - STSCredential stsCredentialTmp = JSONUtils.deserializeObject(stsResponse, - new TypeReference() { + STSCredential stsCredentialTmp = JacksonUtils.toObj(stsResponse, new TypeReference() { }); sTSCredential = stsCredentialTmp; LOGGER.info("[getSTSCredential] code:{}, accessKeyId:{}, lastUpdated:{}, expiration:{}", sTSCredential.getCode(), diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingMaintainService.java b/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingMaintainService.java index 9c7d5027f31..efc783f2d7c 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingMaintainService.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingMaintainService.java @@ -61,6 +61,7 @@ public NacosNamingMaintainService(Properties properties) { private void init(Properties properties) { ValidatorUtils.checkInitParam(properties); namespace = InitUtils.initNamespaceForNaming(properties); + InitUtils.initSerialization(); initServerAddr(properties); InitUtils.initWebRootContext(); serverProxy = new NamingProxy(namespace, endpoint, serverList, properties); diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingService.java b/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingService.java index 6984e66fb9d..2ed85d280a4 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingService.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/NacosNamingService.java @@ -34,7 +34,6 @@ import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.alibaba.nacos.client.naming.utils.InitUtils; import com.alibaba.nacos.client.naming.utils.UtilAndComs; -import com.alibaba.nacos.client.security.SecurityProxy; import com.alibaba.nacos.client.utils.ValidatorUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -44,7 +43,6 @@ import java.util.Iterator; import java.util.List; import java.util.Properties; -import java.util.concurrent.TimeUnit; /** * Nacos Naming Service @@ -88,6 +86,7 @@ public NacosNamingService(Properties properties) { private void init(Properties properties) { ValidatorUtils.checkInitParam(properties); namespace = InitUtils.initNamespaceForNaming(properties); + InitUtils.initSerialization(); initServerAddr(properties); InitUtils.initWebRootContext(); initCacheDir(); diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/backups/FailoverReactor.java b/client/src/main/java/com/alibaba/nacos/client/naming/backups/FailoverReactor.java index cdf4ff80f5f..d969259bdea 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/backups/FailoverReactor.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/backups/FailoverReactor.java @@ -15,13 +15,14 @@ */ package com.alibaba.nacos.client.naming.backups; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.naming.pojo.ServiceInfo; import com.alibaba.nacos.client.naming.cache.ConcurrentDiskUtil; import com.alibaba.nacos.client.naming.cache.DiskCache; import com.alibaba.nacos.client.naming.core.HostReactor; import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.alibaba.nacos.client.naming.utils.UtilAndComs; +import com.alibaba.nacos.common.utils.JacksonUtils; + import org.apache.commons.lang3.StringUtils; import java.io.BufferedReader; @@ -180,7 +181,7 @@ public void run() { String json; if ((json = reader.readLine()) != null) { try { - dom = JSON.parseObject(json, ServiceInfo.class); + dom = JacksonUtils.toObj(json, ServiceInfo.class); } catch (Exception e) { NAMING_LOGGER.error("[NA] error while parsing cached dom : " + json, e); } diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatInfo.java b/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatInfo.java index d405838f744..6edea9b78d0 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatInfo.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatInfo.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.client.naming.beat; -import com.alibaba.fastjson.JSON; - import java.util.Map; /** @@ -36,7 +34,17 @@ public class BeatInfo { @Override public String toString() { - return JSON.toJSONString(this); + return "BeatInfo{" + + "port=" + port + + ", ip='" + ip + '\'' + + ", weight=" + weight + + ", serviceName='" + serviceName + '\'' + + ", cluster='" + cluster + '\'' + + ", metadata=" + metadata + + ", scheduled=" + scheduled + + ", period=" + period + + ", stopped=" + stopped + + '}'; } public String getServiceName() { diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatReactor.java b/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatReactor.java index c1ee4ed23d7..60fb52dc339 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatReactor.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/beat/BeatReactor.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.client.naming.beat; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.CommonParams; @@ -26,6 +24,8 @@ import com.alibaba.nacos.client.monitor.MetricsMonitor; import com.alibaba.nacos.client.naming.net.NamingProxy; import com.alibaba.nacos.client.naming.utils.UtilAndComs; +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.fasterxml.jackson.databind.JsonNode; import java.util.Map; import java.util.concurrent.*; @@ -43,7 +43,7 @@ public class BeatReactor { private boolean lightBeatEnabled = false; - public final Map dom2Beat = new ConcurrentHashMap(); + public final Map dom2Beat = new ConcurrentHashMap<>(); public BeatReactor(NamingProxy serverProxy) { this(serverProxy, UtilAndComs.DEFAULT_CLIENT_BEAT_THREAD_COUNT); @@ -105,19 +105,19 @@ public void run() { } long nextTime = beatInfo.getPeriod(); try { - JSONObject result = serverProxy.sendBeat(beatInfo, BeatReactor.this.lightBeatEnabled); - long interval = result.getIntValue("clientBeatInterval"); + JsonNode result = serverProxy.sendBeat(beatInfo, BeatReactor.this.lightBeatEnabled); + long interval = result.get("clientBeatInterval").asInt(); boolean lightBeatEnabled = false; - if (result.containsKey(CommonParams.LIGHT_BEAT_ENABLED)) { - lightBeatEnabled = result.getBooleanValue(CommonParams.LIGHT_BEAT_ENABLED); + if (result.has(CommonParams.LIGHT_BEAT_ENABLED)) { + lightBeatEnabled = result.get(CommonParams.LIGHT_BEAT_ENABLED).asBoolean(); } BeatReactor.this.lightBeatEnabled = lightBeatEnabled; if (interval > 0) { nextTime = interval; } int code = NamingResponseCode.OK; - if (result.containsKey(CommonParams.CODE)) { - code = result.getIntValue(CommonParams.CODE); + if (result.has(CommonParams.CODE)) { + code = result.get(CommonParams.CODE).asInt(); } if (code == NamingResponseCode.RESOURCE_NOT_FOUND) { Instance instance = new Instance(); @@ -137,7 +137,7 @@ public void run() { } } catch (NacosException ne) { NAMING_LOGGER.error("[CLIENT-BEAT] failed to send beat: {}, code: {}, msg: {}", - JSON.toJSONString(beatInfo), ne.getErrCode(), ne.getErrMsg()); + JacksonUtils.toJson(beatInfo), ne.getErrCode(), ne.getErrMsg()); } executorService.schedule(new BeatTask(beatInfo), nextTime, TimeUnit.MILLISECONDS); diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/cache/DiskCache.java b/client/src/main/java/com/alibaba/nacos/client/naming/cache/DiskCache.java index 691ad1f67cd..8211b90143f 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/cache/DiskCache.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/cache/DiskCache.java @@ -15,11 +15,12 @@ */ package com.alibaba.nacos.client.naming.cache; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ServiceInfo; import com.alibaba.nacos.client.naming.utils.CollectionUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; + import org.apache.commons.lang3.StringUtils; import java.io.BufferedReader; @@ -58,7 +59,7 @@ public static void write(ServiceInfo dom, String dir) { String json = dom.getJsonFromServer(); if (StringUtils.isEmpty(json)) { - json = JSON.toJSONString(dom); + json = JacksonUtils.toJson(dom); } keyContentBuffer.append(json); @@ -112,10 +113,10 @@ public static Map read(String cacheDir) { continue; } - newFormat = JSON.parseObject(json, ServiceInfo.class); + newFormat = JacksonUtils.toObj(json, ServiceInfo.class); if (StringUtils.isEmpty(newFormat.getName())) { - ips.add(JSON.parseObject(json, Instance.class)); + ips.add(JacksonUtils.toObj(json, Instance.class)); } } catch (Throwable e) { NAMING_LOGGER.error("[NA] error while parsing cache file: " + json, e); diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/core/HostReactor.java b/client/src/main/java/com/alibaba/nacos/client/naming/core/HostReactor.java index 40f6ac58e4f..04d269d2a79 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/core/HostReactor.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/core/HostReactor.java @@ -15,7 +15,6 @@ */ package com.alibaba.nacos.client.naming.core; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ServiceInfo; @@ -24,6 +23,8 @@ import com.alibaba.nacos.client.naming.cache.DiskCache; import com.alibaba.nacos.client.naming.net.NamingProxy; import com.alibaba.nacos.client.naming.utils.UtilAndComs; +import com.alibaba.nacos.common.utils.JacksonUtils; + import org.apache.commons.lang3.StringUtils; import java.util.*; @@ -98,7 +99,7 @@ public synchronized ScheduledFuture addTask(UpdateTask task) { } public ServiceInfo processServiceJSON(String json) { - ServiceInfo serviceInfo = JSON.parseObject(json, ServiceInfo.class); + ServiceInfo serviceInfo = JacksonUtils.toObj(json, ServiceInfo.class); ServiceInfo oldService = serviceInfoMap.get(serviceInfo.getKey()); if (serviceInfo.getHosts() == null || !serviceInfo.validate()) { //empty or error push, just ignore @@ -162,19 +163,19 @@ public ServiceInfo processServiceJSON(String json) { if (newHosts.size() > 0) { changed = true; NAMING_LOGGER.info("new ips(" + newHosts.size() + ") service: " - + serviceInfo.getKey() + " -> " + JSON.toJSONString(newHosts)); + + serviceInfo.getKey() + " -> " + JacksonUtils.toJson(newHosts)); } if (remvHosts.size() > 0) { changed = true; NAMING_LOGGER.info("removed ips(" + remvHosts.size() + ") service: " - + serviceInfo.getKey() + " -> " + JSON.toJSONString(remvHosts)); + + serviceInfo.getKey() + " -> " + JacksonUtils.toJson(remvHosts)); } if (modHosts.size() > 0) { changed = true; NAMING_LOGGER.info("modified ips(" + modHosts.size() + ") service: " - + serviceInfo.getKey() + " -> " + JSON.toJSONString(modHosts)); + + serviceInfo.getKey() + " -> " + JacksonUtils.toJson(modHosts)); } serviceInfo.setJsonFromServer(json); @@ -186,8 +187,8 @@ public ServiceInfo processServiceJSON(String json) { } else { changed = true; - NAMING_LOGGER.info("init new ips(" + serviceInfo.ipCount() + ") service: " + serviceInfo.getKey() + " -> " + JSON - .toJSONString(serviceInfo.getHosts())); + NAMING_LOGGER.info("init new ips(" + serviceInfo.ipCount() + ") service: " + serviceInfo.getKey() + " -> " + + JacksonUtils.toJson(serviceInfo.getHosts())); serviceInfoMap.put(serviceInfo.getKey(), serviceInfo); eventDispatcher.serviceChanged(serviceInfo); serviceInfo.setJsonFromServer(json); @@ -198,7 +199,7 @@ public ServiceInfo processServiceJSON(String json) { if (changed) { NAMING_LOGGER.info("current ips:(" + serviceInfo.ipCount() + ") service: " + serviceInfo.getKey() + - " -> " + JSON.toJSONString(serviceInfo.getHosts())); + " -> " + JacksonUtils.toJson(serviceInfo.getHosts())); } return serviceInfo; @@ -214,7 +215,7 @@ private ServiceInfo getServiceInfo0(String serviceName, String clusters) { public ServiceInfo getServiceInfoDirectlyFromServer(final String serviceName, final String clusters) throws NacosException { String result = serverProxy.queryList(serviceName, clusters, 0, false); if (StringUtils.isNotEmpty(result)) { - return JSON.parseObject(result, ServiceInfo.class); + return JacksonUtils.toObj(result, ServiceInfo.class); } return null; } diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/core/PushReceiver.java b/client/src/main/java/com/alibaba/nacos/client/naming/core/PushReceiver.java index 1222205e1a2..56a933eaceb 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/core/PushReceiver.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/core/PushReceiver.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.client.naming.core; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.common.utils.IoUtils; @@ -75,7 +75,7 @@ public void run() { String json = new String(IoUtils.tryDecompress(packet.getData()), "UTF-8").trim(); NAMING_LOGGER.info("received push data: " + json + " from " + packet.getAddress().toString()); - PushPacket pushPacket = JSON.parseObject(json, PushPacket.class); + PushPacket pushPacket = JacksonUtils.toObj(json, PushPacket.class); String ack; if ("dom".equals(pushPacket.type) || "service".equals(pushPacket.type)) { hostReactor.processServiceJSON(pushPacket.data); @@ -89,7 +89,7 @@ public void run() { ack = "{\"type\": \"dump-ack\"" + ", \"lastRefTime\": \"" + pushPacket.lastRefTime + "\", \"data\":" + "\"" - + StringUtils.escapeJavaScript(JSON.toJSONString(hostReactor.getServiceInfoMap())) + + StringUtils.escapeJavaScript(JacksonUtils.toJson(hostReactor.getServiceInfoMap())) + "\"}"; } else { // do nothing send ack only diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/net/HttpClient.java b/client/src/main/java/com/alibaba/nacos/client/naming/net/HttpClient.java index 41d2cc78b53..06959be1574 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/net/HttpClient.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/net/HttpClient.java @@ -129,8 +129,14 @@ private static HttpResult getResult(HttpURLConnection conn) throws IOException { if (encodingGzip.equals(respHeaders.get(HttpHeaders.CONTENT_ENCODING))) { inputStream = new GZIPInputStream(inputStream); } - - return new HttpResult(respCode, IoUtils.toString(inputStream, getCharset(conn)), respHeaders); + HttpResult httpResult = new HttpResult(respCode, IoUtils.toString(inputStream, getCharset(conn)), respHeaders); + + //InputStream from HttpURLConnection can be closed automatically,but new GZIPInputStream can't be closed automatically + //so needs to close it manually + if (inputStream instanceof GZIPInputStream) { + inputStream.close(); + } + return httpResult; } private static String getCharset(HttpURLConnection conn) { diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/net/NamingProxy.java b/client/src/main/java/com/alibaba/nacos/client/naming/net/NamingProxy.java index 7085a99a1e4..73554285d6e 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/net/NamingProxy.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/net/NamingProxy.java @@ -15,9 +15,6 @@ */ package com.alibaba.nacos.client.naming.net; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.SystemPropertyKeyConst; import com.alibaba.nacos.api.common.Constants; @@ -42,8 +39,12 @@ import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.common.utils.HttpMethod; import com.alibaba.nacos.common.utils.IoUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.UuidUtils; import com.alibaba.nacos.common.utils.VersionUtils; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + import org.apache.commons.lang3.StringUtils; import java.io.IOException; @@ -207,7 +208,7 @@ public void registerService(String serviceName, String groupName, Instance insta params.put("enable", String.valueOf(instance.isEnabled())); params.put("healthy", String.valueOf(instance.isHealthy())); params.put("ephemeral", String.valueOf(instance.isEphemeral())); - params.put("metadata", JSON.toJSONString(instance.getMetadata())); + params.put("metadata", JacksonUtils.toJson(instance.getMetadata())); reqAPI(UtilAndComs.NACOS_URL_INSTANCE, params, HttpMethod.POST); @@ -243,7 +244,7 @@ public void updateInstance(String serviceName, String groupName, Instance instan params.put("weight", String.valueOf(instance.getWeight())); params.put("enabled", String.valueOf(instance.isEnabled())); params.put("ephemeral", String.valueOf(instance.isEphemeral())); - params.put("metadata", JSON.toJSONString(instance.getMetadata())); + params.put("metadata", JacksonUtils.toJson(instance.getMetadata())); reqAPI(UtilAndComs.NACOS_URL_INSTANCE, params, HttpMethod.PUT); } @@ -258,8 +259,7 @@ public Service queryService(String serviceName, String groupName) throws NacosEx params.put(CommonParams.GROUP_NAME, groupName); String result = reqAPI(UtilAndComs.NACOS_URL_SERVICE, params, HttpMethod.GET); - JSONObject jsonObject = JSON.parseObject(result); - return jsonObject.toJavaObject(Service.class); + return JacksonUtils.toObj(result, Service.class); } public void createService(Service service, AbstractSelector selector) throws NacosException { @@ -272,8 +272,8 @@ public void createService(Service service, AbstractSelector selector) throws Nac params.put(CommonParams.SERVICE_NAME, service.getName()); params.put(CommonParams.GROUP_NAME, service.getGroupName()); params.put("protectThreshold", String.valueOf(service.getProtectThreshold())); - params.put("metadata", JSON.toJSONString(service.getMetadata())); - params.put("selector", JSON.toJSONString(selector)); + params.put("metadata", JacksonUtils.toJson(service.getMetadata())); + params.put("selector", JacksonUtils.toJson(selector)); reqAPI(UtilAndComs.NACOS_URL_SERVICE, params, HttpMethod.POST); @@ -301,8 +301,8 @@ public void updateService(Service service, AbstractSelector selector) throws Nac params.put(CommonParams.SERVICE_NAME, service.getName()); params.put(CommonParams.GROUP_NAME, service.getGroupName()); params.put("protectThreshold", String.valueOf(service.getProtectThreshold())); - params.put("metadata", JSON.toJSONString(service.getMetadata())); - params.put("selector", JSON.toJSONString(selector)); + params.put("metadata", JacksonUtils.toJson(service.getMetadata())); + params.put("selector", JacksonUtils.toJson(selector)); reqAPI(UtilAndComs.NACOS_URL_SERVICE, params, HttpMethod.PUT); } @@ -321,7 +321,7 @@ public String queryList(String serviceName, String clusters, int udpPort, boolea return reqAPI(UtilAndComs.NACOS_URL_BASE + "/instance/list", params, HttpMethod.GET); } - public JSONObject sendBeat(BeatInfo beatInfo, boolean lightBeatEnabled) throws NacosException { + public JsonNode sendBeat(BeatInfo beatInfo, boolean lightBeatEnabled) throws NacosException { if (NAMING_LOGGER.isDebugEnabled()) { NAMING_LOGGER.debug("[BEAT] {} sending beat to server: {}", namespaceId, beatInfo.toString()); @@ -330,7 +330,7 @@ public JSONObject sendBeat(BeatInfo beatInfo, boolean lightBeatEnabled) throws N String body = StringUtils.EMPTY; if (!lightBeatEnabled) { try { - body = "beat=" + URLEncoder.encode(JSON.toJSONString(beatInfo), "UTF-8"); + body = "beat=" + URLEncoder.encode(JacksonUtils.toJson(beatInfo), "UTF-8"); } catch (UnsupportedEncodingException e) { throw new NacosException(NacosException.SERVER_ERROR, "encode beatInfo error", e); } @@ -341,7 +341,7 @@ public JSONObject sendBeat(BeatInfo beatInfo, boolean lightBeatEnabled) throws N params.put("ip", beatInfo.getIp()); params.put("port", String.valueOf(beatInfo.getPort())); String result = reqAPI(UtilAndComs.NACOS_URL_BASE + "/instance/beat", params, body, HttpMethod.PUT); - return JSON.parseObject(result); + return JacksonUtils.toObj(result); } public boolean serverHealthy() { @@ -349,8 +349,8 @@ public boolean serverHealthy() { try { String result = reqAPI(UtilAndComs.NACOS_URL_BASE + "/operator/metrics", new HashMap(2), HttpMethod.GET); - JSONObject json = JSON.parseObject(result); - String serverStatus = json.getString("status"); + JsonNode json = JacksonUtils.toObj(result); + String serverStatus = json.get("status").asText(); return "UP".equals(serverStatus); } catch (Exception e) { return false; @@ -375,7 +375,7 @@ public ListView getServiceList(int pageNo, int pageSize, String groupNam break; case label: ExpressionSelector expressionSelector = (ExpressionSelector) selector; - params.put("selector", JSON.toJSONString(expressionSelector)); + params.put("selector", JacksonUtils.toJson(expressionSelector)); break; default: break; @@ -384,11 +384,10 @@ public ListView getServiceList(int pageNo, int pageSize, String groupNam String result = reqAPI(UtilAndComs.NACOS_URL_BASE + "/service/list", params, HttpMethod.GET); - JSONObject json = JSON.parseObject(result); - ListView listView = new ListView(); - listView.setCount(json.getInteger("count")); - listView.setData(JSON.parseObject(json.getString("doms"), new TypeReference>() { - })); + JsonNode json = JacksonUtils.toObj(result); + ListView listView = new ListView<>(); + listView.setCount(json.get("count").asInt()); + listView.setData(JacksonUtils.toObj(json.get("doms").toString(), new TypeReference>() {})); return listView; } diff --git a/client/src/main/java/com/alibaba/nacos/client/naming/utils/InitUtils.java b/client/src/main/java/com/alibaba/nacos/client/naming/utils/InitUtils.java index 9002b3a27f7..dc869b761dc 100644 --- a/client/src/main/java/com/alibaba/nacos/client/naming/utils/InitUtils.java +++ b/client/src/main/java/com/alibaba/nacos/client/naming/utils/InitUtils.java @@ -19,7 +19,11 @@ import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.SystemPropertyKeyConst; import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.api.selector.ExpressionSelector; +import com.alibaba.nacos.api.selector.NoneSelector; +import com.alibaba.nacos.api.selector.SelectorType; import com.alibaba.nacos.client.utils.*; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.StringUtils; import java.util.Properties; @@ -151,4 +155,21 @@ public String call() { return endpointUrl + ":" + endpointPort; } + /** + * Register subType for serialization + * + * Now these subType implementation class has registered in static code. + * But there are some problem for classloader. The implementation class + * will be loaded when they are used, which will make deserialize + * before register. + * + * 子类实现类中的静态代码串中已经向Jackson进行了注册,但是由于classloader的原因,只有当 + * 该子类被使用的时候,才会加载该类。这可能会导致Jackson先进性反序列化,再注册子类,从而导致 + * 反序列化失败。 + */ + public static void initSerialization() { + // TODO register in implementation class or remove subType + JacksonUtils.registerSubtype(NoneSelector.class, SelectorType.none.name()); + JacksonUtils.registerSubtype(ExpressionSelector.class, SelectorType.label.name()); + } } diff --git a/client/src/main/java/com/alibaba/nacos/client/security/SecurityProxy.java b/client/src/main/java/com/alibaba/nacos/client/security/SecurityProxy.java index f7ff7ed97a3..20662b94f41 100644 --- a/client/src/main/java/com/alibaba/nacos/client/security/SecurityProxy.java +++ b/client/src/main/java/com/alibaba/nacos/client/security/SecurityProxy.java @@ -15,13 +15,13 @@ */ package com.alibaba.nacos.client.security; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.client.naming.net.HttpClient; import com.alibaba.nacos.common.utils.HttpMethod; +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.fasterxml.jackson.databind.JsonNode; + import org.apache.commons.codec.Charsets; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -122,14 +122,14 @@ public boolean login(String server) { params, body, Charsets.UTF_8.name(), HttpMethod.POST); if (result.code != HttpURLConnection.HTTP_OK) { - SECURITY_LOGGER.error("login failed: {}", JSON.toJSONString(result)); + SECURITY_LOGGER.error("login failed: {}", JacksonUtils.toJson(result)); return false; } - JSONObject obj = JSON.parseObject(result.content); - if (obj.containsKey(Constants.ACCESS_TOKEN)) { - accessToken = obj.getString(Constants.ACCESS_TOKEN); - tokenTtl = obj.getIntValue(Constants.TOKEN_TTL); + JsonNode obj = JacksonUtils.toObj(result.content); + if (obj.has(Constants.ACCESS_TOKEN)) { + accessToken = obj.get(Constants.ACCESS_TOKEN).asText(); + tokenTtl = obj.get(Constants.TOKEN_TTL).asInt(); tokenRefreshWindow = tokenTtl / 10; } } diff --git a/client/src/main/java/com/alibaba/nacos/client/utils/JSONUtils.java b/client/src/main/java/com/alibaba/nacos/client/utils/JSONUtils.java deleted file mode 100644 index fa91b0d23a8..00000000000 --- a/client/src/main/java/com/alibaba/nacos/client/utils/JSONUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed 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. - */ -package com.alibaba.nacos.client.utils; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.io.IOException; - -/** - * Json tool - * - * @author Nacos - */ -@SuppressWarnings("PMD.ClassNamingShouldBeCamelRule") -public class JSONUtils { - - private static ObjectMapper mapper = new ObjectMapper(); - - static { - mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - } - - public static String serializeObject(Object o) throws IOException { - return mapper.writeValueAsString(o); - } - - public static Object deserializeObject(String s, Class clazz) throws IOException { - return mapper.readValue(s, clazz); - } - - public static T deserializeObject(String s, TypeReference typeReference) - throws IOException { - return mapper.readValue(s, typeReference); - } - -} diff --git a/client/src/test/java/com/alibaba/nacos/client/ConfigTest.java b/client/src/test/java/com/alibaba/nacos/client/ConfigTest.java index 0a0ca4b7a18..cc65e123775 100644 --- a/client/src/test/java/com/alibaba/nacos/client/ConfigTest.java +++ b/client/src/test/java/com/alibaba/nacos/client/ConfigTest.java @@ -1,18 +1,18 @@ /* * - * * Copyright 1999-2018 Alibaba Group Holding Ltd. - * * - * * Licensed 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 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. * */ @@ -21,13 +21,17 @@ import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.config.ConfigService; +import com.alibaba.nacos.api.config.listener.AbstractListener; import com.alibaba.nacos.common.utils.ThreadUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; +import java.util.Objects; import java.util.Properties; +import java.util.Scanner; +import java.util.concurrent.CountDownLatch; /** * @author liaochuntao @@ -35,20 +39,20 @@ @Ignore public class ConfigTest { - private ConfigService configService; + private static ConfigService configService; - @Before - public void before() throws Exception { + public static void main(String[] args) throws Exception { + before(); + test(); + } + + public static void before() throws Exception { Properties properties = new Properties(); - properties.setProperty(PropertyKeyConst.NAMESPACE, "bebf0150-e1ea-47e2-81fe-6814caf2b952"); properties.setProperty(PropertyKeyConst.SERVER_ADDR, "127.0.0.1:8848"); - properties.setProperty(PropertyKeyConst.USERNAME, "chuntaojun"); - properties.setProperty(PropertyKeyConst.PASSWORD, "1017"); configService = NacosFactory.createConfigService(properties); } - @Test - public void test() throws Exception { + public static void test() throws Exception { final String dataId = "lessspring"; final String group = "lessspring"; final String content = "lessspring-" + System.currentTimeMillis(); @@ -56,8 +60,25 @@ public void test() throws Exception { Assert.assertTrue(result); ThreadUtils.sleep(10_000); - String response = configService.getConfig(dataId, group, 5000); - System.out.println(response); + + String response = configService.getConfigAndSignListener(dataId, group, 5000, new AbstractListener() { + @Override + public void receiveConfigInfo(String configInfo) { + System.err.println(configInfo); + } + }); + Assert.assertEquals(content, response); + + Scanner scanner = new Scanner(System.in); + System.out.println("input content"); + while (scanner.hasNextLine()){ + String s = scanner.next(); + if (Objects.equals("exit", s)) { + scanner.close(); + return; + } + configService.publishConfig(dataId, group, s); + } } } diff --git a/client/src/test/java/com/alibaba/nacos/client/naming/cache/DiskCacheTest.java b/client/src/test/java/com/alibaba/nacos/client/naming/cache/DiskCacheTest.java new file mode 100644 index 00000000000..f624669eebf --- /dev/null +++ b/client/src/test/java/com/alibaba/nacos/client/naming/cache/DiskCacheTest.java @@ -0,0 +1,95 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.client.naming.cache; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +import java.io.File; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.api.naming.pojo.ServiceInfo; + +public class DiskCacheTest { + + private static final String CACHE_DIR = DiskCacheTest.class.getResource("/").getPath() + "cache/"; + + private ServiceInfo serviceInfo; + + private Instance instance; + + @Before + public void setUp() throws Exception { + System.out.println(CACHE_DIR); + serviceInfo = new ServiceInfo("testName", "testClusters"); + instance = new Instance(); + instance.setClusterName("testClusters"); + instance.setIp("1.1.1.1"); + instance.setPort(1234); + instance.setServiceName("testName"); + serviceInfo.setHosts(Collections.singletonList(instance)); + } + + @After + public void tearDown() { + File file = new File(CACHE_DIR); + if (file.exists() && file.list().length > 0) { + for (File each : file.listFiles()) { + each.delete(); + } + } + } + + @Test + public void testCache() { + DiskCache.write(serviceInfo, CACHE_DIR); + Map actual = DiskCache.read(CACHE_DIR); + assertEquals(1, actual.size()); + assertTrue(actual.containsKey(serviceInfo.getKeyEncoded())); + assertServiceInfo(actual.get(serviceInfo.getKeyEncoded()), serviceInfo); + } + + private void assertServiceInfo(ServiceInfo actual, ServiceInfo expected) { + assertEquals(actual.getName(), expected.getName()); + assertEquals(actual.getGroupName(), expected.getGroupName()); + assertEquals(actual.getClusters(), expected.getClusters()); + assertEquals(actual.getCacheMillis(), expected.getCacheMillis()); + assertEquals(actual.getLastRefTime(), expected.getLastRefTime()); + assertEquals(actual.getKey(), expected.getKey()); + assertHosts(actual.getHosts(), expected.getHosts()); + } + + private void assertHosts(List actual, List expected) { + assertEquals(actual.size(), expected.size()); + for (int i = 0; i < expected.size(); i++) { + assertInstance(actual.get(i), expected.get(i)); + } + } + + private void assertInstance(Instance actual, Instance expected) { + assertEquals(actual.getServiceName(), actual.getServiceName()); + assertEquals(actual.getClusterName(), actual.getClusterName()); + assertEquals(actual.getIp(), actual.getIp()); + assertEquals(actual.getPort(), actual.getPort()); + } +} diff --git a/client/src/test/java/com/alibaba/nacos/client/naming/core/HostReactorTest.java b/client/src/test/java/com/alibaba/nacos/client/naming/core/HostReactorTest.java new file mode 100644 index 00000000000..2462a32b3a8 --- /dev/null +++ b/client/src/test/java/com/alibaba/nacos/client/naming/core/HostReactorTest.java @@ -0,0 +1,108 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.client.naming.core; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.when; + +import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.api.naming.pojo.ServiceInfo; +import com.alibaba.nacos.client.naming.net.NamingProxy; + +@RunWith(MockitoJUnitRunner.class) +public class HostReactorTest { + + private static final String CACHE_DIR = HostReactorTest.class.getResource("/").getPath() + "cache/"; + + @Mock + private NamingProxy namingProxy; + + @Mock + private EventDispatcher eventDispatcher; + + private HostReactor hostReactor; + + @Before + public void setUp() throws Exception { + hostReactor = new HostReactor(eventDispatcher, namingProxy, CACHE_DIR); + } + + @Test + public void testProcessServiceJSON() { + ServiceInfo actual = hostReactor.processServiceJSON(EXAMPLE); + assertServiceInfo(actual); + } + + @Test + public void testGetServiceInfoDirectlyFromServer() throws NacosException { + when(namingProxy.queryList("testName", "testClusters", 0, false)).thenReturn(EXAMPLE); + ServiceInfo actual = hostReactor.getServiceInfoDirectlyFromServer("testName", "testClusters"); + assertServiceInfo(actual); + } + + private void assertServiceInfo(ServiceInfo actual) { + assertEquals("testName", actual.getName()); + assertEquals("testClusters", actual.getClusters()); + assertEquals("", actual.getChecksum()); + assertEquals(1000, actual.getCacheMillis()); + assertEquals(0, actual.getLastRefTime()); + assertNull(actual.getGroupName()); + assertTrue(actual.isValid()); + assertFalse(actual.isAllIPs()); + assertEquals(1, actual.getHosts().size()); + assertInstance(actual.getHosts().get(0)); + } + + private void assertInstance(Instance actual) { + assertEquals("1.1.1.1", actual.getIp()); + assertEquals("testClusters", actual.getClusterName()); + assertEquals("testName", actual.getServiceName()); + assertEquals(1234, actual.getPort()); + } + + private static final String EXAMPLE = "{\n" + + "\t\"name\": \"testName\",\n" + + "\t\"clusters\": \"testClusters\",\n" + + "\t\"cacheMillis\": 1000,\n" + + "\t\"hosts\": [{\n" + + "\t\t\"ip\": \"1.1.1.1\",\n" + + "\t\t\"port\": 1234,\n" + + "\t\t\"weight\": 1.0,\n" + + "\t\t\"healthy\": true,\n" + + "\t\t\"enabled\": true,\n" + + "\t\t\"ephemeral\": true,\n" + + "\t\t\"clusterName\": \"testClusters\",\n" + + "\t\t\"serviceName\": \"testName\",\n" + + "\t\t\"metadata\": {},\n" + + "\t\t\"instanceHeartBeatInterval\": 5000,\n" + + "\t\t\"instanceHeartBeatTimeOut\": 15000,\n" + + "\t\t\"ipDeleteTimeout\": 30000,\n" + + "\t\t\"instanceIdGenerator\": \"simple\"\n" + + "\t}],\n" + + "\t\"lastRefTime\": 0,\n" + + "\t\"checksum\": \"\",\n" + + "\t\"allIPs\": false,\n" + + "\t\"valid\": true\n" + + "}"; +} diff --git a/client/src/test/java/com/alibaba/nacos/client/security/SecurityProxyTest.java b/client/src/test/java/com/alibaba/nacos/client/security/SecurityProxyTest.java new file mode 100644 index 00000000000..21ec29ddcfb --- /dev/null +++ b/client/src/test/java/com/alibaba/nacos/client/security/SecurityProxyTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.client.security; + +import org.junit.Test; + +import static org.junit.Assert.*; + +import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.fasterxml.jackson.databind.JsonNode; + +public class SecurityProxyTest { + + /** + * Just test for replace fastjson with jackson. + * + */ + @Test + public void testLogin() { + String example = "{\"accessToken\":\"ttttttttttttttttt\",\"tokenTtl\":1000}"; + JsonNode obj = JacksonUtils.toObj(example); + if (obj.has(Constants.ACCESS_TOKEN)) { + if (obj.has(Constants.ACCESS_TOKEN)) { + assertEquals("ttttttttttttttttt", obj.get(Constants.ACCESS_TOKEN).asText()); + assertEquals(1000, obj.get(Constants.TOKEN_TTL).asInt()); + } + } + } +} diff --git a/cmdb/pom.xml b/cmdb/pom.xml index e2873195f6a..09f1b9eec78 100644 --- a/cmdb/pom.xml +++ b/cmdb/pom.xml @@ -18,7 +18,7 @@ nacos-all com.alibaba.nacos - 1.3.0-BETA + 1.3.0 ../pom.xml 4.0.0 @@ -27,8 +27,7 @@ jar nacos-cmdb ${project.version} - - http://www.example.com + http://nacos.io UTF-8 diff --git a/cmdb/src/main/java/com/alibaba/nacos/cmdb/memory/CmdbProvider.java b/cmdb/src/main/java/com/alibaba/nacos/cmdb/memory/CmdbProvider.java index b75a59e1772..c796bf2258b 100644 --- a/cmdb/src/main/java/com/alibaba/nacos/cmdb/memory/CmdbProvider.java +++ b/cmdb/src/main/java/com/alibaba/nacos/cmdb/memory/CmdbProvider.java @@ -15,7 +15,6 @@ */ package com.alibaba.nacos.cmdb.memory; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.cmdb.spi.CmdbService; import com.alibaba.nacos.api.cmdb.pojo.Entity; import com.alibaba.nacos.api.cmdb.pojo.EntityEvent; @@ -26,6 +25,8 @@ import com.alibaba.nacos.cmdb.service.CmdbWriter; import com.alibaba.nacos.cmdb.utils.Loggers; import com.alibaba.nacos.cmdb.utils.UtilsAndCommons; +import com.alibaba.nacos.common.utils.JacksonUtils; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -166,7 +167,7 @@ public void run() { } if (Loggers.MAIN.isDebugEnabled()) { - Loggers.MAIN.debug("LABEL-TASK {}", "got label map:" + JSON.toJSONString(tmpLabelMap)); + Loggers.MAIN.debug("LABEL-TASK {}", "got label map:" + JacksonUtils.toJson(tmpLabelMap)); } labelMap = tmpLabelMap; @@ -219,7 +220,7 @@ public void run() { eventTimestamp = current; if (Loggers.MAIN.isDebugEnabled()) { - Loggers.MAIN.debug("EVENT-TASK {}", "got events size:" + ", events:" + JSON.toJSONString(events)); + Loggers.MAIN.debug("EVENT-TASK {}", "got events size:" + ", events:" + JacksonUtils.toJson(events)); } if (events != null && !events.isEmpty()) { diff --git a/common/pom.xml b/common/pom.xml index 03c731d96b2..2eefb5195a8 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -18,7 +18,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 ../pom.xml 4.0.0 @@ -27,7 +27,7 @@ jar nacos-common ${project.version} - http://maven.apache.org + http://nacos.io UTF-8 @@ -82,8 +82,8 @@ org.apache.maven.plugins maven-compiler-plugin - 7 - 7 + 6 + 6 diff --git a/common/src/main/java/com/alibaba/nacos/common/executor/ExecutorFactory.java b/common/src/main/java/com/alibaba/nacos/common/executor/ExecutorFactory.java index c3e0daa9c92..301c4c2f00f 100644 --- a/common/src/main/java/com/alibaba/nacos/common/executor/ExecutorFactory.java +++ b/common/src/main/java/com/alibaba/nacos/common/executor/ExecutorFactory.java @@ -16,10 +16,8 @@ package com.alibaba.nacos.common.executor; -import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.ForkJoinPool; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; @@ -39,19 +37,6 @@ public final class ExecutorFactory { public static final String DEFAULT_NAMESPACE = "nacos"; - public static ForkJoinPool newForkJoinPool(final String group) { - ForkJoinPool forkJoinPool = new ForkJoinPool(); - THREAD_POOL_MANAGER.register(DEFAULT_NAMESPACE, group, forkJoinPool); - return forkJoinPool; - } - - public static ForkJoinPool newForkJoinPool(final String group, - final int nThreads) { - ForkJoinPool forkJoinPool = new ForkJoinPool(nThreads); - THREAD_POOL_MANAGER.register(DEFAULT_NAMESPACE, group, forkJoinPool); - return forkJoinPool; - } - public static ExecutorService newSingleExecutorService(final String group) { ExecutorService executorService = Executors.newFixedThreadPool(1); THREAD_POOL_MANAGER.register(DEFAULT_NAMESPACE, group, executorService); diff --git a/common/src/main/java/com/alibaba/nacos/common/executor/ThreadPoolManager.java b/common/src/main/java/com/alibaba/nacos/common/executor/ThreadPoolManager.java index c7cfa0dd9b4..0f7b01f50b2 100644 --- a/common/src/main/java/com/alibaba/nacos/common/executor/ThreadPoolManager.java +++ b/common/src/main/java/com/alibaba/nacos/common/executor/ThreadPoolManager.java @@ -17,6 +17,7 @@ import com.alibaba.nacos.common.utils.ShutdownUtils; +import com.alibaba.nacos.common.utils.ThreadUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,7 +70,7 @@ public static ThreadPoolManager getInstance() { private ThreadPoolManager() {} private void init() { - resourcesManager = new ConcurrentHashMap<>(8); + resourcesManager = new ConcurrentHashMap>>(8); } /** @@ -89,7 +90,7 @@ public void register(String namespace, String group, ExecutorService executor) { synchronized (monitor) { Map> map = resourcesManager.get(namespace); if (map == null) { - map = new HashMap<>(8); + map = new HashMap>(8); map.put(group, new HashSet()); map.get(group).add(executor); resourcesManager.put(namespace, map); @@ -136,7 +137,12 @@ public void deregister(String namespace, String group, ExecutorService executor) } } - public void destroy(String namespace) { + /** + * Destroys all thread pool resources under this namespace + * + * @param namespace namespace + */ + public void destroy(final String namespace) { final Object monitor = lockers.get(namespace); if (monitor == null) { return; @@ -148,7 +154,7 @@ public void destroy(String namespace) { } for (Map.Entry> entry : subResource.entrySet()) { for (ExecutorService executor : entry.getValue()) { - shutdownThreadPool(executor); + ThreadUtils.shutdownThreadPool(executor); } } resourcesManager.get(namespace).clear(); @@ -156,23 +162,28 @@ public void destroy(String namespace) { } } - private void shutdownThreadPool(ExecutorService executor) { - executor.shutdown(); - int retry = 3; - while (retry > 0) { - retry --; - try { - if (executor.awaitTermination(10, TimeUnit.SECONDS)) { - return; - } - } catch (InterruptedException e) { - executor.shutdownNow(); - Thread.interrupted(); - } catch (Throwable ex) { - LOGGER.error("ThreadPoolManager shutdown executor has error : {}", ex); + /** + * This namespace destroys all thread pool resources under the grouping + * + * @param namespace namespace + * @param group group + */ + public void destroy(final String namespace, final String group) { + final Object monitor = lockers.get(namespace); + if (monitor == null) { + return; + } + synchronized (monitor) { + Map> subResource = resourcesManager.get(namespace); + if (subResource == null) { + return; + } + Set waitDestroy = subResource.get(group); + for (ExecutorService executor : waitDestroy) { + ThreadUtils.shutdownThreadPool(executor); } + resourcesManager.get(namespace).remove(group); } - executor.shutdownNow(); } public static void shutdown() { diff --git a/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java b/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java index 157adc69040..ad3595e2f11 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java @@ -65,6 +65,7 @@ public void completed(HttpResponse response) { try { final String body = EntityUtils.toString(response.getEntity()); RestResult data = ResponseHandler.convert(body, type); + data.setCode(response.getStatusLine().getStatusCode()); callback.onReceive(data); } catch (Throwable e) { diff --git a/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java b/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java index b29a69bbc20..2a7e91dfc94 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java @@ -21,7 +21,6 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Iterator; import java.util.List; diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/ByteUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/ByteUtils.java index 2e393fad115..343354aac86 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/ByteUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/ByteUtils.java @@ -17,12 +17,14 @@ package com.alibaba.nacos.common.utils; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; + +import com.alibaba.nacos.api.common.Constants; import org.apache.commons.lang3.StringUtils; /** * @author liaochuntao */ +@SuppressWarnings("all") public final class ByteUtils { public static final byte[] EMPTY = new byte[0]; @@ -31,7 +33,7 @@ public static byte[] toBytes(String s) { if (s == null) { return EMPTY; } - return s.getBytes(Charset.forName(StandardCharsets.UTF_8.name())); + return s.getBytes(Charset.forName(Constants.ENCODE)); } public static byte[] toBytes(Object s) { @@ -45,7 +47,7 @@ public static String toString(byte[] bytes) { if (bytes == null) { return StringUtils.EMPTY; } - return new String(bytes, Charset.forName(StandardCharsets.UTF_8.name())); + return new String(bytes, Charset.forName(Constants.ENCODE)); } public static boolean isEmpty(byte[] data) { diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/CollectionUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/CollectionUtils.java new file mode 100644 index 00000000000..ffe7d70b4fd --- /dev/null +++ b/common/src/main/java/com/alibaba/nacos/common/utils/CollectionUtils.java @@ -0,0 +1,208 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.common.utils; + +import java.lang.reflect.Array; +import java.util.Collection; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * copy from org.apache.commons.collections + * + * @author liaochuntao + */ +public final class CollectionUtils { + + /** + * Returns the index-th value in object, throwing + * IndexOutOfBoundsException if there is no such element or + * IllegalArgumentException if object is not an + * instance of one of the supported types. + *

+ * The supported types, and associated semantics are: + *

    + *
  • Map -- the value returned is the Map.Entry in position + * index in the map's entrySet iterator, + * if there is such an entry.
  • + *
  • List -- this method is equivalent to the list's get method.
  • + *
  • Array -- the index-th array entry is returned, + * if there is such an entry; otherwise an IndexOutOfBoundsException + * is thrown.
  • + *
  • Collection -- the value returned is the index-th object + * returned by the collection's default iterator, if there is such an element.
  • + *
  • Iterator or Enumeration -- the value returned is the + * index-th object in the Iterator/Enumeration, if there + * is such an element. The Iterator/Enumeration is advanced to + * index (or to the end, if index exceeds the + * number of entries) as a side effect of this method.
  • + *
+ * + * @param object the object to get a value from + * @param index the index to get + * @return the object at the specified index + * @throws IndexOutOfBoundsException if the index is invalid + * @throws IllegalArgumentException if the object type is invalid + */ + public static Object get(Object object, int index) { + if (index < 0) { + throw new IndexOutOfBoundsException("Index cannot be negative: " + index); + } + if (object instanceof Map) { + Map map = (Map) object; + Iterator iterator = map.entrySet().iterator(); + return get(iterator, index); + } else if (object instanceof List) { + return ((List) object).get(index); + } else if (object instanceof Object[]) { + return ((Object[]) object)[index]; + } else if (object instanceof Iterator) { + Iterator it = (Iterator) object; + while (it.hasNext()) { + index--; + if (index == -1) { + return it.next(); + } else { + it.next(); + } + } + throw new IndexOutOfBoundsException("Entry does not exist: " + index); + } else if (object instanceof Collection) { + Iterator iterator = ((Collection) object).iterator(); + return get(iterator, index); + } else if (object instanceof Enumeration) { + Enumeration it = (Enumeration) object; + while (it.hasMoreElements()) { + index--; + if (index == -1) { + return it.nextElement(); + } else { + it.nextElement(); + } + } + throw new IndexOutOfBoundsException("Entry does not exist: " + index); + } else if (object == null) { + throw new IllegalArgumentException("Unsupported object type: null"); + } else { + try { + return Array.get(object, index); + } catch (IllegalArgumentException ex) { + throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName()); + } + } + } + + /** + * Gets the size of the collection/iterator specified. + *

+ * This method can handles objects as follows + *

    + *
  • Collection - the collection size + *
  • Map - the map size + *
  • Array - the array size + *
  • Iterator - the number of elements remaining in the iterator + *
  • Enumeration - the number of elements remaining in the enumeration + *
+ * + * @param object the object to get the size of + * @return the size of the specified collection + * @throws IllegalArgumentException thrown if object is not recognised or null + * @since Commons Collections 3.1 + */ + public static int size(Object object) { + int total = 0; + if (object instanceof Map) { + total = ((Map) object).size(); + } else if (object instanceof Collection) { + total = ((Collection) object).size(); + } else if (object instanceof Object[]) { + total = ((Object[]) object).length; + } else if (object instanceof Iterator) { + Iterator it = (Iterator) object; + while (it.hasNext()) { + total++; + it.next(); + } + } else if (object instanceof Enumeration) { + Enumeration it = (Enumeration) object; + while (it.hasMoreElements()) { + total++; + it.nextElement(); + } + } else if (object == null) { + throw new IllegalArgumentException("Unsupported object type: null"); + } else { + try { + total = Array.getLength(object); + } catch (IllegalArgumentException ex) { + throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName()); + } + } + return total; + } + + public static boolean sizeIsEmpty(Object object) { + if (object instanceof Collection) { + return ((Collection) object).isEmpty(); + } else if (object instanceof Map) { + return ((Map) object).isEmpty(); + } else if (object instanceof Object[]) { + return ((Object[]) object).length == 0; + } else if (object instanceof Iterator) { + return ((Iterator) object).hasNext() == false; + } else if (object instanceof Enumeration) { + return ((Enumeration) object).hasMoreElements() == false; + } else if (object == null) { + throw new IllegalArgumentException("Unsupported object type: null"); + } else { + try { + return Array.getLength(object) == 0; + } catch (IllegalArgumentException ex) { + throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName()); + } + } + } + + /** + * Null-safe check if the specified collection is empty. + *

+ * Null returns true. + * + * @param coll the collection to check, may be null + * @return true if empty or null + * @since Commons Collections 3.2 + */ + public static boolean isEmpty(Collection coll) { + return (coll == null || coll.isEmpty()); + } + + /** + * Null-safe check if the specified collection is not empty. + *

+ * Null returns false. + * + * @param coll the collection to check, may be null + * @return true if non-null and non-empty + * @since Commons Collections 3.2 + */ + public static boolean isNotEmpty(Collection coll) { + return !CollectionUtils.isEmpty(coll); + } + +} diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java index cfa5db3665d..81474104122 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java @@ -42,7 +42,7 @@ public static long toLong(String val, long defaultValue) { return Long.parseLong(val); } - public static boolean toBoolean(String val, boolean defaultValue) { + public static boolean toBool(String val, boolean defaultValue) { if (StringUtils.isBlank(val)) { return defaultValue; } diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/ExceptionUtil.java b/common/src/main/java/com/alibaba/nacos/common/utils/ExceptionUtil.java index 83c2c77fb52..62473c11c1c 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/ExceptionUtil.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/ExceptionUtil.java @@ -41,18 +41,23 @@ public static String getAllExceptionMsg(Throwable e) { return strBuilder.toString(); } + public static Throwable getCause(final Throwable t) { + final Throwable cause = t.getCause(); + if (Objects.isNull(cause)) { + return t; + } + return cause; + } + public static String getStackTrace(final Throwable t) { if (t == null) { return ""; } - try (final ByteArrayOutputStream out = new ByteArrayOutputStream(); final PrintStream ps = new PrintStream(out)) { - t.printStackTrace(ps); - ps.flush(); - return new String(out.toByteArray()); - } catch (final IOException ignored) { - // ignored - } - return ""; + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final PrintStream ps = new PrintStream(out); + t.printStackTrace(ps); + ps.flush(); + return new String(out.toByteArray()); } } diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/JacksonUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/JacksonUtils.java index 9f4c94fdd05..ddaafaa9489 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/JacksonUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/JacksonUtils.java @@ -16,9 +16,19 @@ package com.alibaba.nacos.common.utils; +import com.alibaba.nacos.api.exception.runtime.NacosDeserializationException; +import com.alibaba.nacos.api.exception.runtime.NacosSerializationException; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.NamedType; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import java.io.IOException; import java.lang.reflect.Type; /** @@ -30,29 +40,103 @@ public final class JacksonUtils { static { mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + mapper.setSerializationInclusion(Include.NON_NULL); } - public static String toJson(Object obj) throws Exception { - return mapper.writeValueAsString(obj); + public static String toJson(Object obj) { + try { + return mapper.writeValueAsString(obj); + } + catch (JsonProcessingException e) { + throw new NacosSerializationException(obj.getClass(), e); + } } - public static byte[] toJsonBytes(Object obj) throws Exception { - return ByteUtils.toBytes(mapper.writeValueAsString(obj)); + public static byte[] toJsonBytes(Object obj) { + try { + return ByteUtils.toBytes(mapper.writeValueAsString(obj)); + } + catch (JsonProcessingException e) { + throw new NacosSerializationException(obj.getClass(), e); + } } - public static T toObj(byte[] json, Class cls) throws Exception { - return toObj(StringUtils.newString4UTF8(json), cls); + public static T toObj(byte[] json, Class cls) { + try { + return toObj(StringUtils.newString4UTF8(json), cls); + } + catch (Exception e) { + throw new NacosDeserializationException(cls, e); + } } - public static T toObj(byte[] json, Type cls) throws Exception { - return toObj(StringUtils.newString4UTF8(json), cls); + public static T toObj(byte[] json, Type cls) { + try { + return toObj(StringUtils.newString4UTF8(json), cls); + } + catch (Exception e) { + throw new NacosDeserializationException(e); + } } - public static T toObj(String json, Class cls) throws Exception { - return mapper.readValue(json, cls); + public static T toObj(byte[] json, TypeReference typeReference) { + try { + return toObj(StringUtils.newString4UTF8(json), typeReference); + } + catch (Exception e) { + throw new NacosDeserializationException(e); + } } - public static T toObj(String json, Type type) throws Exception { - return mapper.readValue(json, mapper.constructType(type)); + public static T toObj(String json, Class cls) { + try { + return mapper.readValue(json, cls); + } + catch (IOException e) { + throw new NacosDeserializationException(cls, e); + } + } + + public static T toObj(String json, Type type) { + try { + return mapper.readValue(json, mapper.constructType(type)); + } + catch (IOException e) { + throw new NacosDeserializationException(e); + } + } + + public static T toObj(String json, TypeReference typeReference) { + try { + return mapper.readValue(json, typeReference); + } + catch (IOException e) { + throw new NacosDeserializationException(typeReference.getClass(), e); + } + } + + public static JsonNode toObj(String json) { + try { + return mapper.readTree(json); + } + catch (IOException e) { + throw new NacosDeserializationException(e); + } + } + + public static void registerSubtype(Class clz, String type) { + mapper.registerSubtypes(new NamedType(clz, type)); + } + + public static ObjectNode createEmptyJsonNode() { + return new ObjectNode(mapper.getNodeFactory()); + } + + public static ArrayNode createEmptyArrayNode() { + return new ArrayNode(mapper.getNodeFactory()); + } + + public static JsonNode transferToJsonNode(Object obj) { + return mapper.valueToTree(obj); } } diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/LoggerUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/LoggerUtils.java index 2173dd98d60..5288fbc5d8c 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/LoggerUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/LoggerUtils.java @@ -23,6 +23,16 @@ */ public final class LoggerUtils { + public static final String TRACE = "TRACE"; + + public static final String INFO = "INFO"; + + public static final String DEBUG = "DEBUG"; + + public static final String WARN = "WARN"; + + public static final String ERROR = "ERROR"; + public static void printIfDebugEnabled(Logger logger, String s, Object... args) { if (logger.isDebugEnabled()) { logger.debug(s, args); @@ -35,4 +45,22 @@ public static void printIfInfoEnabled(Logger logger, String s, Object... args) { } } + public static void printIfTraceEnabled(Logger logger, String s, Object... args) { + if (logger.isTraceEnabled()) { + logger.trace(s, args); + } + } + + public static void printIfWarnEnabled(Logger logger, String s, Object... args) { + if (logger.isWarnEnabled()) { + logger.warn(s, args); + } + } + + public static void printIfErrorEnabled(Logger logger, String s, Object... args) { + if (logger.isErrorEnabled()) { + logger.error(s, args); + } + } + } diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/MapUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/MapUtils.java new file mode 100644 index 00000000000..97044ea21a2 --- /dev/null +++ b/common/src/main/java/com/alibaba/nacos/common/utils/MapUtils.java @@ -0,0 +1,114 @@ +/* + * + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + * + */ + +package com.alibaba.nacos.common.utils; + +import java.util.Collection; +import java.util.Dictionary; +import java.util.Map; + +/** + * @author liaochuntao + */ +@SuppressWarnings("all") +public class MapUtils { + + /** + * Null-safe check if the specified Dictionary is empty. + *

+ * Null returns true. + * + * @param map the collection to check, may be null + * @return true if empty or null + */ + public static boolean isEmpty(Map map) { + return (map == null || map.isEmpty()); + } + + /** + * Null-safe check if the specified Dictionary is not empty. + *

+ * Null returns false. + * + * @param map the collection to check, may be null + * @return true if non-null and non-empty + */ + public static boolean isNotEmpty(Map map) { + return !isEmpty(map); + } + + /** + * Null-safe check if the specified Dictionary is empty. + *

+ * Null returns true. + * + * @param coll the collection to check, may be null + * @return true if empty or null + */ + public static boolean isEmpty(Dictionary coll) { + return (coll == null || coll.isEmpty()); + } + + /** + * Null-safe check if the specified Dictionary is not empty. + *

+ * Null returns false. + * + * @param coll the collection to check, may be null + * @return true if non-null and non-empty + */ + public static boolean isNotEmpty(Dictionary coll) { + return !isEmpty(coll); + } + + public static void putIfValNoNull(Map target, Object key, Object value) { + Objects.requireNonNull(key, "key"); + if (value != null) { + target.put(key, value); + } + } + + public static void putIfValNoEmpty(Map target, Object key, Object value) { + Objects.requireNonNull(key, "key"); + if (value instanceof String) { + if (StringUtils.isNotEmpty((String) value)) { + target.put(key, value); + } + return; + } + if (value instanceof Collection) { + if (CollectionUtils.isNotEmpty((Collection) value)) { + target.put(key, value); + } + return; + } + if (value instanceof Map) { + if (isNotEmpty((Map) value)) { + target.put(key, value); + } + return; + } + if (value instanceof Dictionary) { + if (isNotEmpty((Dictionary) value)) { + target.put(key, value); + } + return; + } + } + +} diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/Objects.java b/common/src/main/java/com/alibaba/nacos/common/utils/Objects.java new file mode 100644 index 00000000000..82fbaa8dd3b --- /dev/null +++ b/common/src/main/java/com/alibaba/nacos/common/utils/Objects.java @@ -0,0 +1,240 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.common.utils; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +/** + * @author liaochuntao + */ +@SuppressWarnings("all") +public class Objects { + + /** + * Returns {@code true} if the arguments are equal to each other + * and {@code false} otherwise. + * Consequently, if both arguments are {@code null}, {@code true} + * is returned and if exactly one argument is {@code null}, {@code + * false} is returned. Otherwise, equality is determined by using + * the {@link Object#equals equals} method of the first + * argument. + * + * @param a an object + * @param b an object to be compared with {@code a} for equality + * @return {@code true} if the arguments are equal to each other + * and {@code false} otherwise + * @see Object#equals(Object) + */ + public static boolean equals(Object a, Object b) { + return (a == b) || (a != null && a.equals(b)); + } + + /** + * Returns the hash code of a non-{@code null} argument and 0 for + * a {@code null} argument. + * + * @param o an object + * @return the hash code of a non-{@code null} argument and 0 for + * a {@code null} argument + * @see Object#hashCode + */ + public static int hashCode(Object o) { + return o != null ? o.hashCode() : 0; + } + + /** + * Generates a hash code for a sequence of input values. The hash + * code is generated as if all the input values were placed into an + * array, and that array were hashed by calling {@link + * Arrays#hashCode(Object[])}. + * + *

This method is useful for implementing {@link + * Object#hashCode()} on objects containing multiple fields. For + * example, if an object that has three fields, {@code x}, {@code + * y}, and {@code z}, one could write: + * + *

+	 * @Override public int hashCode() {
+	 *     return Objects.hash(x, y, z);
+	 * }
+	 * 
+ * + * Warning: When a single object reference is supplied, the returned + * value does not equal the hash code of that object reference. This + * value can be computed by calling {@link #hashCode(Object)}. + * + * @param values the values to be hashed + * @return a hash value of the sequence of input values + * @see Arrays#hashCode(Object[]) + * @see List#hashCode + */ + public static int hash(Object... values) { + return Arrays.hashCode(values); + } + + /** + * Returns the result of calling {@code toString} for a non-{@code + * null} argument and {@code "null"} for a {@code null} argument. + * + * @param o an object + * @return the result of calling {@code toString} for a non-{@code + * null} argument and {@code "null"} for a {@code null} argument + * @see Object#toString + * @see String#valueOf(Object) + */ + public static String toString(Object o) { + return String.valueOf(o); + } + + /** + * Returns the result of calling {@code toString} on the first + * argument if the first argument is not {@code null} and returns + * the second argument otherwise. + * + * @param o an object + * @param nullDefault string to return if the first argument is + * {@code null} + * @return the result of calling {@code toString} on the first + * argument if it is not {@code null} and the second argument + * otherwise. + */ + public static String toString(Object o, String nullDefault) { + return (o != null) ? o.toString() : nullDefault; + } + + /** + * Returns 0 if the arguments are identical and {@code + * c.compare(a, b)} otherwise. + * Consequently, if both arguments are {@code null} 0 + * is returned. + * + *

Note that if one of the arguments is {@code null}, a {@code + * NullPointerException} may or may not be thrown depending on + * what ordering policy, if any, the {@link Comparator Comparator} + * chooses to have for {@code null} values. + * + * @param the type of the objects being compared + * @param a an object + * @param b an object to be compared with {@code a} + * @param c the {@code Comparator} to compare the first two arguments + * @return 0 if the arguments are identical and {@code + * c.compare(a, b)} otherwise. + * @see Comparable + * @see Comparator + */ + public static int compare(T a, T b, Comparator c) { + return (a == b) ? 0 : c.compare(a, b); + } + + /** + * Checks that the specified object reference is not {@code null}. This + * method is designed primarily for doing parameter validation in methods + * and constructors, as demonstrated below: + *

+	 * public Foo(Bar bar) {
+	 *     this.bar = Objects.requireNonNull(bar);
+	 * }
+	 * 
+ * + * @param obj the object reference to check for nullity + * @param the type of the reference + * @return {@code obj} if not {@code null} + * @throws NullPointerException if {@code obj} is {@code null} + */ + public static T requireNonNull(T obj) { + if (obj == null) + throw new NullPointerException(); + return obj; + } + + /** + * Checks that the specified object reference is not {@code null} and + * throws a customized {@link NullPointerException} if it is. This method + * is designed primarily for doing parameter validation in methods and + * constructors with multiple parameters, as demonstrated below: + *
+	 * public Foo(Bar bar, Baz baz) {
+	 *     this.bar = Objects.requireNonNull(bar, "bar must not be null");
+	 *     this.baz = Objects.requireNonNull(baz, "baz must not be null");
+	 * }
+	 * 
+ * + * @param obj the object reference to check for nullity + * @param message detail message to be used in the event that a {@code + * NullPointerException} is thrown + * @param the type of the reference + * @return {@code obj} if not {@code null} + * @throws NullPointerException if {@code obj} is {@code null} + */ + public static T requireNonNull(T obj, String message) { + if (obj == null) + throw new NullPointerException(message); + return obj; + } + + /** + * Returns {@code true} if the provided reference is {@code null} otherwise + * returns {@code false}. + * + * @apiNote This method exists to be used as a + * + * @param obj a reference to be checked against {@code null} + * @return {@code true} if the provided reference is {@code null} otherwise + * {@code false} + * + * @since 1.8 + */ + public static boolean isNull(Object obj) { + return obj == null; + } + + /** + * Returns {@code true} if the provided reference is non-{@code null} + * otherwise returns {@code false}. + * + * @apiNote This method exists to be used as a + * + * @param obj a reference to be checked against {@code null} + * @return {@code true} if the provided reference is non-{@code null} + * otherwise {@code false} + * + * @since 1.8 + */ + public static boolean nonNull(Object obj) { + return obj != null; + } + + /** + * Returns the first argument if it is non-{@code null} and + * otherwise returns the non-{@code null} second argument. + * + * @param obj an object + * @param defaultObj a non-{@code null} object to return if the first argument + * is {@code null} + * @param the type of the reference + * @return the first argument if it is non-{@code null} and + * otherwise the second argument if it is non-{@code null} + * @throws NullPointerException if both {@code obj} is null and + * {@code defaultObj} is {@code null} + * @since 9 + */ + public static T requireNonNullElse(T obj, T defaultObj) { + return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj"); + } +} diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/Observable.java b/common/src/main/java/com/alibaba/nacos/common/utils/Observable.java index 583fb81cc23..aea8aa6d141 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/Observable.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/Observable.java @@ -16,7 +16,6 @@ package com.alibaba.nacos.common.utils; -import java.util.Objects; import java.util.Set; /** @@ -25,7 +24,7 @@ public class Observable { private transient boolean changed = false; - private transient Set obs = new ConcurrentHashSet<>(); + private transient Set obs = new ConcurrentHashSet(); private volatile int observerCnt = 0; private boolean alreadyAddObserver = false; diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/Pair.java b/common/src/main/java/com/alibaba/nacos/common/utils/Pair.java index 497d32956f6..0d8ee383382 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/Pair.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/Pair.java @@ -28,7 +28,7 @@ public class Pair { } public static Pair with(A first, B second) { - return new Pair<>(first, second); + return new Pair(first, second); } public A getFirst() { diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/StringUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/StringUtils.java index bfc57ad6a36..94f50ad029f 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/StringUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/StringUtils.java @@ -15,11 +15,12 @@ */ package com.alibaba.nacos.common.utils; +import com.alibaba.nacos.api.common.Constants; + import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.Locale; @@ -39,7 +40,7 @@ public class StringUtils { public static final String EMPTY = ""; public static String newString4UTF8(byte[] bytes) { - return new String(bytes, Charset.forName(StandardCharsets.UTF_8.name())); + return new String(bytes, Charset.forName(Constants.ENCODE)); } public static boolean isBlank(String str) { @@ -214,4 +215,89 @@ private static void escapeJavaStyleString(Writer out, String str, boolean escape } } } + + // The following utility functions are extracted from org.apache.commons.lang3 + // start + + /** + *

Checks if CharSequence contains a search CharSequence irrespective of case, + * handling {@code null}. Case-insensitivity is defined as by + * {@link String#equalsIgnoreCase(String)}. + * + *

A {@code null} CharSequence will return {@code false}.

+ * + *
+     * StringUtils.contains(null, *) = false
+     * StringUtils.contains(*, null) = false
+     * StringUtils.contains("", "") = true
+     * StringUtils.contains("abc", "") = true
+     * StringUtils.contains("abc", "a") = true
+     * StringUtils.contains("abc", "z") = false
+     * StringUtils.contains("abc", "A") = true
+     * StringUtils.contains("abc", "Z") = false
+     * 
+ * + * @param str the CharSequence to check, may be null + * @param searchStr the CharSequence to find, may be null + * @return true if the CharSequence contains the search CharSequence irrespective of + * case or false if not or {@code null} string input + * @since 3.0 Changed signature from containsIgnoreCase(String, String) to containsIgnoreCase(CharSequence, CharSequence) + */ + public static boolean containsIgnoreCase(final CharSequence str, final CharSequence searchStr) { + if (str == null || searchStr == null) { + return false; + } + final int len = searchStr.length(); + final int max = str.length() - len; + for (int i = 0; i <= max; i++) { + if (regionMatches(str, true, i, searchStr, 0, len)) { + return true; + } + } + return false; + } + + /** + * Green implementation of regionMatches. + * + * @param cs the {@code CharSequence} to be processed + * @param ignoreCase whether or not to be case insensitive + * @param thisStart the index to start on the {@code cs} CharSequence + * @param substring the {@code CharSequence} to be looked for + * @param start the index to start on the {@code substring} CharSequence + * @param length character length of the region + * @return whether the region matched + */ + static boolean regionMatches(final CharSequence cs, final boolean ignoreCase, final int thisStart, + final CharSequence substring, final int start, final int length) { + if (cs instanceof String && substring instanceof String) { + return ((String) cs).regionMatches(ignoreCase, thisStart, (String) substring, start, length); + } + int index1 = thisStart; + int index2 = start; + int tmpLen = length; + + while (tmpLen-- > 0) { + final char c1 = cs.charAt(index1++); + final char c2 = substring.charAt(index2++); + + if (c1 == c2) { + continue; + } + + if (!ignoreCase) { + return false; + } + + // The same check as in String.regionMatches(): + if (Character.toUpperCase(c1) != Character.toUpperCase(c2) + && Character.toLowerCase(c1) != Character.toLowerCase(c2)) { + return false; + } + } + + return true; + } + + // end } diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/ThreadUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/ThreadUtils.java index 52ddfba5246..bad5b2492ee 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/ThreadUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/ThreadUtils.java @@ -16,7 +16,10 @@ package com.alibaba.nacos.common.utils; +import org.slf4j.Logger; + import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; /** @@ -40,6 +43,11 @@ public static void sleep(long millis) { } } + public static void countDown(CountDownLatch latch) { + Objects.requireNonNull(latch, "latch"); + latch.countDown(); + } + public static void latchAwait(CountDownLatch latch) { try { latch.await(); @@ -71,6 +79,31 @@ public static int getSuitableThreadCount() { return workerCount; } + public static void shutdownThreadPool(ExecutorService executor) { + shutdownThreadPool(executor, null); + } + + public static void shutdownThreadPool(ExecutorService executor, Logger logger) { + executor.shutdown(); + int retry = 3; + while (retry > 0) { + retry --; + try { + if (executor.awaitTermination(10, TimeUnit.SECONDS)) { + return; + } + } catch (InterruptedException e) { + executor.shutdownNow(); + Thread.interrupted(); + } catch (Throwable ex) { + if (logger != null) { + logger.error("ThreadPoolManager shutdown executor has error : {}", ex); + } + } + } + executor.shutdownNow(); + } + private final static int THREAD_MULTIPLER = 2; } diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/VersionUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/VersionUtils.java index 4fd9ef909a5..6dbe0098790 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/VersionUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/VersionUtils.java @@ -28,7 +28,7 @@ public class VersionUtils { /** * 获取当前version */ - public static final String VERSION_DEFAULT = "${project.version}"; + public static final String VERSION_PLACEHOLDER = "${project.version}"; static { @@ -39,7 +39,7 @@ public class VersionUtils { Properties props = new Properties(); props.load(in); String val = props.getProperty("version"); - if (val != null && !VERSION_DEFAULT.equals(val)) { + if (val != null && !VERSION_PLACEHOLDER.equals(val)) { VERSION = val; } } catch (Exception e) { diff --git a/common/src/test/java/com/alibaba/nacos/common/utils/MapUtilsTest.java b/common/src/test/java/com/alibaba/nacos/common/utils/MapUtilsTest.java new file mode 100644 index 00000000000..40d59fe02a7 --- /dev/null +++ b/common/src/test/java/com/alibaba/nacos/common/utils/MapUtilsTest.java @@ -0,0 +1,50 @@ +package com.alibaba.nacos.common.utils; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class MapUtilsTest { + + @Test + public void test_map() { + Map map = new HashMap(); + + MapUtils.putIfValNoNull(map, "key-1", null); + Assert.assertFalse(map.containsKey("key-1")); + + MapUtils.putIfValNoEmpty(map, "key-str", null); + Assert.assertFalse(map.containsKey("key-str")); + + MapUtils.putIfValNoEmpty(map, "key-str", ""); + Assert.assertFalse(map.containsKey("key-str")); + + MapUtils.putIfValNoEmpty(map, "key-str", "1"); + Assert.assertTrue(map.containsKey("key-str")); + + MapUtils.putIfValNoEmpty(map, "key-list", null); + Assert.assertFalse(map.containsKey("key-list")); + + MapUtils.putIfValNoEmpty(map, "key-list", Collections.emptyList()); + Assert.assertFalse(map.containsKey("key-list")); + + MapUtils.putIfValNoEmpty(map, "key-list", Collections.singletonList(1)); + Assert.assertTrue(map.containsKey("key-list")); + + MapUtils.putIfValNoEmpty(map, "key-map", null); + Assert.assertFalse(map.containsKey("key-map")); + + MapUtils.putIfValNoEmpty(map, "key-map", Collections.emptyMap()); + Assert.assertFalse(map.containsKey("key-map")); + + Map map1 = new HashMap(); + map1.put("1123", "123"); + + MapUtils.putIfValNoEmpty(map, "key-map", map1); + Assert.assertTrue(map.containsKey("key-map")); + } + +} \ No newline at end of file diff --git a/config/pom.xml b/config/pom.xml index 0d77d227c34..bdd3ca48a31 100644 --- a/config/pom.xml +++ b/config/pom.xml @@ -17,7 +17,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 4.0.0 @@ -26,7 +26,7 @@ jar nacos-config ${project.version} - http://maven.apache.org + http://nacos.io UTF-8 @@ -54,10 +54,6 @@ com.google.guava guava - - - - org.springframework.boot spring-boot-starter-jdbc @@ -69,16 +65,11 @@ commons-lang commons-lang - 2.6 mysql mysql-connector-java - - commons-dbcp - commons-dbcp - org.apache.derby derby @@ -129,7 +120,6 @@ org.apache.commons commons-lang3 - 3.4 io.micrometer @@ -177,18 +167,6 @@ -
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/aspect/RequestLogAspect.java b/config/src/main/java/com/alibaba/nacos/config/server/aspect/RequestLogAspect.java index 432a3247899..d5ac53b37db 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/aspect/RequestLogAspect.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/aspect/RequestLogAspect.java @@ -18,7 +18,7 @@ import com.alibaba.nacos.common.utils.MD5Utils; import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.monitor.MetricsMonitor; -import com.alibaba.nacos.config.server.service.ConfigService; +import com.alibaba.nacos.config.server.service.ConfigCacheService; import com.alibaba.nacos.config.server.utils.GroupKey2; import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.config.server.utils.RequestUtil; @@ -88,7 +88,7 @@ public Object interfaceRemoveAll(ProceedingJoinPoint pjp, HttpServletRequest req public Object interfaceGetConfig(ProceedingJoinPoint pjp, HttpServletRequest request, HttpServletResponse response, String dataId, String group, String tenant) throws Throwable { final String groupKey = GroupKey2.getKey(dataId, group, tenant); - final String md5 = ConfigService.getContentMd5(groupKey); + final String md5 = ConfigCacheService.getContentMd5(groupKey); MetricsMonitor.getConfigMonitor().incrementAndGet(); return logClientRequest("get", pjp, request, response, dataId, group, tenant, md5); } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedPermissionPersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedPermissionPersistServiceImpl.java index fda21d6a7a4..1198e36e98a 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedPermissionPersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedPermissionPersistServiceImpl.java @@ -21,7 +21,7 @@ import com.alibaba.nacos.config.server.service.repository.EmbeddedStoragePersistServiceImpl; import com.alibaba.nacos.config.server.service.repository.PaginationHelper; import com.alibaba.nacos.config.server.service.repository.DatabaseOperate; -import com.alibaba.nacos.config.server.service.sql.SqlContextUtils; +import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; @@ -29,7 +29,7 @@ import java.util.ArrayList; -import static com.alibaba.nacos.config.server.service.RowMapperManager.PERMISSION_ROW_MAPPER; +import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.PERMISSION_ROW_MAPPER; /** * There is no self-augmented primary key @@ -73,14 +73,14 @@ public Page getPermissions(String role, int pageNo, int pageSize public void addPermission(String role, String resource, String action) { String sql = "INSERT into permissions (role, resource, action) VALUES (?, ?, ?)"; - SqlContextUtils.addSqlContext(sql, role, resource, action); - databaseOperate.smartUpdate(); + EmbeddedStorageContextUtils.addSqlContext(sql, role, resource, action); + databaseOperate.blockUpdate(); } public void deletePermission(String role, String resource, String action) { String sql = "DELETE from permissions WHERE role=? and resource=? and action=?"; - SqlContextUtils.addSqlContext(sql, role, resource, action); - databaseOperate.smartUpdate(); + EmbeddedStorageContextUtils.addSqlContext(sql, role, resource, action); + databaseOperate.blockUpdate(); } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedRolePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedRolePersistServiceImpl.java index 0a70943c447..1ad142db0e5 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedRolePersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedRolePersistServiceImpl.java @@ -21,7 +21,7 @@ import com.alibaba.nacos.config.server.service.repository.EmbeddedStoragePersistServiceImpl; import com.alibaba.nacos.config.server.service.repository.PaginationHelper; import com.alibaba.nacos.config.server.service.repository.DatabaseOperate; -import com.alibaba.nacos.config.server.service.sql.SqlContextUtils; +import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; @@ -29,7 +29,7 @@ import java.util.ArrayList; -import static com.alibaba.nacos.config.server.service.RowMapperManager.ROLE_INFO_ROW_MAPPER; +import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.ROLE_INFO_ROW_MAPPER; /** * There is no self-augmented primary key @@ -93,30 +93,30 @@ public void addRole(String role, String userName) { String sql = "INSERT into roles (role, username) VALUES (?, ?)"; try { - SqlContextUtils.addSqlContext(sql, role, userName); - databaseOperate.update(SqlContextUtils.getCurrentSqlContext()); + EmbeddedStorageContextUtils.addSqlContext(sql, role, userName); + databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext()); } finally { - SqlContextUtils.cleanCurrentSqlContext(); + EmbeddedStorageContextUtils.cleanAllContext(); } } public void deleteRole(String role) { String sql = "DELETE from roles WHERE role=?"; try { - SqlContextUtils.addSqlContext(sql, role); - databaseOperate.update(SqlContextUtils.getCurrentSqlContext()); + EmbeddedStorageContextUtils.addSqlContext(sql, role); + databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext()); } finally { - SqlContextUtils.cleanCurrentSqlContext(); + EmbeddedStorageContextUtils.cleanAllContext(); } } public void deleteRole(String role, String username) { String sql = "DELETE from roles WHERE role=? and username=?"; try { - SqlContextUtils.addSqlContext(sql, role, username); - databaseOperate.update(SqlContextUtils.getCurrentSqlContext()); + EmbeddedStorageContextUtils.addSqlContext(sql, role, username); + databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext()); } finally { - SqlContextUtils.cleanCurrentSqlContext(); + EmbeddedStorageContextUtils.cleanAllContext(); } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedUserPersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedUserPersistServiceImpl.java index e7f8e551eee..2a0a3a86032 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedUserPersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/auth/EmbeddedUserPersistServiceImpl.java @@ -22,14 +22,14 @@ import com.alibaba.nacos.config.server.service.repository.EmbeddedStoragePersistServiceImpl; import com.alibaba.nacos.config.server.service.repository.PaginationHelper; import com.alibaba.nacos.config.server.service.repository.DatabaseOperate; -import com.alibaba.nacos.config.server.service.sql.SqlContextUtils; +import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import java.util.ArrayList; -import static com.alibaba.nacos.config.server.service.RowMapperManager.USER_ROW_MAPPER; +import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.USER_ROW_MAPPER; /** * There is no self-augmented primary key @@ -50,31 +50,31 @@ public void createUser(String username, String password) { String sql = "INSERT into users (username, password, enabled) VALUES (?, ?, ?)"; try { - SqlContextUtils.addSqlContext(sql, username, password, true); - databaseOperate.smartUpdate(); + EmbeddedStorageContextUtils.addSqlContext(sql, username, password, true); + databaseOperate.blockUpdate(); } finally { - SqlContextUtils.cleanCurrentSqlContext(); + EmbeddedStorageContextUtils.cleanAllContext(); } } public void deleteUser(String username) { String sql = "DELETE from users WHERE username=?"; try { - SqlContextUtils.addSqlContext(sql, username); - databaseOperate.smartUpdate(); + EmbeddedStorageContextUtils.addSqlContext(sql, username); + databaseOperate.blockUpdate(); } finally { - SqlContextUtils.cleanCurrentSqlContext(); + EmbeddedStorageContextUtils.cleanAllContext(); } } public void updateUserPassword(String username, String password) { try { - SqlContextUtils.addSqlContext( + EmbeddedStorageContextUtils.addSqlContext( "UPDATE users SET password = ? WHERE username=?", password, username); - databaseOperate.smartUpdate(); + databaseOperate.blockUpdate(); } finally { - SqlContextUtils.cleanCurrentSqlContext(); + EmbeddedStorageContextUtils.cleanAllContext(); } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalPermissionPersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalPermissionPersistServiceImpl.java index 152a6390d10..aec0ddb5f88 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalPermissionPersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalPermissionPersistServiceImpl.java @@ -16,7 +16,6 @@ package com.alibaba.nacos.config.server.auth; -import com.alibaba.nacos.config.server.configuration.ConditionOnEmbeddedStorage; import com.alibaba.nacos.config.server.configuration.ConditionOnExternalStorage; import com.alibaba.nacos.config.server.model.Page; import com.alibaba.nacos.config.server.service.repository.ExternalStoragePersistServiceImpl; @@ -24,7 +23,6 @@ import com.alibaba.nacos.config.server.utils.LogUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Conditional; import org.springframework.jdbc.CannotGetJdbcConnectionException; import org.springframework.jdbc.core.JdbcTemplate; @@ -33,7 +31,7 @@ import javax.annotation.PostConstruct; import java.util.ArrayList; -import static com.alibaba.nacos.config.server.service.RowMapperManager.PERMISSION_ROW_MAPPER; +import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.PERMISSION_ROW_MAPPER; /** * @author liaochuntao diff --git a/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalRolePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalRolePersistServiceImpl.java index 3d36dd08ee5..3d3921e898f 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalRolePersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalRolePersistServiceImpl.java @@ -23,7 +23,6 @@ import com.alibaba.nacos.config.server.utils.LogUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Conditional; import org.springframework.jdbc.CannotGetJdbcConnectionException; import org.springframework.jdbc.core.JdbcTemplate; @@ -35,7 +34,7 @@ import java.sql.SQLException; import java.util.ArrayList; -import static com.alibaba.nacos.config.server.service.RowMapperManager.ROLE_INFO_ROW_MAPPER; +import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.ROLE_INFO_ROW_MAPPER; /** * @author liaochuntao diff --git a/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalUserPersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalUserPersistServiceImpl.java index 408ce61ee22..6f0fa373047 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalUserPersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/auth/ExternalUserPersistServiceImpl.java @@ -23,7 +23,6 @@ import com.alibaba.nacos.config.server.service.repository.PaginationHelper; import com.alibaba.nacos.config.server.utils.LogUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Conditional; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.CannotGetJdbcConnectionException; @@ -33,7 +32,7 @@ import javax.annotation.PostConstruct; import java.util.ArrayList; -import static com.alibaba.nacos.config.server.service.RowMapperManager.USER_ROW_MAPPER; +import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.USER_ROW_MAPPER; /** * @author liaochuntao diff --git a/config/src/main/java/com/alibaba/nacos/config/server/constant/Constants.java b/config/src/main/java/com/alibaba/nacos/config/server/constant/Constants.java index 3f301cc6d76..3a636968f94 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/constant/Constants.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/constant/Constants.java @@ -15,6 +15,8 @@ */ package com.alibaba.nacos.config.server.constant; +import com.alibaba.nacos.config.server.model.event.ConfigDumpEvent; + /** * Server Constants * @@ -175,4 +177,19 @@ public class Constants { public static final int ATOMIC_MAX_SIZE = 1000; public static final String CONFIG_MODEL_RAFT_GROUP = "nacos_config"; public static int DATA_IN_BODY_VERSION = 204; + + /** + * Configure the dump event name + */ + public static final String EXTEND_INFO_CONFIG_DUMP_EVENT = ConfigDumpEvent.class.getName(); + + /** + * Configure the dump event-list name + */ + public static final String EXTEND_INFOS_CONFIG_DUMP_EVENT = ConfigDumpEvent.class.getName() + "@@many"; + + /** + * Specifies that reads wait without timeout + */ + public static final String EXTEND_NEED_READ_UNTIL_HAVE_DATA = "00--0-read-join-0--00"; } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java index ed5ab2f1fd6..d0fde3e2fbd 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @@ -17,6 +17,7 @@ import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.common.model.RestResult; +import com.alibaba.nacos.common.utils.MapUtils; import com.alibaba.nacos.config.server.auth.ConfigResourceParser; import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.controller.parameters.SameNamespaceCloneConfigBean; @@ -32,7 +33,7 @@ import com.alibaba.nacos.config.server.result.ResultBuilder; import com.alibaba.nacos.config.server.result.code.ResultCodeEnum; import com.alibaba.nacos.config.server.service.AggrWhitelist; -import com.alibaba.nacos.config.server.service.ConfigDataChangeEvent; +import com.alibaba.nacos.config.server.model.event.ConfigDataChangeEvent; import com.alibaba.nacos.config.server.service.ConfigSubService; import com.alibaba.nacos.config.server.service.repository.PersistService; import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; @@ -133,32 +134,20 @@ public Boolean publishConfig(HttpServletRequest request, HttpServletResponse res @RequestParam(value = "type", required = false) String type, @RequestParam(value = "schema", required = false) String schema) throws NacosException { + final String srcIp = RequestUtil.getRemoteIp(request); String requestIpApp = RequestUtil.getAppName(request); // check tenant ParamUtils.checkTenant(tenant); ParamUtils.checkParam(dataId, group, "datumId", content); ParamUtils.checkParam(tag); - Map configAdvanceInfo = new HashMap(10); - if (configTags != null) { - configAdvanceInfo.put("config_tags", configTags); - } - if (desc != null) { - configAdvanceInfo.put("desc", desc); - } - if (use != null) { - configAdvanceInfo.put("use", use); - } - if (effect != null) { - configAdvanceInfo.put("effect", effect); - } - if (type != null) { - configAdvanceInfo.put("type", type); - } - if (schema != null) { - configAdvanceInfo.put("schema", schema); - } + MapUtils.putIfValNoNull(configAdvanceInfo, "config_tags", configTags); + MapUtils.putIfValNoNull(configAdvanceInfo, "desc", desc); + MapUtils.putIfValNoNull(configAdvanceInfo, "use", use); + MapUtils.putIfValNoNull(configAdvanceInfo, "effect", effect); + MapUtils.putIfValNoNull(configAdvanceInfo, "type", type); + MapUtils.putIfValNoNull(configAdvanceInfo, "schema", schema); ParamUtils.checkParam(configAdvanceInfo); if (AggrWhitelist.isAggrDataId(dataId)) { @@ -171,33 +160,24 @@ public Boolean publishConfig(HttpServletRequest request, HttpServletResponse res final Timestamp time = TimeUtils.getCurrentTime(); String betaIps = request.getHeader("betaIps"); ConfigInfo configInfo = new ConfigInfo(dataId, group, tenant, appName, content); + configInfo.setType(type); if (StringUtils.isBlank(betaIps)) { if (StringUtils.isBlank(tag)) { persistService.insertOrUpdate(srcIp, srcUser, configInfo, time, - configAdvanceInfo, false); - EventDispatcher.fireEvent( - new ConfigDataChangeEvent(false, dataId, group, tenant, - time.getTime())); + configAdvanceInfo, true); } else { persistService - .insertOrUpdateTag(configInfo, tag, srcIp, srcUser, time, false); - EventDispatcher.fireEvent( - new ConfigDataChangeEvent(false, dataId, group, tenant, tag, - time.getTime())); + .insertOrUpdateTag(configInfo, tag, srcIp, srcUser, time, true); } } - else { // beta publish + else { + // beta publish persistService - .insertOrUpdateBeta(configInfo, betaIps, srcIp, srcUser, time, false); - EventDispatcher.fireEvent( - new ConfigDataChangeEvent(true, dataId, group, tenant, - time.getTime())); + .insertOrUpdateBeta(configInfo, betaIps, srcIp, srcUser, time, true); } - ConfigTraceService - .logPersistenceEvent(dataId, group, tenant, requestIpApp, time.getTime(), - InetUtils.getSelfIp(), ConfigTraceService.PERSISTENCE_EVENT_PUB, content); - + ConfigTraceService.logPersistenceEvent(dataId, group, tenant, requestIpApp, time.getTime(), + InetUtils.getSelfIp(), ConfigTraceService.PERSISTENCE_EVENT_PUB, content); return true; } @@ -275,9 +255,6 @@ public Boolean deleteConfig(HttpServletRequest request, HttpServletResponse resp ConfigTraceService .logPersistenceEvent(dataId, group, tenant, null, time.getTime(), clientIp, ConfigTraceService.PERSISTENCE_EVENT_REMOVE, null); - EventDispatcher.fireEvent( - new ConfigDataChangeEvent(false, dataId, group, tenant, tag, - time.getTime())); return true; } @@ -303,10 +280,6 @@ public RestResult deleteConfigs(HttpServletRequest request, configInfo.getGroup(), configInfo.getTenant(), null, time.getTime(), clientIp, ConfigTraceService.PERSISTENCE_EVENT_REMOVE, null); - EventDispatcher.fireEvent( - new ConfigDataChangeEvent(false, configInfo.getDataId(), - configInfo.getGroup(), configInfo.getTenant(), - time.getTime())); } } return ResultBuilder.buildSuccessResult(true); @@ -453,8 +426,6 @@ public RestResult stopBeta(@RequestParam(value = "dataId") String dataI rr.setMessage("remove beta data error"); return rr; } - EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant, - System.currentTimeMillis())); rr.setCode(200); rr.setData(true); rr.setMessage("stop beta ok"); diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java index c87239449b2..4b62a4e7b06 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java @@ -18,8 +18,8 @@ import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.model.RestResultUtils; import com.alibaba.nacos.config.server.constant.Constants; -import com.alibaba.nacos.config.server.service.DynamicDataSource; -import com.alibaba.nacos.config.server.service.LocalDataSourceServiceImpl; +import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; +import com.alibaba.nacos.config.server.service.datasource.LocalDataSourceServiceImpl; import com.alibaba.nacos.config.server.service.repository.PersistService; import com.alibaba.nacos.config.server.service.dump.DumpService; import com.alibaba.nacos.config.server.utils.LogUtil; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java index b811894cf71..c07d9e55de0 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java @@ -18,8 +18,8 @@ import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.model.CacheItem; import com.alibaba.nacos.config.server.model.ConfigInfoBase; -import com.alibaba.nacos.config.server.service.ConfigService; -import com.alibaba.nacos.config.server.service.DiskUtil; +import com.alibaba.nacos.config.server.service.ConfigCacheService; +import com.alibaba.nacos.config.server.utils.DiskUtil; import com.alibaba.nacos.config.server.service.LongPollingService; import com.alibaba.nacos.config.server.service.repository.PersistService; import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; @@ -60,7 +60,7 @@ public class ConfigServletInner { private static final int TRY_GET_LOCK_TIMES = 9; - private static final int START_LONGPOLLING_VERSION_NUM = 204; + private static final int START_LONG_POLLING_VERSION_NUM = 204; /** * 轮询接口 @@ -91,7 +91,7 @@ public String doPollingConfig(HttpServletRequest request, HttpServletResponse re /** * 2.0.4版本以前, 返回值放入header中 */ - if (versionNum < START_LONGPOLLING_VERSION_NUM) { + if (versionNum < START_LONG_POLLING_VERSION_NUM) { response.addHeader(Constants.PROBE_MODIFY_RESPONSE, oldResult); response.addHeader(Constants.PROBE_MODIFY_RESPONSE_NEW, newResult); } else { @@ -125,7 +125,7 @@ public String doGetConfig(HttpServletRequest request, HttpServletResponse respon try { String md5 = Constants.NULL; long lastModified = 0L; - CacheItem cacheItem = ConfigService.getContentCache(groupKey); + CacheItem cacheItem = ConfigCacheService.getContentCache(groupKey); if (cacheItem != null) { if (cacheItem.isBeta()) { if (cacheItem.getIps4Beta().contains(clientIp)) { @@ -288,7 +288,7 @@ public String doGetConfig(HttpServletRequest request, HttpServletResponse respon } private static void releaseConfigReadLock(String groupKey) { - ConfigService.releaseReadLock(groupKey); + ConfigCacheService.releaseReadLock(groupKey); } private static int tryConfigReadLock(String groupKey) { @@ -300,7 +300,7 @@ private static int tryConfigReadLock(String groupKey) { * 尝试加锁,最多10次 */ for (int i = TRY_GET_LOCK_TIMES; i >= 0; --i) { - lockResult = ConfigService.tryReadLock(groupKey); + lockResult = ConfigCacheService.tryReadLock(groupKey); /** * 数据不存在 */ diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java index b5cead0423a..9238d9cea3a 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java @@ -16,8 +16,8 @@ package com.alibaba.nacos.config.server.controller; import com.alibaba.nacos.config.server.constant.Constants; -import com.alibaba.nacos.config.server.service.DataSourceService; -import com.alibaba.nacos.config.server.service.DynamicDataSource; +import com.alibaba.nacos.config.server.service.datasource.DataSourceService; +import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.utils.InetUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/filter/CurcuitFilter.java b/config/src/main/java/com/alibaba/nacos/config/server/filter/CurcuitFilter.java index 576a0bd98a6..fb544e0f5ce 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/filter/CurcuitFilter.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/filter/CurcuitFilter.java @@ -22,7 +22,9 @@ import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.model.event.RaftDBErrorEvent; import com.alibaba.nacos.config.server.model.event.RaftDBErrorRecoverEvent; +import com.alibaba.nacos.config.server.service.repository.DerbyLoadEvent; import com.alibaba.nacos.consistency.cp.CPProtocol; +import com.alibaba.nacos.consistency.cp.MetadataKey; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.MemberMetaDataConstants; import com.alibaba.nacos.core.cluster.ServerMemberManager; @@ -115,7 +117,7 @@ public void destroy() { private void listenerSelfInCluster() { protocol.protocolMetaData().subscribe(Constants.CONFIG_MODEL_RAFT_GROUP, - com.alibaba.nacos.consistency.cp.Constants.RAFT_GROUP_MEMBER, + MetadataKey.RAFT_GROUP_MEMBER, new Observer() { @Override public void update(Observable o, Object arg) { diff --git a/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigHistoryInfo.java b/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigHistoryInfo.java index 47005f3d08c..793da039497 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigHistoryInfo.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigHistoryInfo.java @@ -15,6 +15,9 @@ */ package com.alibaba.nacos.config.server.model; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + import java.io.Serializable; import java.sql.Timestamp; @@ -30,7 +33,7 @@ public class ConfigHistoryInfo implements Serializable { * id, nid, data_id, group_id, content, md5, gmt_create, gmt_modified, (配置创建时间,配置变更时间) src_user, src_ip, (变更操作者) * op_type(变更操作类型) */ - + @JsonSerialize(using = ToStringSerializer.class) private long id; /** * 上次改动历史的id diff --git a/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoAggr.java b/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoAggr.java index a7627cf0832..291f2f2b7c8 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoAggr.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoAggr.java @@ -15,6 +15,9 @@ */ package com.alibaba.nacos.config.server.model; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + import java.io.Serializable; /** @@ -25,7 +28,7 @@ public class ConfigInfoAggr implements Serializable { private static final long serialVersionUID = -3845825581059306364L; - + @JsonSerialize(using = ToStringSerializer.class) private long id; private String dataId; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoBase.java b/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoBase.java index d7dc640cae8..82017e83a9a 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoBase.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/ConfigInfoBase.java @@ -17,6 +17,8 @@ import com.alibaba.nacos.common.utils.MD5Utils; import com.alibaba.nacos.config.server.constant.Constants; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import java.io.PrintWriter; import java.io.Serializable; @@ -32,6 +34,7 @@ public class ConfigInfoBase implements Serializable, Comparable /** * 不能增加字段 */ + @JsonSerialize(using = ToStringSerializer.class) private long id; private String dataId; private String group; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/model/GroupInfo.java b/config/src/main/java/com/alibaba/nacos/config/server/model/GroupInfo.java index c19a404ca1c..ca39ba4985e 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/model/GroupInfo.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/GroupInfo.java @@ -15,6 +15,9 @@ */ package com.alibaba.nacos.config.server.model; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + import java.io.Serializable; /** @@ -24,6 +27,8 @@ */ public class GroupInfo implements Serializable { static final long serialVersionUID = -1L; + + @JsonSerialize(using = ToStringSerializer.class) private long id; private String address; private String group; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/model/capacity/Capacity.java b/config/src/main/java/com/alibaba/nacos/config/server/model/capacity/Capacity.java index 4fdbeb98c45..fca08e72f93 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/model/capacity/Capacity.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/capacity/Capacity.java @@ -15,6 +15,9 @@ */ package com.alibaba.nacos.config.server.model.capacity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + import java.io.Serializable; import java.sql.Timestamp; @@ -27,6 +30,8 @@ public class Capacity implements Serializable { private static final long serialVersionUID = 77343194329627468L; + + @JsonSerialize(using = ToStringSerializer.class) private Long id; private Integer quota; private Integer usage; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigDataChangeEvent.java b/config/src/main/java/com/alibaba/nacos/config/server/model/event/ConfigDataChangeEvent.java similarity index 97% rename from config/src/main/java/com/alibaba/nacos/config/server/service/ConfigDataChangeEvent.java rename to config/src/main/java/com/alibaba/nacos/config/server/model/event/ConfigDataChangeEvent.java index 67be0327c1e..b34287ea268 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigDataChangeEvent.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/event/ConfigDataChangeEvent.java @@ -1,4 +1,5 @@ /* + * * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,8 +13,9 @@ * 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. + * */ -package com.alibaba.nacos.config.server.service; +package com.alibaba.nacos.config.server.model.event; import com.alibaba.nacos.config.server.utils.event.EventDispatcher.Event; import org.apache.commons.lang3.StringUtils; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/model/event/ConfigDumpEvent.java b/config/src/main/java/com/alibaba/nacos/config/server/model/event/ConfigDumpEvent.java new file mode 100644 index 00000000000..6d0752a1c60 --- /dev/null +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/event/ConfigDumpEvent.java @@ -0,0 +1,221 @@ +/* + * + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + * + */ + +package com.alibaba.nacos.config.server.model.event; + +import com.alibaba.nacos.core.notify.Event; + +/** + * @author liaochuntao + */ +public class ConfigDumpEvent implements Event { + + private static final long serialVersionUID = -8776888606458370294L; + + private boolean remove; + private String namespaceId; + private String dataId; + private String group; + private boolean isBeta; + private String tag; + private String content; + private String betaIps; + private String handleIp; + private String type; + private long lastModifiedTs; + + public boolean isRemove() { + return remove; + } + + public void setRemove(boolean remove) { + this.remove = remove; + } + + public String getNamespaceId() { + return namespaceId; + } + + public void setNamespaceId(String namespaceId) { + this.namespaceId = namespaceId; + } + + public String getDataId() { + return dataId; + } + + public void setDataId(String dataId) { + this.dataId = dataId; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + public boolean isBeta() { + return isBeta; + } + + public void setBeta(boolean beta) { + isBeta = beta; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getBetaIps() { + return betaIps; + } + + public void setBetaIps(String betaIps) { + this.betaIps = betaIps; + } + + public String getHandleIp() { + return handleIp; + } + + public void setHandleIp(String handleIp) { + this.handleIp = handleIp; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public long getLastModifiedTs() { + return lastModifiedTs; + } + + public void setLastModifiedTs(long lastModifiedTs) { + this.lastModifiedTs = lastModifiedTs; + } + + public static ConfigDumpEventBuilder builder() { + return new ConfigDumpEventBuilder(); + } + + public static final class ConfigDumpEventBuilder { + private boolean remove; + private String namespaceId; + private String dataId; + private String group; + private boolean isBeta; + private String tag; + private String content; + private String betaIps; + private String handleIp; + private String type; + private long lastModifiedTs; + + private ConfigDumpEventBuilder() { + } + + public ConfigDumpEventBuilder remove(boolean remove) { + this.remove = remove; + return this; + } + + public ConfigDumpEventBuilder namespaceId(String namespaceId) { + this.namespaceId = namespaceId; + return this; + } + + public ConfigDumpEventBuilder dataId(String dataId) { + this.dataId = dataId; + return this; + } + + public ConfigDumpEventBuilder group(String group) { + this.group = group; + return this; + } + + public ConfigDumpEventBuilder isBeta(boolean isBeta) { + this.isBeta = isBeta; + return this; + } + + public ConfigDumpEventBuilder tag(String tag) { + this.tag = tag; + return this; + } + + public ConfigDumpEventBuilder content(String content) { + this.content = content; + return this; + } + + public ConfigDumpEventBuilder betaIps(String betaIps) { + this.betaIps = betaIps; + return this; + } + + public ConfigDumpEventBuilder handleIp(String handleIp) { + this.handleIp = handleIp; + return this; + } + + public ConfigDumpEventBuilder type(String type) { + this.type = type; + return this; + } + + public ConfigDumpEventBuilder lastModifiedTs(long lastModifiedTs) { + this.lastModifiedTs = lastModifiedTs; + return this; + } + + public ConfigDumpEvent build() { + ConfigDumpEvent configDumpEvent = new ConfigDumpEvent(); + configDumpEvent.setRemove(remove); + configDumpEvent.setNamespaceId(namespaceId); + configDumpEvent.setDataId(dataId); + configDumpEvent.setGroup(group); + configDumpEvent.setTag(tag); + configDumpEvent.setContent(content); + configDumpEvent.setBetaIps(betaIps); + configDumpEvent.setHandleIp(handleIp); + configDumpEvent.setType(type); + configDumpEvent.setLastModifiedTs(lastModifiedTs); + configDumpEvent.isBeta = this.isBeta; + return configDumpEvent; + } + } +} diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/LocalDataChangeEvent.java b/config/src/main/java/com/alibaba/nacos/config/server/model/event/LocalDataChangeEvent.java similarity index 96% rename from config/src/main/java/com/alibaba/nacos/config/server/service/LocalDataChangeEvent.java rename to config/src/main/java/com/alibaba/nacos/config/server/model/event/LocalDataChangeEvent.java index d687b923787..dccb71bcb82 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/LocalDataChangeEvent.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/event/LocalDataChangeEvent.java @@ -1,4 +1,5 @@ /* + * * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,8 +13,9 @@ * 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. + * */ -package com.alibaba.nacos.config.server.service; +package com.alibaba.nacos.config.server.model.event; import com.alibaba.nacos.config.server.utils.event.EventDispatcher.Event; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/monitor/MemoryMonitor.java b/config/src/main/java/com/alibaba/nacos/config/server/monitor/MemoryMonitor.java index df466d7a31a..cb0803b49fe 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/monitor/MemoryMonitor.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/monitor/MemoryMonitor.java @@ -16,9 +16,9 @@ package com.alibaba.nacos.config.server.monitor; import com.alibaba.nacos.config.server.service.ClientTrackService; -import com.alibaba.nacos.config.server.service.ConfigService; -import com.alibaba.nacos.config.server.service.TimerTaskService; +import com.alibaba.nacos.config.server.service.ConfigCacheService; import com.alibaba.nacos.config.server.service.notify.AsyncNotifyService; +import com.alibaba.nacos.config.server.utils.ConfigExecutor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -39,13 +39,13 @@ public class MemoryMonitor { @Autowired public MemoryMonitor(AsyncNotifyService notifySingleService) { - TimerTaskService.scheduleWithFixedDelay(new PrintMemoryTask(), DELAY_SECONDS, + ConfigExecutor.scheduleWithFixedDelay(new PrintMemoryTask(), DELAY_SECONDS, DELAY_SECONDS, TimeUnit.SECONDS); - TimerTaskService.scheduleWithFixedDelay(new PrintGetConfigResponeTask(), DELAY_SECONDS, + ConfigExecutor.scheduleWithFixedDelay(new PrintGetConfigResponeTask(), DELAY_SECONDS, DELAY_SECONDS, TimeUnit.SECONDS); - TimerTaskService.scheduleWithFixedDelay(new NotifyTaskQueueMonitorTask(notifySingleService), DELAY_SECONDS, + ConfigExecutor.scheduleWithFixedDelay(new NotifyTaskQueueMonitorTask(notifySingleService), DELAY_SECONDS, DELAY_SECONDS, TimeUnit.SECONDS); } @@ -70,7 +70,7 @@ class PrintMemoryTask implements Runnable { @Override public void run() { - int groupCount = ConfigService.groupCount(); + int groupCount = ConfigCacheService.groupCount(); int subClientCount = ClientTrackService.subscribeClientCount(); long subCount = ClientTrackService.subscriberCount(); memoryLog.info("groupCount={}, subscriberClientCount={}, subscriberCount={}", groupCount, subClientCount, diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/ClientTrackService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/ClientTrackService.java index 92384a8c6cc..60c6631b0ed 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/ClientTrackService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/ClientTrackService.java @@ -85,7 +85,7 @@ static public Map listSubStatus(String ip) { String groupKey = entry.getKey(); String clientMd5 = entry.getValue(); long lastPollingTs = record.groupKey2pollingTsMap.get(groupKey); - boolean isUpdate = ConfigService.isUptodate(groupKey, clientMd5); + boolean isUpdate = ConfigCacheService.isUptodate(groupKey, clientMd5); status.put(groupKey, new SubscriberStatus(groupKey, isUpdate, clientMd5, lastPollingTs)); } @@ -104,7 +104,7 @@ static public Map listSubsByGroup(String groupKey) { Long lastPollingTs = clientRec.groupKey2pollingTsMap.get(groupKey); if (null != clientMd5 && lastPollingTs != null) { - Boolean isUpdate = ConfigService.isUptodate(groupKey, clientMd5); + Boolean isUpdate = ConfigCacheService.isUptodate(groupKey, clientMd5); subs.put(clientRec.ip, new SubscriberStatus(groupKey, isUpdate, clientMd5, lastPollingTs)); } @@ -120,7 +120,7 @@ static public Map isClientUptodate(String ip) { for (Map.Entry entry : getClientRecord(ip).groupKey2md5Map.entrySet()) { String groupKey = entry.getKey(); String clientMd5 = entry.getValue(); - Boolean isuptodate = ConfigService.isUptodate(groupKey, clientMd5); + Boolean isuptodate = ConfigCacheService.isUptodate(groupKey, clientMd5); result.put(groupKey, isuptodate); } return result; @@ -135,7 +135,7 @@ static public Map listSubscriberByGroup(String groupKey) { for (ClientRecord clientRec : clientRecords.values()) { String clientMd5 = clientRec.groupKey2md5Map.get(groupKey); if (null != clientMd5) { - Boolean isuptodate = ConfigService.isUptodate(groupKey, clientMd5); + Boolean isuptodate = ConfigCacheService.isUptodate(groupKey, clientMd5); subs.put(clientRec.ip, isuptodate); } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigCacheService.java similarity index 95% rename from config/src/main/java/com/alibaba/nacos/config/server/service/ConfigService.java rename to config/src/main/java/com/alibaba/nacos/config/server/service/ConfigCacheService.java index 1daf5845302..84d08b251ef 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigCacheService.java @@ -19,7 +19,9 @@ import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.model.CacheItem; import com.alibaba.nacos.config.server.model.ConfigInfoBase; +import com.alibaba.nacos.config.server.model.event.LocalDataChangeEvent; import com.alibaba.nacos.config.server.service.repository.PersistService; +import com.alibaba.nacos.config.server.utils.DiskUtil; import com.alibaba.nacos.config.server.utils.GroupKey; import com.alibaba.nacos.config.server.utils.GroupKey2; import com.alibaba.nacos.config.server.utils.PropertyUtil; @@ -41,7 +43,7 @@ * * @author Nacos */ -public class ConfigService { +public class ConfigCacheService { @Autowired private static PersistService persistService; @@ -72,11 +74,11 @@ static public boolean dump(String dataId, String group, String tenant, String co try { final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); - if (md5.equals(ConfigService.getContentMd5(groupKey))) { + if (md5.equals(ConfigCacheService.getContentMd5(groupKey))) { dumpLog.warn( "[dump-ignore] ignore to save cache file. groupKey={}, md5={}, lastModifiedOld={}, " + "lastModifiedNew={}", - groupKey, md5, ConfigService.getLastModifiedTs(groupKey), lastModifiedTs); + groupKey, md5, ConfigCacheService.getLastModifiedTs(groupKey), lastModifiedTs); } else if (!PropertyUtil.isDirectRead()) { DiskUtil.saveToDisk(dataId, group, tenant, content); } @@ -117,11 +119,11 @@ static public boolean dumpBeta(String dataId, String group, String tenant, Strin try { final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); - if (md5.equals(ConfigService.getContentBetaMd5(groupKey))) { + if (md5.equals(ConfigCacheService.getContentBetaMd5(groupKey))) { dumpLog.warn( "[dump-beta-ignore] ignore to save cache file. groupKey={}, md5={}, lastModifiedOld={}, " + "lastModifiedNew={}", - groupKey, md5, ConfigService.getLastModifiedTs(groupKey), lastModifiedTs); + groupKey, md5, ConfigCacheService.getLastModifiedTs(groupKey), lastModifiedTs); } else if (!PropertyUtil.isDirectRead()) { DiskUtil.saveBetaToDisk(dataId, group, tenant, content); } @@ -156,11 +158,11 @@ static public boolean dumpTag(String dataId, String group, String tenant, String try { final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); - if (md5.equals(ConfigService.getContentTagMd5(groupKey, tag))) { + if (md5.equals(ConfigCacheService.getContentTagMd5(groupKey, tag))) { dumpLog.warn( "[dump-tag-ignore] ignore to save cache file. groupKey={}, md5={}, lastModifiedOld={}, " + "lastModifiedNew={}", - groupKey, md5, ConfigService.getLastModifiedTs(groupKey), lastModifiedTs); + groupKey, md5, ConfigCacheService.getLastModifiedTs(groupKey), lastModifiedTs); } else if (!PropertyUtil.isDirectRead()) { DiskUtil.saveTagToDisk(dataId, group, tenant, tag, content); } @@ -199,7 +201,7 @@ static public boolean dumpChange(String dataId, String group, String tenant, Str dumpLog.warn( "[dump-ignore] ignore to save cache file. groupKey={}, md5={}, lastModifiedOld={}, " + "lastModifiedNew={}", - groupKey, md5, ConfigService.getLastModifiedTs(groupKey), lastModifiedTs); + groupKey, md5, ConfigCacheService.getLastModifiedTs(groupKey), lastModifiedTs); } else { DiskUtil.saveToDisk(dataId, group, tenant, content); } @@ -517,12 +519,12 @@ static public long getLastModifiedTs(String groupKey) { } static public boolean isUptodate(String groupKey, String md5) { - String serverMd5 = ConfigService.getContentMd5(groupKey); + String serverMd5 = ConfigCacheService.getContentMd5(groupKey); return StringUtils.equals(md5, serverMd5); } static public boolean isUptodate(String groupKey, String md5, String ip, String tag) { - String serverMd5 = ConfigService.getContentMd5(groupKey, ip, tag); + String serverMd5 = ConfigCacheService.getContentMd5(groupKey, ip, tag); return StringUtils.equals(md5, serverMd5); } @@ -584,7 +586,7 @@ static CacheItem makeSure(final String groupKey) { private final static String NO_SPACE_EN = "No space left on device"; private final static String DISK_QUATA_CN = "超出磁盘限额"; private final static String DISK_QUATA_EN = "Disk quota exceeded"; - static final Logger log = LoggerFactory.getLogger(ConfigService.class); + static final Logger log = LoggerFactory.getLogger(ConfigCacheService.class); /** * groupKey -> cacheItem */ diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/LongPollingService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/LongPollingService.java index b24c873e045..bb918d180b7 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/LongPollingService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/LongPollingService.java @@ -16,6 +16,7 @@ package com.alibaba.nacos.config.server.service; import com.alibaba.nacos.config.server.model.SampleResult; +import com.alibaba.nacos.config.server.model.event.LocalDataChangeEvent; import com.alibaba.nacos.config.server.monitor.MetricsMonitor; import com.alibaba.nacos.config.server.utils.GroupKey; import com.alibaba.nacos.config.server.utils.LogUtil; @@ -302,7 +303,7 @@ class DataChangeTask implements Runnable { @Override public void run() { try { - ConfigService.getContentBetaMd5(groupKey); + ConfigCacheService.getContentBetaMd5(groupKey); for (Iterator iter = allSubs.iterator(); iter.hasNext(); ) { ClientLongPolling clientSub = iter.next(); if (clientSub.clientMd5Map.containsKey(groupKey)) { diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/TimerTaskService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/TimerTaskService.java deleted file mode 100644 index 95d42d5ddc0..00000000000 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/TimerTaskService.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed 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. - */ -package com.alibaba.nacos.config.server.service; - -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * 定时任务服务 - * - * @author Nacos - */ -public class TimerTaskService { - @SuppressWarnings("PMD.ThreadPoolCreationRule") - private static ScheduledExecutorService scheduledExecutorService = Executors - .newScheduledThreadPool(10, new ThreadFactory() { - AtomicInteger count = new AtomicInteger(0); - - @Override - public Thread newThread(Runnable r) { - Thread t = new Thread(r); - t.setDaemon(true); - t.setName("com.alibaba.nacos.server.Timer-" + count.getAndIncrement()); - return t; - } - }); - - static public void scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, - TimeUnit unit) { - scheduledExecutorService.scheduleWithFixedDelay(command, initialDelay, delay, unit); - } - -} diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/GroupCapacityPersistService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/GroupCapacityPersistService.java index 401aaa75641..bb9fd6eae8a 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/GroupCapacityPersistService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/GroupCapacityPersistService.java @@ -17,8 +17,8 @@ import com.alibaba.nacos.config.server.model.capacity.Capacity; import com.alibaba.nacos.config.server.model.capacity.GroupCapacity; -import com.alibaba.nacos.config.server.service.DataSourceService; -import com.alibaba.nacos.config.server.service.DynamicDataSource; +import com.alibaba.nacos.config.server.service.datasource.DataSourceService; +import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; import com.alibaba.nacos.config.server.utils.PropertyUtil; import com.alibaba.nacos.config.server.utils.TimeUtils; import com.google.common.collect.Lists; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/TenantCapacityPersistService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/TenantCapacityPersistService.java index 4c389c25413..8efa55a4714 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/TenantCapacityPersistService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/capacity/TenantCapacityPersistService.java @@ -16,8 +16,8 @@ package com.alibaba.nacos.config.server.service.capacity; import com.alibaba.nacos.config.server.model.capacity.TenantCapacity; -import com.alibaba.nacos.config.server.service.DataSourceService; -import com.alibaba.nacos.config.server.service.DynamicDataSource; +import com.alibaba.nacos.config.server.service.datasource.DataSourceService; +import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; import com.alibaba.nacos.config.server.utils.PropertyUtil; import com.alibaba.nacos.config.server.utils.TimeUtils; import com.google.common.collect.Lists; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/DataSourceService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/DataSourceService.java similarity index 96% rename from config/src/main/java/com/alibaba/nacos/config/server/service/DataSourceService.java rename to config/src/main/java/com/alibaba/nacos/config/server/service/datasource/DataSourceService.java index 901318259cd..1b0bfbcbabe 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/DataSourceService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/DataSourceService.java @@ -1,4 +1,5 @@ /* + * * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,8 +13,9 @@ * 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. + * */ -package com.alibaba.nacos.config.server.service; +package com.alibaba.nacos.config.server.service.datasource; import java.io.IOException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/DynamicDataSource.java b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/DynamicDataSource.java similarity index 92% rename from config/src/main/java/com/alibaba/nacos/config/server/service/DynamicDataSource.java rename to config/src/main/java/com/alibaba/nacos/config/server/service/datasource/DynamicDataSource.java index 7bb21282e65..35fec62f165 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/DynamicDataSource.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/DynamicDataSource.java @@ -1,4 +1,5 @@ /* + * * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,8 +13,9 @@ * 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. + * */ -package com.alibaba.nacos.config.server.service; +package com.alibaba.nacos.config.server.service.datasource; import com.alibaba.nacos.config.server.utils.PropertyUtil; @@ -48,7 +50,7 @@ public synchronized DataSourceService getDataSource() { } else { if (basicDataSourceService == null) { - basicDataSourceService = new BasicDataSourceServiceImpl(); + basicDataSourceService = new ExternalDataSourceServiceImpl(); basicDataSourceService.init(); } return basicDataSourceService; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/BasicDataSourceServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceServiceImpl.java similarity index 83% rename from config/src/main/java/com/alibaba/nacos/config/server/service/BasicDataSourceServiceImpl.java rename to config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceServiceImpl.java index 7f9a8bf4e2f..1c80a39199a 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/BasicDataSourceServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceServiceImpl.java @@ -1,4 +1,5 @@ /* + * * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,15 +13,17 @@ * 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. + * */ -package com.alibaba.nacos.config.server.service; +package com.alibaba.nacos.config.server.service.datasource; +import com.alibaba.nacos.common.utils.ConvertUtils; +import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.config.server.monitor.MetricsMonitor; +import com.alibaba.nacos.config.server.utils.ConfigExecutor; import com.alibaba.nacos.config.server.utils.PropertyUtil; import com.alibaba.nacos.core.utils.ApplicationUtils; -import org.apache.commons.dbcp.BasicDataSource; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.math.NumberUtils; +import com.zaxxer.hikari.HikariDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DataAccessException; @@ -38,7 +41,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO4BETA_ROW_MAPPER; +import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO4BETA_ROW_MAPPER; import static com.alibaba.nacos.config.server.utils.LogUtil.defaultLog; import static com.alibaba.nacos.config.server.utils.LogUtil.fatalLog; @@ -47,9 +50,10 @@ * * @author Nacos */ -public class BasicDataSourceServiceImpl implements DataSourceService { +public class ExternalDataSourceServiceImpl implements DataSourceService { - private static final Logger log = LoggerFactory.getLogger(BasicDataSourceServiceImpl.class); + private static final Logger log = LoggerFactory.getLogger( + ExternalDataSourceServiceImpl.class); private static final String DEFAULT_MYSQL_DRIVER = "com.mysql.jdbc.Driver"; private static final String MYSQL_HIGH_LEVEL_DRIVER = "com.mysql.cj.jdbc.Driver"; private static String JDBC_DRIVER_NAME; @@ -63,7 +67,7 @@ public class BasicDataSourceServiceImpl implements DataSourceService { private static final String DB_LOAD_ERROR_MSG = "[db-load-error]load jdbc.properties error"; - private List dataSourceList = new ArrayList(); + private List dataSourceList = new ArrayList<>(); private JdbcTemplate jt; private DataSourceTransactionManager tm; private TransactionTemplate tjt; @@ -89,7 +93,7 @@ public class BasicDataSourceServiceImpl implements DataSourceService { @PostConstruct public void init() { - queryTimeout = NumberUtils.toInt(System.getProperty("QUERYTIMEOUT"), 3); + queryTimeout = ConvertUtils.toInt(System.getProperty("QUERYTIMEOUT"), 3); jt = new JdbcTemplate(); /** * 设置最大记录数,防止内存膨胀 @@ -125,16 +129,16 @@ public void init() { throw new RuntimeException(DB_LOAD_ERROR_MSG); } - TimerTaskService.scheduleWithFixedDelay(new SelectMasterTask(), 10, 10, + ConfigExecutor.scheduleWithFixedDelay(new SelectMasterTask(), 10, 10, TimeUnit.SECONDS); - TimerTaskService.scheduleWithFixedDelay(new CheckDBHealthTask(), 10, 10, + ConfigExecutor.scheduleWithFixedDelay(new CheckDBHealthTask(), 10, 10, TimeUnit.SECONDS); } } @Override public synchronized void reload() throws IOException { - List dblist = new ArrayList(); + List dblist = new ArrayList<>(); try { String val = null; val = ApplicationUtils.getProperty("db.num"); @@ -144,7 +148,7 @@ public synchronized void reload() throws IOException { int dbNum = Integer.parseInt(val.trim()); for (int i = 0; i < dbNum; i++) { - BasicDataSource ds = new BasicDataSource(); + HikariDataSource ds = new HikariDataSource(); ds.setDriverClassName(JDBC_DRIVER_NAME); val = ApplicationUtils.getProperty("db.url." + i); @@ -152,7 +156,7 @@ public synchronized void reload() throws IOException { fatalLog.error("db.url." + i + " is null"); throw new IllegalArgumentException("db.url." + i + " is null"); } - ds.setUrl(val.trim()); + ds.setJdbcUrl(val.trim()); val = ApplicationUtils.getProperty("db.user." + i, ApplicationUtils.getProperty("db.user")); if (null == val) { @@ -168,23 +172,17 @@ public synchronized void reload() throws IOException { } ds.setPassword(val.trim()); - val = ApplicationUtils.getProperty("db.initialSize." + i, ApplicationUtils.getProperty("db.initialSize")); - ds.setInitialSize(Integer.parseInt(defaultIfNull(val, "10"))); - - val = ApplicationUtils.getProperty("db.maxActive." + i, ApplicationUtils.getProperty("db.maxActive")); - ds.setMaxActive(Integer.parseInt(defaultIfNull(val, "20"))); + val = ApplicationUtils.getProperty("db.maxPoolSize." + i, ApplicationUtils.getProperty("db.maxPoolSize")); + ds.setMaximumPoolSize(Integer.parseInt(defaultIfNull(val, "20"))); - val = ApplicationUtils.getProperty("db.maxIdle." + i, ApplicationUtils.getProperty("db.maxIdle")); - ds.setMaxIdle(Integer.parseInt(defaultIfNull(val, "50"))); + val = ApplicationUtils.getProperty("db.minIdle." + i, ApplicationUtils.getProperty("db.minIdle")); + ds.setMinimumIdle(Integer.parseInt(defaultIfNull(val, "50"))); - ds.setMaxWait(3000L); - ds.setPoolPreparedStatements(true); + ds.setConnectionTimeout(3000L); // 每10分钟检查一遍连接池 - ds.setTimeBetweenEvictionRunsMillis(TimeUnit.MINUTES - .toMillis(10L)); - ds.setTestWhileIdle(true); - ds.setValidationQuery("SELECT 1 FROM dual"); + ds.setValidationTimeout(TimeUnit.MINUTES.toMillis(10L)); + ds.setConnectionTestQuery("SELECT 1 FROM dual"); dblist.add(ds); @@ -250,8 +248,8 @@ public String getCurrentDBUrl() { if (ds == null) { return StringUtils.EMPTY; } - BasicDataSource bds = (BasicDataSource) ds; - return bds.getUrl(); + HikariDataSource bds = (HikariDataSource) ds; + return bds.getJdbcUrl(); } @Override @@ -262,12 +260,12 @@ public String getHealth() { /** * 主库不健康 */ - return "DOWN:" + getIpFromUrl(dataSourceList.get(i).getUrl()); + return "DOWN:" + getIpFromUrl(dataSourceList.get(i).getJdbcUrl()); } else { /** * 从库不健康 */ - return "WARN:" + getIpFromUrl(dataSourceList.get(i).getUrl()); + return "WARN:" + getIpFromUrl(dataSourceList.get(i).getJdbcUrl()); } } } @@ -299,7 +297,7 @@ public void run() { boolean isFound = false; int index = -1; - for (BasicDataSource ds : dataSourceList) { + for (HikariDataSource ds : dataSourceList) { index++; testMasterJT.setDataSource(ds); testMasterJT.setQueryTimeout(queryTimeout); @@ -308,7 +306,7 @@ public void run() { .update( "DELETE FROM config_info WHERE data_id='com.alibaba.nacos.testMasterDB'"); if (jt.getDataSource() != ds) { - fatalLog.warn("[master-db] {}", ds.getUrl()); + fatalLog.warn("[master-db] {}", ds.getJdbcUrl()); } jt.setDataSource(ds); tm.setDataSource(ds); @@ -345,10 +343,10 @@ public void run() { } catch (DataAccessException e) { if (i == masterIndex) { fatalLog.error("[db-error] master db {} down.", - getIpFromUrl(dataSourceList.get(i).getUrl())); + getIpFromUrl(dataSourceList.get(i).getJdbcUrl())); } else { fatalLog.error("[db-error] slave db {} down.", - getIpFromUrl(dataSourceList.get(i).getUrl())); + getIpFromUrl(dataSourceList.get(i).getJdbcUrl())); } isHealthList.set(i, Boolean.FALSE); diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/LocalDataSourceServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/LocalDataSourceServiceImpl.java similarity index 95% rename from config/src/main/java/com/alibaba/nacos/config/server/service/LocalDataSourceServiceImpl.java rename to config/src/main/java/com/alibaba/nacos/config/server/service/datasource/LocalDataSourceServiceImpl.java index a31e33fe2ab..d8a9cf9ac32 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/LocalDataSourceServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/LocalDataSourceServiceImpl.java @@ -1,4 +1,5 @@ /* + * * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,13 +13,16 @@ * 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. + * */ -package com.alibaba.nacos.config.server.service; +package com.alibaba.nacos.config.server.service.datasource; +import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.api.exception.runtime.NacosRuntimeException; import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.common.utils.DiskUtils; +import com.alibaba.nacos.core.utils.DiskUtils; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.zaxxer.hikari.HikariDataSource; import java.io.File; @@ -87,7 +91,7 @@ public synchronized void reload() { if (LogUtil.defaultLog.isErrorEnabled()) { LogUtil.defaultLog.error(e.getMessage(), e); } - throw new RuntimeException("load schema.sql error.", e); + throw new NacosRuntimeException(NacosException.SERVER_ERROR, "load schema.sql error.", e); } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpConfigHandler.java b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpConfigHandler.java new file mode 100644 index 00000000000..c93c092da77 --- /dev/null +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpConfigHandler.java @@ -0,0 +1,150 @@ +/* + * + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + * + */ + +package com.alibaba.nacos.config.server.service.dump; + +import com.alibaba.nacos.common.utils.StringUtils; +import com.alibaba.nacos.config.server.model.event.ConfigDumpEvent; +import com.alibaba.nacos.config.server.service.AggrWhitelist; +import com.alibaba.nacos.config.server.service.ClientIpWhiteList; +import com.alibaba.nacos.config.server.service.ConfigCacheService; +import com.alibaba.nacos.config.server.service.SwitchService; +import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; +import com.alibaba.nacos.core.notify.Event; +import com.alibaba.nacos.core.notify.listener.Subscribe; + +/** + * @author liaochuntao + */ +public class DumpConfigHandler implements Subscribe { + + public static boolean configDump(ConfigDumpEvent event) { + final String dataId = event.getDataId(); + final String group = event.getGroup(); + final String namespaceId = event.getNamespaceId(); + final String content = event.getContent(); + final String type = event.getType(); + final long lastModified = event.getLastModifiedTs(); + if (event.isBeta()) { + boolean result = false; + if (event.isRemove()) { + result = ConfigCacheService.removeBeta(dataId, group, namespaceId); + if (result) { + ConfigTraceService + .logDumpEvent(dataId, group, namespaceId, null, lastModified, + event.getHandleIp(), + ConfigTraceService.DUMP_EVENT_REMOVE_OK, + System.currentTimeMillis() - lastModified, 0); + } + return result; + } + else { + result = ConfigCacheService + .dumpBeta(dataId, group, namespaceId, content, lastModified, + event.getBetaIps()); + if (result) { + ConfigTraceService + .logDumpEvent(dataId, group, namespaceId, null, lastModified, + event.getHandleIp(), ConfigTraceService.DUMP_EVENT_OK, + System.currentTimeMillis() - lastModified, + content.length()); + } + } + + return result; + } + if (StringUtils.isBlank(event.getTag())) { + if (dataId.equals(AggrWhitelist.AGGRIDS_METADATA)) { + AggrWhitelist.load(content); + } + + if (dataId.equals(ClientIpWhiteList.CLIENT_IP_WHITELIST_METADATA)) { + ClientIpWhiteList.load(content); + } + + if (dataId.equals(SwitchService.SWITCH_META_DATAID)) { + SwitchService.load(content); + } + + boolean result; + if (!event.isRemove()) { + result = ConfigCacheService + .dump(dataId, group, namespaceId, content, lastModified, type); + + if (result) { + ConfigTraceService + .logDumpEvent(dataId, group, namespaceId, null, lastModified, + event.getHandleIp(), ConfigTraceService.DUMP_EVENT_OK, + System.currentTimeMillis() - lastModified, + content.length()); + } + } + else { + result = ConfigCacheService.remove(dataId, group, namespaceId); + + if (result) { + ConfigTraceService + .logDumpEvent(dataId, group, namespaceId, null, lastModified, + event.getHandleIp(), + ConfigTraceService.DUMP_EVENT_REMOVE_OK, + System.currentTimeMillis() - lastModified, 0); + } + } + return result; + } + else { + // + boolean result; + if (!event.isRemove()) { + result = ConfigCacheService + .dumpTag(dataId, group, namespaceId, event.getTag(), content, + lastModified); + if (result) { + ConfigTraceService + .logDumpEvent(dataId, group, namespaceId, null, lastModified, + event.getHandleIp(), ConfigTraceService.DUMP_EVENT_OK, + System.currentTimeMillis() - lastModified, + content.length()); + } + } + else { + result = ConfigCacheService + .removeTag(dataId, group, namespaceId, event.getTag()); + if (result) { + ConfigTraceService + .logDumpEvent(dataId, group, namespaceId, null, lastModified, + event.getHandleIp(), + ConfigTraceService.DUMP_EVENT_REMOVE_OK, + System.currentTimeMillis() - lastModified, 0); + } + } + return result; + } + + } + + @Override + public void onEvent(ConfigDumpEvent event) { + configDump(event); + } + + @Override + public Class subscribeType() { + return ConfigDumpEvent.class; + } +} diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java index d30f16797cf..6132a1f67bf 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java @@ -15,11 +15,10 @@ */ package com.alibaba.nacos.config.server.service.dump; +import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.common.utils.IoUtils; import com.alibaba.nacos.common.utils.MD5Utils; -import com.alibaba.nacos.common.utils.Observable; -import com.alibaba.nacos.common.utils.Observer; -import com.alibaba.nacos.common.utils.ThreadUtils; +import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.manager.TaskManager; import com.alibaba.nacos.config.server.model.ConfigInfo; @@ -27,32 +26,24 @@ import com.alibaba.nacos.config.server.model.ConfigInfoChanged; import com.alibaba.nacos.config.server.model.ConfigInfoWrapper; import com.alibaba.nacos.config.server.model.Page; -import com.alibaba.nacos.config.server.service.ConfigService; -import com.alibaba.nacos.config.server.service.DiskUtil; -import com.alibaba.nacos.config.server.service.DynamicDataSource; -import com.alibaba.nacos.config.server.service.TimerTaskService; +import com.alibaba.nacos.config.server.service.ConfigCacheService; +import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; import com.alibaba.nacos.config.server.service.merge.MergeTaskProcessor; import com.alibaba.nacos.config.server.service.repository.PersistService; +import com.alibaba.nacos.config.server.utils.ConfigExecutor; import com.alibaba.nacos.config.server.utils.ContentUtils; +import com.alibaba.nacos.config.server.utils.DiskUtil; import com.alibaba.nacos.config.server.utils.GroupKey; import com.alibaba.nacos.config.server.utils.GroupKey2; import com.alibaba.nacos.config.server.utils.LogUtil; -import com.alibaba.nacos.config.server.utils.PropertyUtil; import com.alibaba.nacos.config.server.utils.TimeUtils; -import com.alibaba.nacos.consistency.cp.CPProtocol; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.distributed.ProtocolManager; -import com.alibaba.nacos.core.distributed.raft.exception.NoSuchRaftGroupException; import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.GlobalExecutor; import com.alibaba.nacos.core.utils.InetUtils; import com.alibaba.nacos.core.utils.TimerContext; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -61,12 +52,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; -import java.util.Objects; import java.util.Random; -import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import static com.alibaba.nacos.config.server.utils.LogUtil.fatalLog; @@ -75,12 +63,16 @@ * * @author Nacos */ -@Service -public class DumpService { +@SuppressWarnings("PMD.AbstractClassShouldStartWithAbstractNamingRule") +public abstract class DumpService { - private final PersistService persistService; - private final ServerMemberManager memberManager; - private final ProtocolManager protocolManager; + protected DumpProcessor processor; + protected DumpAllProcessor dumpAllProcessor; + protected DumpAllBetaProcessor dumpAllBetaProcessor; + protected DumpAllTagProcessor dumpAllTagProcessor; + + protected final PersistService persistService; + protected final ServerMemberManager memberManager; /** * Here you inject the dependent objects constructively, ensuring that some @@ -88,13 +80,20 @@ public class DumpService { * * @param persistService {@link PersistService} * @param memberManager {@link ServerMemberManager} - * @param protocolManager {@link ProtocolManager} */ - public DumpService(PersistService persistService, ServerMemberManager memberManager, - ProtocolManager protocolManager) { + public DumpService(PersistService persistService, ServerMemberManager memberManager) { this.persistService = persistService; this.memberManager = memberManager; - this.protocolManager = protocolManager; + this.processor = new DumpProcessor(this); + this.dumpAllProcessor = new DumpAllProcessor(this); + this.dumpAllBetaProcessor = new DumpAllBetaProcessor(this); + this.dumpAllTagProcessor = new DumpAllTagProcessor(this); + this.dumpTaskMgr = new TaskManager("com.alibaba.nacos.server.DumpTaskManager"); + this.dumpTaskMgr.setDefaultTaskProcessor(processor); + + this.dumpAllTaskMgr = new TaskManager("com.alibaba.nacos.server.DumpAllTaskManager"); + this.dumpAllTaskMgr.setDefaultTaskProcessor(dumpAllProcessor); + DynamicDataSource.getInstance().getDataSource(); } public PersistService getPersistService() { @@ -105,88 +104,17 @@ public ServerMemberManager getMemberManager() { return memberManager; } - @PostConstruct - protected void init() throws Throwable { - DynamicDataSource.getInstance().getDataSource(); - - DumpProcessor processor = new DumpProcessor(this); - DumpAllProcessor dumpAllProcessor = new DumpAllProcessor(this); - DumpAllBetaProcessor dumpAllBetaProcessor = new DumpAllBetaProcessor(this); - DumpAllTagProcessor dumpAllTagProcessor = new DumpAllTagProcessor(this); - - dumpTaskMgr = new TaskManager("com.alibaba.nacos.server.DumpTaskManager"); - dumpTaskMgr.setDefaultTaskProcessor(processor); - - dumpAllTaskMgr = new TaskManager("com.alibaba.nacos.server.DumpAllTaskManager"); - dumpAllTaskMgr.setDefaultTaskProcessor(dumpAllProcessor); - - // If using embedded distributed storage, you need to wait for the - // underlying master to complete the selection - if (PropertyUtil.isEmbeddedStorage() && !ApplicationUtils.getStandaloneMode()) { - - CPProtocol protocol = protocolManager.getCpProtocol(); - - LogUtil.dumpLog - .info("With embedded distributed storage, you need to wait for " - + "the underlying master to complete before you can perform the dump operation."); - - AtomicReference errorReference = new AtomicReference<>(null); - CountDownLatch waitDumpFinish = new CountDownLatch(1); - - // watch path => /nacos_config/leader/ has value ? - Observer observer = new Observer() { - - @Override - public void update(Observable o, Object arg) { - GlobalExecutor.executeByCommon(() -> { - // must make sure that there is a value here to perform the correct operation that follows - if (Objects.isNull(arg)) { - return; - } - try { - dumpOperate(processor, dumpAllProcessor, dumpAllBetaProcessor, - dumpAllTagProcessor); - } - catch (Throwable ex) { - errorReference.set(ex); - } - finally { - waitDumpFinish.countDown(); - } - protocol.protocolMetaData() - .unSubscribe(Constants.CONFIG_MODEL_RAFT_GROUP, - com.alibaba.nacos.consistency.cp.Constants.LEADER_META_DATA, - this); - }); - } - }; - - protocol.protocolMetaData().subscribe(Constants.CONFIG_MODEL_RAFT_GROUP, - com.alibaba.nacos.consistency.cp.Constants.LEADER_META_DATA, - observer); - - // We must wait for the dump task to complete the callback operation before - // continuing with the initialization - ThreadUtils.latchAwait(waitDumpFinish); - - // If an exception occurs during the execution of the dump task, the exception - // needs to be thrown, triggering the node to start the failed process - final Throwable ex = errorReference.get(); - if (Objects.nonNull(ex)) { - throw ex; - } - - } - else { - dumpOperate(processor, dumpAllProcessor, dumpAllBetaProcessor, - dumpAllTagProcessor); - } - } + /** + * initialize + * + * @throws Throwable + */ + protected abstract void init() throws Throwable; - private void dumpOperate(DumpProcessor processor, DumpAllProcessor dumpAllProcessor, + protected void dumpOperate(DumpProcessor processor, DumpAllProcessor dumpAllProcessor, DumpAllBetaProcessor dumpAllBetaProcessor, - DumpAllTagProcessor dumpAllTagProcessor) { - TimerContext.start("config dump job"); + DumpAllTagProcessor dumpAllTagProcessor) throws NacosException { + TimerContext.start("CONFIG_DUMP_TO_FILE"); try { LogUtil.defaultLog.warn("DumpService start"); @@ -218,7 +146,7 @@ private void dumpOperate(DumpProcessor processor, DumpAllProcessor dumpAllProces } } catch (Throwable e) { - log.error("clearConfigHistory error", e); + log.error("clearConfigHistory error : {}", e.toString()); } } }; @@ -257,10 +185,10 @@ private void dumpOperate(DumpProcessor processor, DumpAllProcessor dumpAllProces catch (Exception e) { LogUtil.fatalLog .error("Nacos Server did not start because dumpservice bean construction failure :\n" - + e.getMessage(), e.getCause()); - throw new RuntimeException( + + e.toString()); + throw new NacosException(NacosException.SERVER_ERROR, "Nacos Server did not start because dumpservice bean construction failure :\n" - + e.getMessage()); + + e.getMessage(), e); } if (!ApplicationUtils.getStandaloneMode()) { Runnable heartbeat = () -> { @@ -274,20 +202,20 @@ private void dumpOperate(DumpProcessor processor, DumpAllProcessor dumpAllProces } }; - TimerTaskService + ConfigExecutor .scheduleWithFixedDelay(heartbeat, 0, 10, TimeUnit.SECONDS); long initialDelay = new Random().nextInt(INITIAL_DELAY_IN_MINUTE) + 10; LogUtil.defaultLog.warn("initialDelay:{}", initialDelay); - TimerTaskService.scheduleWithFixedDelay(dumpAll, initialDelay, + ConfigExecutor.scheduleWithFixedDelay(dumpAll, initialDelay, DUMP_ALL_INTERVAL_IN_MINUTE, TimeUnit.MINUTES); - TimerTaskService.scheduleWithFixedDelay(dumpAllBeta, initialDelay, + ConfigExecutor.scheduleWithFixedDelay(dumpAllBeta, initialDelay, DUMP_ALL_INTERVAL_IN_MINUTE, TimeUnit.MINUTES); } - TimerTaskService + ConfigExecutor .scheduleWithFixedDelay(clearConfigHistory, 10, 10, TimeUnit.MINUTES); } finally { @@ -327,7 +255,7 @@ private void dumpConfigInfo(DumpAllProcessor dumpAllProcessor) throws IOExceptio dumpChangeProcessor.process(DumpChangeTask.TASK_ID, new DumpChangeTask()); Runnable checkMd5Task = () -> { LogUtil.defaultLog.error("start checkMd5Task"); - List diffList = ConfigService.checkMd5(); + List diffList = ConfigCacheService.checkMd5(); for (String groupKey : diffList) { String[] dg = GroupKey.parseKey(groupKey); String dataId = dg[0]; @@ -335,12 +263,12 @@ private void dumpConfigInfo(DumpAllProcessor dumpAllProcessor) throws IOExceptio String tenant = dg[2]; ConfigInfoWrapper configInfo = persistService .queryConfigInfo(dataId, group, tenant); - ConfigService.dumpChange(dataId, group, tenant, + ConfigCacheService.dumpChange(dataId, group, tenant, configInfo.getContent(), configInfo.getLastModified()); } LogUtil.defaultLog.error("end checkMd5Task"); }; - TimerTaskService + ConfigExecutor .scheduleWithFixedDelay(checkMd5Task, 0, 12, TimeUnit.HOURS); } } @@ -492,7 +420,7 @@ public void run() { ConfigInfo cf = MergeTaskProcessor .merge(dataId, group, tenant, datumList); String aggrContent = cf.getContent(); - String localContentMD5 = ConfigService + String localContentMD5 = ConfigCacheService .getContentMd5(GroupKey.getKey(dataId, group)); String aggrConetentMD5 = MD5Utils .md5Hex(aggrContent, Constants.ENCODE); @@ -530,25 +458,12 @@ public void run() { } } - private boolean canExecute() { - try { - CPProtocol protocol = protocolManager.getCpProtocol(); - // if is derby + raft mode, only leader can execute - if (PropertyUtil.isEmbeddedStorage() && !ApplicationUtils - .getStandaloneMode()) { - return protocol.isLeader(Constants.CONFIG_MODEL_RAFT_GROUP); - } - // If it is external storage, it determines whether it is the first node of the cluster - return memberManager.isFirstIp(); - } - catch (NoSuchRaftGroupException e) { - return true; - } - catch (Throwable e) { - // It's impossible to get to this point - throw new RuntimeException(e); - } - } + /** + * Used to determine whether the aggregation task, configuration history cleanup task can be performed + * + * @return {@link Boolean} + */ + protected abstract boolean canExecute(); /** * 全量dump间隔 diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpTask.java b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpTask.java index 4f2733b12bb..e87af77445d 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpTask.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpTask.java @@ -26,15 +26,16 @@ import com.alibaba.nacos.config.server.model.ConfigInfoTagWrapper; import com.alibaba.nacos.config.server.model.ConfigInfoWrapper; import com.alibaba.nacos.config.server.model.Page; +import com.alibaba.nacos.config.server.model.event.ConfigDumpEvent; import com.alibaba.nacos.config.server.service.*; import com.alibaba.nacos.config.server.service.repository.PersistService; -import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; import com.alibaba.nacos.config.server.utils.GroupKey2; import com.alibaba.nacos.config.server.utils.LogUtil; import org.apache.commons.lang3.StringUtils; import java.sql.Timestamp; import java.util.List; +import java.util.Objects; import static com.alibaba.nacos.config.server.utils.LogUtil.defaultLog; @@ -142,89 +143,42 @@ public boolean process(String taskType, AbstractTask task) { String handleIp = dumpTask.handleIp; boolean isBeta = dumpTask.isBeta; String tag = dumpTask.tag; + + ConfigDumpEvent.ConfigDumpEventBuilder build = ConfigDumpEvent.builder() + .namespaceId(tenant) + .dataId(dataId) + .group(group) + .isBeta(isBeta) + .tag(tag) + .lastModifiedTs(lastModified) + .handleIp(handleIp); + if (isBeta) { // beta发布,则dump数据,更新beta缓存 ConfigInfo4Beta cf = persistService.findConfigInfo4Beta(dataId, group, tenant); - boolean result; - if (null != cf) { - result = ConfigService.dumpBeta(dataId, group, tenant, cf.getContent(), lastModified, cf.getBetaIps()); - if (result) { - ConfigTraceService.logDumpEvent(dataId, group, tenant, null, lastModified, handleIp, - ConfigTraceService.DUMP_EVENT_OK, System.currentTimeMillis() - lastModified, - cf.getContent().length()); - } - } else { - result = ConfigService.removeBeta(dataId, group, tenant); - if (result) { - ConfigTraceService.logDumpEvent(dataId, group, tenant, null, lastModified, handleIp, - ConfigTraceService.DUMP_EVENT_REMOVE_OK, System.currentTimeMillis() - lastModified, 0); - } - } - return result; + + build.remove(Objects.isNull(cf)); + build.betaIps(Objects.isNull(cf) ? null : cf.getBetaIps()); + build.content(Objects.isNull(cf) ? null : cf.getContent()); + + return DumpConfigHandler.configDump(build.build()); } else { if (StringUtils.isBlank(tag)) { ConfigInfo cf = persistService.findConfigInfo(dataId, group, tenant); - if (dataId.equals(AggrWhitelist.AGGRIDS_METADATA)) { - if (null != cf) { - AggrWhitelist.load(cf.getContent()); - } else { - AggrWhitelist.load(null); - } - } - if (dataId.equals(ClientIpWhiteList.CLIENT_IP_WHITELIST_METADATA)) { - if (null != cf) { - ClientIpWhiteList.load(cf.getContent()); - } else { - ClientIpWhiteList.load(null); - } - } + build.remove(Objects.isNull(cf)); + build.content(Objects.isNull(cf) ? null : cf.getContent()); + build.type(Objects.isNull(cf) ? null : cf.getType()); - if (dataId.equals(SwitchService.SWITCH_META_DATAID)) { - if (null != cf) { - SwitchService.load(cf.getContent()); - } else { - SwitchService.load(null); - } - } + return DumpConfigHandler.configDump(build.build()); + } else { - boolean result; - if (null != cf) { - result = ConfigService.dump(dataId, group, tenant, cf.getContent(), lastModified, cf.getType()); + ConfigInfo4Tag cf = persistService.findConfigInfo4Tag(dataId, group, tenant, tag); - if (result) { - ConfigTraceService.logDumpEvent(dataId, group, tenant, null, lastModified, handleIp, - ConfigTraceService.DUMP_EVENT_OK, System.currentTimeMillis() - lastModified, - cf.getContent().length()); - } - } else { - result = ConfigService.remove(dataId, group, tenant); + build.remove(Objects.isNull(cf)); + build.content(Objects.isNull(cf) ? null : cf.getContent()); - if (result) { - ConfigTraceService.logDumpEvent(dataId, group, tenant, null, lastModified, handleIp, - ConfigTraceService.DUMP_EVENT_REMOVE_OK, System.currentTimeMillis() - lastModified, 0); - } - } - return result; - } else { - ConfigInfo4Tag cf = persistService.findConfigInfo4Tag(dataId, group, tenant, tag); - // - boolean result; - if (null != cf) { - result = ConfigService.dumpTag(dataId, group, tenant, tag, cf.getContent(), lastModified); - if (result) { - ConfigTraceService.logDumpEvent(dataId, group, tenant, null, lastModified, handleIp, - ConfigTraceService.DUMP_EVENT_OK, System.currentTimeMillis() - lastModified, - cf.getContent().length()); - } - } else { - result = ConfigService.removeTag(dataId, group, tenant, tag); - if (result) { - ConfigTraceService.logDumpEvent(dataId, group, tenant, null, lastModified, handleIp, - ConfigTraceService.DUMP_EVENT_REMOVE_OK, System.currentTimeMillis() - lastModified, 0); - } - } - return result; + return DumpConfigHandler.configDump(build.build()); } } } @@ -262,7 +216,8 @@ public boolean process(String taskType, AbstractTask task) { SwitchService.load(cf.getContent()); } - boolean result = ConfigService.dump(cf.getDataId(), cf.getGroup(), cf.getTenant(), cf.getContent(), + boolean result = ConfigCacheService + .dump(cf.getDataId(), cf.getGroup(), cf.getTenant(), cf.getContent(), cf.getLastModified(), cf.getType()); final String content = cf.getContent(); @@ -301,7 +256,8 @@ public boolean process(String taskType, AbstractTask task) { Page page = persistService.findAllConfigInfoBetaForDumpAll(pageNo, PAGE_SIZE); if (page != null) { for (ConfigInfoBetaWrapper cf : page.getPageItems()) { - boolean result = ConfigService.dumpBeta(cf.getDataId(), cf.getGroup(), cf.getTenant(), + boolean result = ConfigCacheService + .dumpBeta(cf.getDataId(), cf.getGroup(), cf.getTenant(), cf.getContent(), cf.getLastModified(), cf.getBetaIps()); LogUtil.dumpLog.info("[dump-all-beta-ok] result={}, {}, {}, length={}, md5={}", result, GroupKey2.getKey(cf.getDataId(), cf.getGroup()), cf.getLastModified(), cf.getContent() @@ -338,7 +294,8 @@ public boolean process(String taskType, AbstractTask task) { Page page = persistService.findAllConfigInfoTagForDumpAll(pageNo, PAGE_SIZE); if (page != null) { for (ConfigInfoTagWrapper cf : page.getPageItems()) { - boolean result = ConfigService.dumpTag(cf.getDataId(), cf.getGroup(), cf.getTenant(), cf.getTag(), + boolean result = ConfigCacheService + .dumpTag(cf.getDataId(), cf.getGroup(), cf.getTenant(), cf.getTag(), cf.getContent(), cf.getLastModified()); LogUtil.dumpLog.info("[dump-all-Tag-ok] result={}, {}, {}, length={}, md5={}", result, GroupKey2.getKey(cf.getDataId(), cf.getGroup()), cf.getLastModified(), cf.getContent() @@ -380,7 +337,7 @@ public boolean process(String taskType, AbstractTask task) { for (ConfigInfoWrapper config : updateMd5List) { final String groupKey = GroupKey2.getKey(config.getDataId(), config.getGroup()); - ConfigService.updateMd5(groupKey, config.getMd5(), + ConfigCacheService.updateMd5(groupKey, config.getMd5(), config.getLastModified()); } long endUpdateMd5 = System.currentTimeMillis(); @@ -395,7 +352,8 @@ public boolean process(String taskType, AbstractTask task) { for (ConfigInfo configInfo : configDeleted) { if (persistService.findConfigInfo(configInfo.getDataId(), configInfo.getGroup(), configInfo.getTenant()) == null) { - ConfigService.remove(configInfo.getDataId(), configInfo.getGroup(), configInfo.getTenant()); + ConfigCacheService + .remove(configInfo.getDataId(), configInfo.getGroup(), configInfo.getTenant()); } } long endDeletedConfigTime = System.currentTimeMillis(); @@ -408,7 +366,8 @@ public boolean process(String taskType, AbstractTask task) { .findChangeConfig(startTime, endTime); LogUtil.defaultLog.warn("changeConfig count:{}", changeConfigs.size()); for (ConfigInfoWrapper cf : changeConfigs) { - boolean result = ConfigService.dumpChange(cf.getDataId(), cf.getGroup(), cf.getTenant(), + boolean result = ConfigCacheService + .dumpChange(cf.getDataId(), cf.getGroup(), cf.getTenant(), cf.getContent(), cf.getLastModified()); final String content = cf.getContent(); final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE); @@ -418,7 +377,7 @@ public boolean process(String taskType, AbstractTask task) { GroupKey2.getKey(cf.getDataId(), cf.getGroup()), cf.getLastModified(), content.length(), md5}); } - ConfigService.reloadConfig(); + ConfigCacheService.reloadConfig(); long endChangeConfigTime = System.currentTimeMillis(); LogUtil.defaultLog.warn("changeConfig done,cost:{}", endChangeConfigTime - startChangeConfigTime); diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/EmbeddedDumpService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/EmbeddedDumpService.java new file mode 100644 index 00000000000..36508fd4d97 --- /dev/null +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/EmbeddedDumpService.java @@ -0,0 +1,176 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.config.server.service.dump; + +import com.alibaba.nacos.common.utils.Observable; +import com.alibaba.nacos.common.utils.Observer; +import com.alibaba.nacos.common.utils.StringUtils; +import com.alibaba.nacos.common.utils.ThreadUtils; +import com.alibaba.nacos.config.server.configuration.ConditionOnEmbeddedStorage; +import com.alibaba.nacos.config.server.constant.Constants; +import com.alibaba.nacos.config.server.service.repository.PersistService; +import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; +import com.alibaba.nacos.consistency.cp.CPProtocol; +import com.alibaba.nacos.consistency.cp.MetadataKey; +import com.alibaba.nacos.core.cluster.ServerMemberManager; +import com.alibaba.nacos.core.distributed.ProtocolManager; +import com.alibaba.nacos.core.distributed.raft.exception.NoSuchRaftGroupException; +import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.core.utils.GlobalExecutor; +import org.springframework.context.annotation.Conditional; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.Objects; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicReference; + +/** + * @author liaochuntao + */ +@Conditional(ConditionOnEmbeddedStorage.class) +@Component +public class EmbeddedDumpService extends DumpService { + + private final ProtocolManager protocolManager; + + /** If it's just a normal reading failure, it can be resolved by retrying */ + final String[] retryMessages = new String[] { + "The conformance protocol is temporarily unavailable for reading" }; + + /**If the read failed due to an internal problem in the Raft state machine, it cannot be remedied by retrying */ + final String[] errorMessages = new String[] { + "FSMCaller is overload.", + "STATE_ERROR" + }; + + /** + * Here you inject the dependent objects constructively, ensuring that some + * of the dependent functionality is initialized ahead of time + * + * @param persistService {@link PersistService} + * @param memberManager {@link ServerMemberManager} + * @param protocolManager {@link ProtocolManager} + */ + public EmbeddedDumpService(PersistService persistService, + ServerMemberManager memberManager, ProtocolManager protocolManager) { + super(persistService, memberManager); + this.protocolManager = protocolManager; + } + + @PostConstruct + @Override + protected void init() throws Throwable { + if (ApplicationUtils.getStandaloneMode()) { + dumpOperate(processor, dumpAllProcessor, dumpAllBetaProcessor, + dumpAllTagProcessor); + return; + } + + CPProtocol protocol = protocolManager.getCpProtocol(); + AtomicReference errorReference = new AtomicReference<>(null); + CountDownLatch waitDumpFinish = new CountDownLatch(1); + + // watch path => /nacos_config/leader/ has value ? + Observer observer = new Observer() { + + @Override + public void update(Observable o, Object arg) { + GlobalExecutor.executeByCommon(() -> { + // must make sure that there is a value here to perform the correct operation that follows + if (Objects.isNull(arg)) { + return; + } + // Identify without a timeout mechanism + EmbeddedStorageContextUtils + .putExtendInfo(Constants.EXTEND_NEED_READ_UNTIL_HAVE_DATA, + "true"); + // Remove your own listening to avoid task accumulation + boolean canEnd = false; + for (; ; ) { + try { + dumpOperate(processor, dumpAllProcessor, dumpAllBetaProcessor, + dumpAllTagProcessor); + protocol.protocolMetaData() + .unSubscribe(Constants.CONFIG_MODEL_RAFT_GROUP, + MetadataKey.LEADER_META_DATA, this); + canEnd = true; + } + catch (Throwable ex) { + if (!shouldRetry(ex)) { + errorReference.set(ex); + canEnd = true; + } + } + if (canEnd) { + ThreadUtils.countDown(waitDumpFinish); + break; + } + ThreadUtils.sleep(500L); + } + EmbeddedStorageContextUtils.cleanAllContext(); + }); + } + }; + + protocol.protocolMetaData().subscribe(Constants.CONFIG_MODEL_RAFT_GROUP, + MetadataKey.LEADER_META_DATA, observer); + + // We must wait for the dump task to complete the callback operation before + // continuing with the initialization + ThreadUtils.latchAwait(waitDumpFinish); + + // If an exception occurs during the execution of the dump task, the exception + // needs to be thrown, triggering the node to start the failed process + final Throwable ex = errorReference.get(); + if (Objects.nonNull(ex)) { + throw ex; + } + } + + private boolean shouldRetry(Throwable ex) { + final String errMsg = ex.getMessage(); + + for (String failedMsg : errorMessages) { + if (StringUtils.containsIgnoreCase(errMsg, failedMsg)) { + return false; + } + } + for (final String retryMsg : retryMessages) { + if (StringUtils.containsIgnoreCase(errMsg, retryMsg)) { + return true; + } + } + return false; + } + + @Override + protected boolean canExecute() { + try { + // if is derby + raft mode, only leader can execute + CPProtocol protocol = protocolManager.getCpProtocol(); + return protocol.isLeader(Constants.CONFIG_MODEL_RAFT_GROUP); + } + catch (NoSuchRaftGroupException e) { + return true; + } + catch (Throwable e) { + // It's impossible to get to this point + throw new RuntimeException(e); + } + } +} diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/ExternalDumpService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/ExternalDumpService.java new file mode 100644 index 00000000000..888aa928e31 --- /dev/null +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/ExternalDumpService.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.config.server.service.dump; + +import com.alibaba.nacos.config.server.configuration.ConditionOnExternalStorage; +import com.alibaba.nacos.config.server.service.repository.PersistService; +import com.alibaba.nacos.core.cluster.ServerMemberManager; +import org.springframework.context.annotation.Conditional; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * @author liaochuntao + */ +@Conditional(ConditionOnExternalStorage.class) +@Component +public class ExternalDumpService extends DumpService { + + /** + * Here you inject the dependent objects constructively, ensuring that some + * of the dependent functionality is initialized ahead of time + * + * @param persistService {@link PersistService} + * @param memberManager {@link ServerMemberManager} + */ + public ExternalDumpService(PersistService persistService, + ServerMemberManager memberManager) { + super(persistService, memberManager); + } + + @PostConstruct + @Override + protected void init() throws Throwable { + dumpOperate(processor, dumpAllProcessor, dumpAllBetaProcessor, + dumpAllTagProcessor); + } + + @Override + protected boolean canExecute() { + return memberManager.isFirstIp(); + } +} diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java b/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java index 32893b710c3..c37bd1cd1d3 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java @@ -21,7 +21,7 @@ import com.alibaba.nacos.config.server.model.ConfigInfo; import com.alibaba.nacos.config.server.model.ConfigInfoAggr; import com.alibaba.nacos.config.server.model.Page; -import com.alibaba.nacos.config.server.service.ConfigDataChangeEvent; +import com.alibaba.nacos.config.server.model.event.ConfigDataChangeEvent; import com.alibaba.nacos.config.server.service.repository.PersistService; import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; import com.alibaba.nacos.config.server.utils.ContentUtils; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java index e9b4c4e2408..942bdca06cb 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java @@ -17,7 +17,7 @@ import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.monitor.MetricsMonitor; -import com.alibaba.nacos.config.server.service.ConfigDataChangeEvent; +import com.alibaba.nacos.config.server.model.event.ConfigDataChangeEvent; import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.config.server.utils.PropertyUtil; @@ -362,4 +362,4 @@ private static int getDelayTime(NotifySingleTask task) { private static int INCREASE_STEPS = 1000; private static int MAX_COUNT = 6; -} +} \ No newline at end of file diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DatabaseOperate.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DatabaseOperate.java index 5adaa9d3449..14ea9f2f29e 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DatabaseOperate.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DatabaseOperate.java @@ -18,9 +18,13 @@ import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.BiConsumer; import com.alibaba.nacos.config.server.service.sql.ModifyRequest; -import com.alibaba.nacos.config.server.service.sql.SqlContextUtils; +import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; import org.springframework.jdbc.core.RowMapper; /** @@ -95,9 +99,34 @@ public interface DatabaseOperate { * data modify transaction * * @param modifyRequests {@link List< ModifyRequest >} + * @param consumer {@link BiConsumer} * @return is success */ - Boolean update(List modifyRequests); + Boolean update(List modifyRequests, BiConsumer consumer); + + /** + * data modify transaction + * + * @param modifyRequests {@link List< ModifyRequest >} + * @return is success + */ + default Boolean update(List modifyRequests) { + return update(modifyRequests, null); + } + + /** + * data modify transaction + * The SqlContext to be executed in the current thread will be executed and automatically cleared + * + * @return is success + */ + default Boolean blockUpdate() { + try { + return update(EmbeddedStorageContextUtils.getCurrentSqlContext(), null); + } finally { + EmbeddedStorageContextUtils.cleanAllContext(); + } + } /** * data modify transaction @@ -105,11 +134,19 @@ public interface DatabaseOperate { * * @return is success */ - default Boolean smartUpdate() { + default CompletableFuture futureUpdate() { try { - return update(SqlContextUtils.getCurrentSqlContext()); + CompletableFuture future = new CompletableFuture<>(); + update(EmbeddedStorageContextUtils.getCurrentSqlContext(), (o, throwable) -> { + if (Objects.nonNull(throwable)) { + future.completeExceptionally(throwable); + return; + } + future.complete(o); + }); + return future; } finally { - SqlContextUtils.cleanCurrentSqlContext(); + EmbeddedStorageContextUtils.cleanAllContext(); } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DerbyLoadEvent.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DerbyLoadEvent.java new file mode 100644 index 00000000000..2402c0a01e5 --- /dev/null +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DerbyLoadEvent.java @@ -0,0 +1,30 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.config.server.service.repository; + +import com.alibaba.nacos.core.notify.SlowEvent; + +/** + * @author liaochuntao + */ +public class DerbyLoadEvent implements SlowEvent { + + public static final DerbyLoadEvent INSTANCE = new DerbyLoadEvent(); + + private static final long serialVersionUID = 875401667921565121L; + +} diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DerbySnapshotOperation.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DerbySnapshotOperation.java index 6e4e378025e..c57485ac4ee 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DerbySnapshotOperation.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DerbySnapshotOperation.java @@ -16,17 +16,19 @@ package com.alibaba.nacos.config.server.service.repository; -import com.alibaba.nacos.config.server.service.DataSourceService; -import com.alibaba.nacos.config.server.service.DynamicDataSource; -import com.alibaba.nacos.config.server.service.LocalDataSourceServiceImpl; +import com.alibaba.nacos.config.server.service.datasource.DataSourceService; +import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; +import com.alibaba.nacos.config.server.service.datasource.LocalDataSourceServiceImpl; import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.consistency.snapshot.LocalFileMeta; import com.alibaba.nacos.consistency.snapshot.Reader; import com.alibaba.nacos.consistency.snapshot.SnapshotOperation; import com.alibaba.nacos.consistency.snapshot.Writer; import com.alibaba.nacos.core.distributed.raft.utils.RaftExecutor; -import com.alibaba.nacos.common.utils.DiskUtils; +import com.alibaba.nacos.core.utils.DiskUtils; +import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.core.utils.TimerContext; import com.alipay.sofa.jraft.util.CRC64; import java.io.File; @@ -35,6 +37,7 @@ import java.sql.Connection; import java.util.Objects; import java.util.concurrent.Callable; +import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.BiConsumer; import java.util.zip.Checksum; @@ -60,7 +63,11 @@ public DerbySnapshotOperation(ReentrantReadWriteLock.WriteLock writeLock) { @Override public void onSnapshotSave(Writer writer, BiConsumer callFinally) { RaftExecutor.doSnapshot(() -> { - writeLock.lock(); + + TimerContext.start("CONFIG_DERBY_SNAPSHOT_SAVE"); + + final Lock lock = writeLock; + lock.lock(); try { final String writePath = writer.getPath(); final String parentPath = Paths.get(writePath, snapshotDir).toString(); @@ -83,7 +90,8 @@ public void onSnapshotSave(Writer writer, BiConsumer callFin writer.getPath(), writer.listFiles(), t); callFinally.accept(false, t); } finally { - writeLock.unlock(); + lock.unlock(); + TimerContext.end(LogUtil.fatalLog); } }); } @@ -92,7 +100,10 @@ public void onSnapshotSave(Writer writer, BiConsumer callFin public boolean onSnapshotLoad(Reader reader) { final String readerPath = reader.getPath(); final String sourceFile = Paths.get(readerPath, snapshotArchive).toString(); - writeLock.lock(); + + TimerContext.start("CONFIG_DERBY_SNAPSHOT_LOAD"); + final Lock lock = writeLock; + lock.lock(); try { final Checksum checksum = new CRC64(); DiskUtils.decompress(sourceFile, readerPath, checksum); @@ -118,20 +129,22 @@ public boolean onSnapshotLoad(Reader reader) { return null; }); DiskUtils.deleteDirectory(loadPath); + NotifyCenter.publishEvent(DerbyLoadEvent.INSTANCE); return true; } catch (final Throwable t) { LogUtil.fatalLog.error("Fail to load snapshot, path={}, file list={}, {}.", readerPath, reader.listFiles(), t); return false; } finally { - writeLock.unlock(); + lock.unlock(); + TimerContext.end(LogUtil.fatalLog); } } private void doDerbyBackup(String backupDirectory) throws Exception { DataSourceService sourceService = DynamicDataSource.getInstance().getDataSource(); DataSource dataSource = sourceService.getJdbcTemplate().getDataSource(); - try (Connection holder = Objects.requireNonNull(dataSource).getConnection()) { + try (Connection holder = Objects.requireNonNull(dataSource, "dataSource").getConnection()) { CallableStatement cs = holder.prepareCall(backupSql); cs.setString(1, backupDirectory); cs.execute(); diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DistributedDatabaseOperateImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DistributedDatabaseOperateImpl.java index c72f0d3af96..9deae8dd354 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DistributedDatabaseOperateImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/DistributedDatabaseOperateImpl.java @@ -16,19 +16,27 @@ package com.alibaba.nacos.config.server.service.repository; +import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.api.exception.runtime.NacosRuntimeException; import com.alibaba.nacos.common.JustForTest; +import com.alibaba.nacos.common.utils.ExceptionUtil; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.LoggerUtils; import com.alibaba.nacos.common.utils.MD5Utils; +import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.config.server.configuration.ConditionDistributedEmbedStorage; import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.exception.NJdbcException; +import com.alibaba.nacos.config.server.model.event.ConfigDumpEvent; import com.alibaba.nacos.config.server.model.event.RaftDBErrorEvent; -import com.alibaba.nacos.config.server.service.DynamicDataSource; -import com.alibaba.nacos.config.server.service.LocalDataSourceServiceImpl; -import com.alibaba.nacos.config.server.service.RowMapperManager; +import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; +import com.alibaba.nacos.config.server.service.datasource.LocalDataSourceServiceImpl; +import com.alibaba.nacos.config.server.service.dump.DumpConfigHandler; +import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; import com.alibaba.nacos.config.server.service.sql.ModifyRequest; import com.alibaba.nacos.config.server.service.sql.QueryType; import com.alibaba.nacos.config.server.service.sql.SelectRequest; +import com.alibaba.nacos.config.server.utils.ConfigExecutor; import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.consistency.SerializeFactory; import com.alibaba.nacos.consistency.Serializer; @@ -45,6 +53,7 @@ import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.notify.listener.Subscribe; import com.alibaba.nacos.core.utils.ClassUtils; +import com.alibaba.nacos.core.utils.GenericType; import com.google.common.base.Preconditions; import com.google.protobuf.ByteString; import org.springframework.context.annotation.Conditional; @@ -60,7 +69,11 @@ import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.function.BiConsumer; /** *
@@ -136,16 +149,13 @@ public DistributedDatabaseOperateImpl(ServerMemberManager memberManager,
 			ProtocolManager protocolManager) throws Exception {
 		this.memberManager = memberManager;
 		this.protocol = protocolManager.getCpProtocol();
-
 		init();
-
-		this.protocol.addLogProcessors(Collections.singletonList(this));
 	}
 
 	protected void init() throws Exception {
 
-		this.dataSourceService = (LocalDataSourceServiceImpl) DynamicDataSource.getInstance()
-				.getDataSource();
+		this.dataSourceService = (LocalDataSourceServiceImpl) DynamicDataSource
+				.getInstance().getDataSource();
 
 		// Because in Raft + Derby mode, ensuring data consistency depends on the Raft's
 		// log playback and snapshot recovery capabilities, and the last data must be cleared
@@ -156,6 +166,8 @@ protected void init() throws Exception {
 
 		// Registers a Derby Raft state machine failure event for node degradation processing
 		NotifyCenter.registerToSharePublisher(RaftDBErrorEvent.class);
+		// Register the snapshot load event
+		NotifyCenter.registerToSharePublisher(DerbyLoadEvent.class);
 
 		NotifyCenter.registerSubscribe(new Subscribe() {
 			@Override
@@ -169,6 +181,11 @@ public Class subscribeType() {
 			}
 		});
 
+		NotifyCenter.registerToPublisher(ConfigDumpEvent.class,
+				NotifyCenter.RING_BUFFER_SIZE);
+		NotifyCenter.registerSubscribe(new DumpConfigHandler());
+
+		this.protocol.addLogProcessors(Collections.singletonList(this));
 		LogUtil.defaultLog.info("use DistributedTransactionServicesImpl");
 	}
 
@@ -180,15 +197,19 @@ public void mockConsistencyProtocol(CPProtocol protocol) {
 	@Override
 	public  R queryOne(String sql, Class cls) {
 		try {
-			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "queryOne info : sql : {}", sql);
+			LoggerUtils
+					.printIfDebugEnabled(LogUtil.defaultLog, "queryOne info : sql : {}",
+							sql);
 
 			byte[] data = serializer.serialize(SelectRequest.builder()
 					.queryType(QueryType.QUERY_ONE_NO_MAPPER_NO_ARGS).sql(sql)
 					.className(cls.getCanonicalName()).build());
 
-			Response response = protocol.getData(
-					GetRequest.newBuilder().setGroup(group())
-							.setData(ByteString.copyFrom(data)).build());
+			final boolean blockRead = EmbeddedStorageContextUtils.containsExtendInfo(Constants.EXTEND_NEED_READ_UNTIL_HAVE_DATA);
+
+			Response response = innerRead(GetRequest.newBuilder().setGroup(group())
+					.setData(ByteString.copyFrom(data))
+					.build(), blockRead);
 			if (response.getSuccess()) {
 				return serializer.deserialize(response.getData().toByteArray(), cls);
 			}
@@ -196,23 +217,27 @@ public  R queryOne(String sql, Class cls) {
 		}
 		catch (Exception e) {
 			LogUtil.fatalLog
-					.error("An exception occurred during the query operation : {}", e.toString());
-			throw new NJdbcException(e);
+					.error("An exception occurred during the query operation : {}",
+							e.toString());
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
 		}
 	}
 
 	@Override
 	public  R queryOne(String sql, Object[] args, Class cls) {
 		try {
-			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "queryOne info : sql : {}, args : {}", sql, args);
+			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog,
+					"queryOne info : sql : {}, args : {}", sql, args);
 
 			byte[] data = serializer.serialize(SelectRequest.builder()
 					.queryType(QueryType.QUERY_ONE_NO_MAPPER_WITH_ARGS).sql(sql)
 					.args(args).className(cls.getCanonicalName()).build());
 
-			Response response = protocol.getData(
-					GetRequest.newBuilder().setGroup(group())
-							.setData(ByteString.copyFrom(data)).build());
+			final boolean blockRead = EmbeddedStorageContextUtils.containsExtendInfo(Constants.EXTEND_NEED_READ_UNTIL_HAVE_DATA);
+
+			Response response = innerRead(GetRequest.newBuilder().setGroup(group())
+					.setData(ByteString.copyFrom(data))
+					.build(), blockRead);
 			if (response.getSuccess()) {
 				return serializer.deserialize(response.getData().toByteArray(), cls);
 			}
@@ -220,23 +245,27 @@ public  R queryOne(String sql, Object[] args, Class cls) {
 		}
 		catch (Exception e) {
 			LogUtil.fatalLog
-					.error("An exception occurred during the query operation : {}", e.toString());
-			throw new NJdbcException(e);
+					.error("An exception occurred during the query operation : {}",
+							e.toString());
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
 		}
 	}
 
 	@Override
 	public  R queryOne(String sql, Object[] args, RowMapper mapper) {
 		try {
-			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "queryOne info : sql : {}, args : {}", sql, args);
+			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog,
+					"queryOne info : sql : {}, args : {}", sql, args);
 
 			byte[] data = serializer.serialize(SelectRequest.builder()
 					.queryType(QueryType.QUERY_ONE_WITH_MAPPER_WITH_ARGS).sql(sql)
 					.args(args).className(mapper.getClass().getCanonicalName()).build());
 
-			Response response = protocol.getData(
-					GetRequest.newBuilder().setGroup(group())
-							.setData(ByteString.copyFrom(data)).build());
+			final boolean blockRead = EmbeddedStorageContextUtils.containsExtendInfo(Constants.EXTEND_NEED_READ_UNTIL_HAVE_DATA);
+
+			Response response = innerRead(GetRequest.newBuilder().setGroup(group())
+					.setData(ByteString.copyFrom(data))
+					.build(), blockRead);
 			if (response.getSuccess()) {
 				return serializer.deserialize(response.getData().toByteArray(),
 						ClassUtils.resolveGenericTypeByInterface(mapper.getClass()));
@@ -245,23 +274,27 @@ public  R queryOne(String sql, Object[] args, RowMapper mapper) {
 		}
 		catch (Exception e) {
 			LogUtil.fatalLog
-					.error("An exception occurred during the query operation : {}", e.toString());
-			throw new NJdbcException(e);
+					.error("An exception occurred during the query operation : {}",
+							e.toString());
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
 		}
 	}
 
 	@Override
 	public  List queryMany(String sql, Object[] args, RowMapper mapper) {
 		try {
-			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "queryMany info : sql : {}, args : {}", sql, args);
+			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog,
+					"queryMany info : sql : {}, args : {}", sql, args);
 
 			byte[] data = serializer.serialize(SelectRequest.builder()
 					.queryType(QueryType.QUERY_MANY_WITH_MAPPER_WITH_ARGS).sql(sql)
 					.args(args).className(mapper.getClass().getCanonicalName()).build());
 
-			Response response = protocol.getData(
-					GetRequest.newBuilder().setGroup(group())
-							.setData(ByteString.copyFrom(data)).build());
+			final boolean blockRead = EmbeddedStorageContextUtils.containsExtendInfo(Constants.EXTEND_NEED_READ_UNTIL_HAVE_DATA);
+
+			Response response = innerRead(GetRequest.newBuilder().setGroup(group())
+					.setData(ByteString.copyFrom(data))
+					.build(), blockRead);
 			if (response.getSuccess()) {
 				return serializer
 						.deserialize(response.getData().toByteArray(), List.class);
@@ -270,22 +303,27 @@ public  List queryMany(String sql, Object[] args, RowMapper mapper) {
 		}
 		catch (Exception e) {
 			LogUtil.fatalLog
-					.error("An exception occurred during the query operation : {}", e.toString());
-			throw new NJdbcException(e);
+					.error("An exception occurred during the query operation : {}",
+							e.toString());
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
 		}
 	}
 
 	@Override
 	public  List queryMany(String sql, Object[] args, Class rClass) {
 		try {
-			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "queryMany info : sql : {}, args : {}", sql, args);
+			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog,
+					"queryMany info : sql : {}, args : {}", sql, args);
 
 			byte[] data = serializer.serialize(SelectRequest.builder()
 					.queryType(QueryType.QUERY_MANY_NO_MAPPER_WITH_ARGS).sql(sql)
 					.args(args).className(rClass.getCanonicalName()).build());
-			Response response = protocol.getData(
-					GetRequest.newBuilder().setGroup(group())
-							.setData(ByteString.copyFrom(data)).build());
+
+			final boolean blockRead = EmbeddedStorageContextUtils.containsExtendInfo(Constants.EXTEND_NEED_READ_UNTIL_HAVE_DATA);
+
+			Response response = innerRead(GetRequest.newBuilder().setGroup(group())
+					.setData(ByteString.copyFrom(data))
+					.build(), blockRead);
 			if (response.getSuccess()) {
 				return serializer
 						.deserialize(response.getData().toByteArray(), List.class);
@@ -294,23 +332,27 @@ public  List queryMany(String sql, Object[] args, Class rClass) {
 		}
 		catch (Exception e) {
 			LogUtil.fatalLog
-					.error("An exception occurred during the query operation : {}", e.toString());
-			throw new NJdbcException(e);
+					.error("An exception occurred during the query operation : {}",
+							e.toString());
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
 		}
 	}
 
 	@Override
 	public List> queryMany(String sql, Object[] args) {
 		try {
-			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "queryMany info : sql : {}, args : {}", sql, args);
+			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog,
+					"queryMany info : sql : {}, args : {}", sql, args);
 
 			byte[] data = serializer.serialize(SelectRequest.builder()
 					.queryType(QueryType.QUERY_MANY_WITH_LIST_WITH_ARGS).sql(sql)
 					.args(args).build());
 
-			Response response = protocol.getData(
-					GetRequest.newBuilder().setGroup(group())
-							.setData(ByteString.copyFrom(data)).build());
+			final boolean blockRead = EmbeddedStorageContextUtils.containsExtendInfo(Constants.EXTEND_NEED_READ_UNTIL_HAVE_DATA);
+
+			Response response = innerRead(GetRequest.newBuilder().setGroup(group())
+					.setData(ByteString.copyFrom(data))
+					.build(), blockRead);
 			if (response.getSuccess()) {
 				return serializer
 						.deserialize(response.getData().toByteArray(), List.class);
@@ -319,42 +361,84 @@ public List> queryMany(String sql, Object[] args) {
 		}
 		catch (Exception e) {
 			LogUtil.fatalLog
-					.error("An exception occurred during the query operation : {}", e.toString());
-			throw new NJdbcException(e);
+					.error("An exception occurred during the query operation : {}",
+							e.toString());
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
+		}
+	}
+
+	/**
+	 * In some business situations, you need to avoid the timeout issue, so blockRead is used to determine this
+	 *
+	 * @param request {@link GetRequest}
+	 * @param blockRead
+	 * @return {@link Response}
+	 * @throws Exception
+	 */
+	private Response innerRead(GetRequest request, boolean blockRead) throws Exception {
+		if (blockRead) {
+			return (Response) protocol.aGetData(request).join();
 		}
+		Response response = protocol.getData(request);
+		return response;
 	}
 
 	@Override
-	public Boolean update(List sqlContext) {
+	public Boolean update(List sqlContext,
+			BiConsumer consumer) {
 		try {
 
 			// Since the SQL parameter is Object[], in order to ensure that the types of
 			// array elements are not lost, the serialization here is done using the java-specific
 			// serialization framework, rather than continuing with the protobuff
 
-			LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "modifyRequests info : {}", sqlContext);
+			LoggerUtils
+					.printIfDebugEnabled(LogUtil.defaultLog, "modifyRequests info : {}",
+							sqlContext);
 
 			// {timestamp}-{group}-{ip:port}-{signature}
 
 			final String key =
-					System.currentTimeMillis() + "-" + group() + "-" + memberManager.getSelf().getAddress() + "-"
-							+ MD5Utils.md5Hex(sqlContext.toString(), Constants.ENCODE);
+					System.currentTimeMillis() + "-" + group() + "-" + memberManager
+							.getSelf().getAddress() + "-" + MD5Utils
+							.md5Hex(sqlContext.toString(), Constants.ENCODE);
 			Log log = Log.newBuilder().setGroup(group()).setKey(key)
 					.setData(ByteString.copyFrom(serializer.serialize(sqlContext)))
+					.putAllExtendInfo(EmbeddedStorageContextUtils.getCurrentExtendInfo())
 					.setType(sqlContext.getClass().getCanonicalName()).build();
-			Response response = this.protocol.submit(log);
-			if (response.getSuccess()) {
-				return true;
+			if (Objects.isNull(consumer)) {
+				Response response = this.protocol.submit(log);
+				if (response.getSuccess()) {
+					return true;
+				}
+				LogUtil.defaultLog.error("execute sql modify operation failed : {}",
+						response.getErrMsg());
+				return false;
 			}
-			throw new ConsistencyException(response.getErrMsg());
+			else {
+				this.protocol.submitAsync(log)
+						.whenComplete(
+								(BiConsumer) (response, ex) -> {
+									String errMsg = Objects.isNull(ex) ?
+											response.getErrMsg() :
+											ExceptionUtil.getCause(ex).getMessage();
+									consumer.accept(response.getSuccess(),
+											StringUtils.isBlank(errMsg) ?
+													null :
+													new NJdbcException(errMsg));
+								});
+			}
+			return true;
+		}
+		catch (TimeoutException e) {
+			LogUtil.fatalLog
+					.error("An timeout exception occurred during the update operation");
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
 		}
 		catch (Throwable e) {
-			if (e instanceof ConsistencyException) {
-				throw (ConsistencyException) e;
-			}
 			LogUtil.fatalLog
 					.error("An exception occurred during the update operation : {}", e);
-			throw new NJdbcException(e.toString());
+			throw new NacosRuntimeException(NacosException.SERVER_ERROR, e.toString());
 		}
 	}
 
@@ -369,7 +453,8 @@ public Response onRequest(final GetRequest request) {
 		final SelectRequest selectRequest = serializer
 				.deserialize(request.getData().toByteArray(), SelectRequest.class);
 
-		LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "getData info : selectRequest : {}", selectRequest);
+		LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog,
+				"getData info : selectRequest : {}", selectRequest);
 
 		final RowMapper mapper = RowMapperManager
 				.getRowMapper(selectRequest.getClassName());
@@ -413,9 +498,8 @@ public Response onRequest(final GetRequest request) {
 			LogUtil.fatalLog
 					.error("There was an error querying the data, request : {}, error : {}",
 							selectRequest, e.toString());
-			return Response.newBuilder()
-					.setSuccess(false)
-					.setErrMsg(e.getClass().getSimpleName() + ":" + e.getMessage())
+			return Response.newBuilder().setSuccess(false)
+					.setErrMsg(ClassUtils.getSimplaName(e) + ":" + ExceptionUtil.getCause(e).getMessage())
 					.build();
 		}
 		finally {
@@ -425,37 +509,41 @@ public Response onRequest(final GetRequest request) {
 
 	@Override
 	public Response onApply(Log log) {
-		LoggerUtils.printIfDebugEnabled(LogUtil.defaultLog, "onApply info : log : {}", log);
-
+		LoggerUtils
+				.printIfDebugEnabled(LogUtil.defaultLog, "onApply info : log : {}", log);
 		final ByteString byteString = log.getData();
 		Preconditions.checkArgument(byteString != null, "Log.getData() must not null");
 		List sqlContext = serializer
 				.deserialize(byteString.toByteArray(), List.class);
-		readLock.lock();
+		final Lock lock = readLock;
+		lock.lock();
 		try {
-			Collections.sort(sqlContext, new Comparator() {
-				@Override
-				public int compare(ModifyRequest pre, ModifyRequest next) {
-					return pre.getExecuteNo() - next.getExecuteNo();
-				}
-			});
+			sqlContext.sort(Comparator.comparingInt(ModifyRequest::getExecuteNo));
 			boolean isOk = onUpdate(sqlContext);
+
+			// If there is additional information, post processing
+			// Put into the asynchronous thread pool for processing to avoid blocking the
+			// normal execution of the state machine
+			ConfigExecutor
+					.executeEmbeddedDump(() -> handleExtendInfo(log.getExtendInfoMap()));
+
 			return Response.newBuilder().setSuccess(isOk).build();
 
 			// We do not believe that an error caused by a problem with an SQL error
 			// should trigger the stop operation of the raft state machine
 		}
 		catch (BadSqlGrammarException | DataIntegrityViolationException e) {
-			return Response.newBuilder().setSuccess(false).setErrMsg(e.toString()).build();
+			return Response.newBuilder().setSuccess(false).setErrMsg(e.toString())
+					.build();
 		}
 		catch (DataAccessException e) {
-			throw new ConsistencyException(e);
+			throw new ConsistencyException(e.toString());
 		}
 		catch (Throwable t) {
 			throw t;
 		}
 		finally {
-			readLock.unlock();
+			lock.unlock();
 		}
 	}
 
@@ -474,27 +562,48 @@ public Boolean onUpdate(List sqlContext) {
 		return update(transactionTemplate, jdbcTemplate, sqlContext);
 	}
 
-    public  R onQueryOne(String sql, Class rClass) {
+	public  R onQueryOne(String sql, Class rClass) {
 		return queryOne(jdbcTemplate, sql, rClass);
 	}
 
-    public  R onQueryOne(String sql, Object[] args, Class rClass) {
+	public  R onQueryOne(String sql, Object[] args, Class rClass) {
 		return queryOne(jdbcTemplate, sql, args, rClass);
 	}
 
-    public  R onQueryOne(String sql, Object[] args, RowMapper mapper) {
+	public  R onQueryOne(String sql, Object[] args, RowMapper mapper) {
 		return queryOne(jdbcTemplate, sql, args, mapper);
 	}
 
-    public  List onQueryMany(String sql, Object[] args, RowMapper mapper) {
+	public  List onQueryMany(String sql, Object[] args, RowMapper mapper) {
 		return queryMany(jdbcTemplate, sql, args, mapper);
 	}
 
-    public  List onQueryMany(String sql, Object[] args, Class rClass) {
+	public  List onQueryMany(String sql, Object[] args, Class rClass) {
 		return queryMany(jdbcTemplate, sql, args, rClass);
 	}
 
-    public List> onQueryMany(String sql, Object[] args) {
+	public List> onQueryMany(String sql, Object[] args) {
 		return queryMany(jdbcTemplate, sql, args);
 	}
+
+	private void handleExtendInfo(Map extendInfo) {
+		if (extendInfo.containsKey(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT)) {
+			String jsonVal = extendInfo.get(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT);
+			if (StringUtils.isNotBlank(jsonVal)) {
+				NotifyCenter
+						.publishEvent(JacksonUtils.toObj(jsonVal, ConfigDumpEvent.class));
+			}
+			return;
+		}
+		if (extendInfo.containsKey(Constants.EXTEND_INFOS_CONFIG_DUMP_EVENT)) {
+			String jsonVal = extendInfo.get(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT);
+			if (StringUtils.isNotBlank(jsonVal)) {
+				List list = JacksonUtils
+						.toObj(jsonVal, new GenericType>() {
+						}.getType());
+				list.stream().filter(Objects::nonNull)
+						.forEach(NotifyCenter::publishEvent);
+			}
+		}
+	}
 }
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedPaginationHelperImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedPaginationHelperImpl.java
index 44da90e99c6..a430f978c02 100644
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedPaginationHelperImpl.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedPaginationHelperImpl.java
@@ -16,7 +16,7 @@
 package com.alibaba.nacos.config.server.service.repository;
 
 import com.alibaba.nacos.config.server.model.Page;
-import com.alibaba.nacos.config.server.service.sql.SqlContextUtils;
+import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils;
 import java.util.List;
 
 import org.springframework.jdbc.core.RowMapper;
@@ -188,11 +188,11 @@ public Page fetchPageLimit(final String sqlFetchRows,
     public void updateLimit(final String sql, final Object[] args) {
         String sqlUpdate = sql.replaceAll("limit \\?", "OFFSET 0 ROWS FETCH NEXT ? ROWS ONLY");
 
-        SqlContextUtils.addSqlContext(sqlUpdate, args);
+        EmbeddedStorageContextUtils.addSqlContext(sqlUpdate, args);
         try {
-            databaseOperate.update(SqlContextUtils.getCurrentSqlContext());
+            databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
         } finally {
-            SqlContextUtils.cleanCurrentSqlContext();
+            EmbeddedStorageContextUtils.cleanAllContext();
         }
     }
 
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedStoragePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedStoragePersistServiceImpl.java
index 0c63afe4466..3285285fd2a 100755
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedStoragePersistServiceImpl.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/EmbeddedStoragePersistServiceImpl.java
@@ -38,13 +38,11 @@
 import com.alibaba.nacos.config.server.model.SameConfigPolicy;
 import com.alibaba.nacos.config.server.model.SubInfo;
 import com.alibaba.nacos.config.server.model.TenantInfo;
-import com.alibaba.nacos.config.server.service.ConfigDataChangeEvent;
-import com.alibaba.nacos.config.server.service.DataSourceService;
-import com.alibaba.nacos.config.server.service.DynamicDataSource;
-import com.alibaba.nacos.config.server.service.sql.SqlContextUtils;
+import com.alibaba.nacos.config.server.service.datasource.DataSourceService;
+import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource;
+import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils;
 import com.alibaba.nacos.config.server.utils.LogUtil;
 import com.alibaba.nacos.config.server.utils.ParamUtils;
-import com.alibaba.nacos.config.server.utils.event.EventDispatcher;
 import com.alibaba.nacos.core.distributed.id.IdGeneratorManager;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;
@@ -69,21 +67,21 @@
 import java.util.Objects;
 import java.util.Optional;
 
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_ADVANCE_INFO_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_ALL_INFO_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO4BETA_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO4TAG_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_AGGR_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_BASE_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_BETA_WRAPPER_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_CHANGED_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_TAG_WRAPPER_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_WRAPPER_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_KEY_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.HISTORY_DETAIL_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.HISTORY_LIST_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.TENANT_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_ADVANCE_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_ALL_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO4BETA_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO4TAG_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_AGGR_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_BASE_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_BETA_WRAPPER_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_CHANGED_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_TAG_WRAPPER_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_WRAPPER_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_KEY_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.HISTORY_DETAIL_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.HISTORY_LIST_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.TENANT_INFO_ROW_MAPPER;
 import static com.alibaba.nacos.config.server.utils.LogUtil.defaultLog;
 
 /**
@@ -96,26 +94,26 @@
 @Component
 public class EmbeddedStoragePersistServiceImpl implements PersistService {
 
-	private final String configInfoId = "config-info-id";
-	private final String configHistoryId = "config-history-id";
-	private final String configTagRelationId = "config-tag-relation-id";
-	private final String appConfigDataRelationSubs = "app-configdata-relation-subs";
-	private final String configBetaId = "config-beta-id";
-	private final String namespaceId = "namespace-id";
-	private final String userId = "user-id";
-	private final String roleId = "role-id";
-	private final String permissionsId = "permissions_id";
+	private static final String RESOURCE_CONFIG_INFO_ID = "config-info-id";
+	private static final String RESOURCE_CONFIG_HISTORY_ID = "config-history-id";
+	private static final String RESOURCE_CONFIG_TAG_RELATION_ID = "config-tag-relation-id";
+	private static final String RESOURCE_APP_CONFIGDATA_RELATION_SUBS = "app-configdata-relation-subs";
+	private static final String RESOURCE_CONFIG_BETA_ID = "config-beta-id";
+	private static final String RESOURCE_NAMESPACE_ID = "namespace-id";
+	private static final String RESOURCE_USER_ID = "user-id";
+	private static final String RESOURCE_ROLE_ID = "role-id";
+	private static final String RESOURCE_PERMISSIONS_ID = "permissions_id";
 
-    private DataSourceService dataSourceService;
+	private DataSourceService dataSourceService;
 
-    private final DatabaseOperate databaseOperate;
+	private final DatabaseOperate databaseOperate;
 
 	private final IdGeneratorManager idGeneratorManager;
 
 	/**
 	 * The constructor sets the dependency injection order
 	 *
-	 * @param databaseOperate {@link EmbeddedStoragePersistServiceImpl}
+	 * @param databaseOperate    {@link EmbeddedStoragePersistServiceImpl}
 	 * @param idGeneratorManager {@link IdGeneratorManager}
 	 */
 	public EmbeddedStoragePersistServiceImpl(DatabaseOperate databaseOperate,
@@ -127,8 +125,10 @@ public EmbeddedStoragePersistServiceImpl(DatabaseOperate databaseOperate,
 	@PostConstruct
 	public void init() {
 		dataSourceService = DynamicDataSource.getInstance().getDataSource();
-		idGeneratorManager.register(configInfoId, configHistoryId, configTagRelationId, appConfigDataRelationSubs,
-				configBetaId, namespaceId, userId, roleId, permissionsId);
+		idGeneratorManager.register(RESOURCE_CONFIG_INFO_ID, RESOURCE_CONFIG_HISTORY_ID,
+				RESOURCE_CONFIG_TAG_RELATION_ID, RESOURCE_APP_CONFIGDATA_RELATION_SUBS,
+				RESOURCE_CONFIG_BETA_ID, RESOURCE_NAMESPACE_ID, RESOURCE_USER_ID,
+				RESOURCE_ROLE_ID, RESOURCE_PERMISSIONS_ID);
 	}
 
 	public boolean checkMasterWritable() {
@@ -169,13 +169,18 @@ public  PaginationHelper createPaginationHelper() {
 		return new EmbeddedPaginationHelperImpl(databaseOperate);
 	}
 
-	public void addConfigInfo(final String srcIp, final String srcUser,
-			final ConfigInfo configInfo, final Timestamp time,
+	public void addConfigInfo(final String srcIp,
+			final String srcUser, final ConfigInfo configInfo, final Timestamp time,
 			final Map configAdvanceInfo, final boolean notify) {
 
 		try {
-			long configId = idGeneratorManager.nextId(configInfoId);
-			long hisId = idGeneratorManager.nextId(configHistoryId);
+			final String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+					StringUtils.EMPTY :
+					configInfo.getTenant();
+			configInfo.setTenant(tenantTmp);
+
+			long configId = idGeneratorManager.nextId(RESOURCE_CONFIG_INFO_ID);
+			long hisId = idGeneratorManager.nextId(RESOURCE_CONFIG_HISTORY_ID);
 
 			addConfigInfoAtomic(configId, srcIp, srcUser, configInfo, time,
 					configAdvanceInfo);
@@ -185,34 +190,26 @@ public void addConfigInfo(final String srcIp, final String srcUser,
 
 			addConfigTagsRelation(configId, configTags, configInfo.getDataId(),
 					configInfo.getGroup(), configInfo.getTenant());
-			insertConfigHistoryAtomic(hisId, configInfo, srcIp, srcUser, time,
-					"I");
-
-			boolean result = databaseOperate.smartUpdate();
-			if (!result) {
-				throw new NacosConfigException("Config add failed");
-			}
-
-			if (notify) {
-				EventDispatcher.fireEvent(
-						new ConfigDataChangeEvent(false, configInfo.getDataId(),
-								configInfo.getGroup(), configInfo.getTenant(),
-								time.getTime()));
-			}
+			insertConfigHistoryAtomic(hisId, configInfo, srcIp, srcUser, time, "I");
+			EmbeddedStorageContextUtils.onModifyConfigInfo(configInfo, srcIp, time);
+			databaseOperate.blockUpdate();
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
-	public void addConfigInfo4Beta(ConfigInfo configInfo, String betaIps, String srcIp,
-			String srcUser, Timestamp time, boolean notify) {
+	public void addConfigInfo4Beta(ConfigInfo configInfo,
+			String betaIps, String srcIp, String srcUser, Timestamp time,
+			boolean notify) {
 		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
 				StringUtils.EMPTY :
 				configInfo.getAppName();
 		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
 				StringUtils.EMPTY :
 				configInfo.getTenant();
+
+		configInfo.setTenant(tenantTmp);
 		try {
 			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 
@@ -223,25 +220,19 @@ public void addConfigInfo4Beta(ConfigInfo configInfo, String betaIps, String src
 					configInfo.getGroup(), tenantTmp, appNameTmp, configInfo.getContent(),
 					md5, betaIps, srcIp, srcUser, time, time };
 
-			SqlContextUtils.addSqlContext(sql, args);
+			EmbeddedStorageContextUtils
+					.onModifyConfigBetaInfo(configInfo, betaIps, srcIp, time);
+			EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
-			boolean result = databaseOperate.smartUpdate();
-			if (!result) {
-				throw new NacosConfigException("[Beta] Config add failed");
-			}
-			if (notify) {
-				EventDispatcher.fireEvent(
-						new ConfigDataChangeEvent(true, configInfo.getDataId(),
-								configInfo.getGroup(), tenantTmp, time.getTime()));
-			}
+			databaseOperate.blockUpdate();
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
-	public void addConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp,
-			String srcUser, Timestamp time, boolean notify) {
+	public void addConfigInfo4Tag(ConfigInfo configInfo, String tag,
+			String srcIp, String srcUser, Timestamp time, boolean notify) {
 		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
 				StringUtils.EMPTY :
 				configInfo.getAppName();
@@ -249,6 +240,9 @@ public void addConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp,
 				StringUtils.EMPTY :
 				configInfo.getTenant();
 		String tagTmp = StringUtils.isBlank(tag) ? StringUtils.EMPTY : tag.trim();
+
+		configInfo.setTenant(tenantTmp);
+
 		try {
 			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 
@@ -259,30 +253,30 @@ public void addConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp,
 					configInfo.getGroup(), tenantTmp, tagTmp, appNameTmp,
 					configInfo.getContent(), md5, srcIp, srcUser, time, time };
 
-			SqlContextUtils.addSqlContext(sql, args);
+			EmbeddedStorageContextUtils
+					.onModifyConfigTagInfo(configInfo, tagTmp, srcIp, time);
+			EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
-			boolean result = databaseOperate.smartUpdate();
-			if (!result) {
-				throw new NacosConfigException("[Tag] Config add failed");
-			}
-			if (notify) {
-				EventDispatcher.fireEvent(
-						new ConfigDataChangeEvent(false, configInfo.getDataId(),
-								configInfo.getGroup(), tenantTmp, tagTmp,
-								time.getTime()));
-			}
+			databaseOperate.blockUpdate();
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
-	public void updateConfigInfo(final ConfigInfo configInfo, final String srcIp,
-			final String srcUser, final Timestamp time,
+	public void updateConfigInfo(final ConfigInfo configInfo,
+			final String srcIp, final String srcUser, final Timestamp time,
 			final Map configAdvanceInfo, final boolean notify) {
 		try {
 			ConfigInfo oldConfigInfo = findConfigInfo(configInfo.getDataId(),
 					configInfo.getGroup(), configInfo.getTenant());
+
+			final String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+					StringUtils.EMPTY :
+					configInfo.getTenant();
+
+			oldConfigInfo.setTenant(tenantTmp);
+
 			String appNameTmp = oldConfigInfo.getAppName();
 			// If the appName passed by the user is not empty, the appName of the user is persisted;
 			// otherwise, the appName of db is used. Empty string is required to clear appName
@@ -306,32 +300,26 @@ public void updateConfigInfo(final ConfigInfo configInfo, final String srcIp,
 			insertConfigHistoryAtomic(oldConfigInfo.getId(), oldConfigInfo, srcIp,
 					srcUser, time, "U");
 
-			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
-			if (!result) {
-				throw new NacosConfigException("config modification failed");
-			}
-
-			if (notify) {
-				EventDispatcher.fireEvent(
-						new ConfigDataChangeEvent(false, configInfo.getDataId(),
-								configInfo.getGroup(), configInfo.getTenant(),
-								time.getTime()));
-			}
+			EmbeddedStorageContextUtils.onModifyConfigInfo(configInfo, srcIp, time);
+			databaseOperate.blockUpdate();
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
-	public void updateConfigInfo4Beta(ConfigInfo configInfo, String srcIp, String srcUser,
-			Timestamp time, boolean notify) {
+	@Override
+	public void updateConfigInfo4Beta(ConfigInfo configInfo,
+			String betaIps, String srcIp, String srcUser, Timestamp time,
+			boolean notify) {
 		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
 				StringUtils.EMPTY :
 				configInfo.getAppName();
 		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
 				StringUtils.EMPTY :
 				configInfo.getTenant();
+
+		configInfo.setTenant(tenantTmp);
 		try {
 			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 
@@ -342,26 +330,19 @@ public void updateConfigInfo4Beta(ConfigInfo configInfo, String srcIp, String sr
 					srcUser, time, appNameTmp, configInfo.getDataId(),
 					configInfo.getGroup(), tenantTmp };
 
-			SqlContextUtils.addSqlContext(sql, args);
+			EmbeddedStorageContextUtils
+					.onModifyConfigBetaInfo(configInfo, betaIps, srcIp, time);
+			EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
-			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
-			if (!result) {
-				throw new NacosConfigException("[Beta] config modification failed");
-			}
-			if (notify) {
-				EventDispatcher.fireEvent(
-						new ConfigDataChangeEvent(true, configInfo.getDataId(),
-								configInfo.getGroup(), tenantTmp, time.getTime()));
-			}
+			databaseOperate.blockUpdate();
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
-	public void updateConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp,
-			String srcUser, Timestamp time, boolean notify) {
+	public void updateConfigInfo4Tag(ConfigInfo configInfo,
+			String tag, String srcIp, String srcUser, Timestamp time, boolean notify) {
 		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
 				StringUtils.EMPTY :
 				configInfo.getAppName();
@@ -369,6 +350,9 @@ public void updateConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp
 				StringUtils.EMPTY :
 				configInfo.getTenant();
 		String tagTmp = StringUtils.isBlank(tag) ? StringUtils.EMPTY : tag.trim();
+
+		configInfo.setTenant(tenantTmp);
+
 		try {
 			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 
@@ -379,23 +363,14 @@ public void updateConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp
 					srcUser, time, appNameTmp, configInfo.getDataId(),
 					configInfo.getGroup(), tenantTmp, tagTmp };
 
-			SqlContextUtils.addSqlContext(sql, args);
+			EmbeddedStorageContextUtils
+					.onModifyConfigTagInfo(configInfo, tagTmp, srcIp, time);
+			EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
-			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
-			if (!result) {
-				throw new NacosConfigException("[Tag] config modification failed");
-			}
-
-			if (notify) {
-				EventDispatcher.fireEvent(
-						new ConfigDataChangeEvent(true, configInfo.getDataId(),
-								configInfo.getGroup(), tenantTmp, tagTmp,
-								time.getTime()));
-			}
+			databaseOperate.blockUpdate();
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -407,7 +382,7 @@ public void insertOrUpdateBeta(final ConfigInfo configInfo, final String betaIps
 			addConfigInfo4Beta(configInfo, betaIps, srcIp, null, time, notify);
 		}
 		else {
-			updateConfigInfo4Beta(configInfo, srcIp, null, time, notify);
+			updateConfigInfo4Beta(configInfo, betaIps, srcIp, null, time, notify);
 		}
 	}
 
@@ -432,16 +407,16 @@ public void updateMd5(String dataId, String group, String tenant, String md5,
 			final Object[] args = new Object[] { md5, dataId, group, tenantTmp,
 					lastTime };
 
-			SqlContextUtils.addSqlContext(sql, args);
+			EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException("Failed to config the MD5 modification");
 			}
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -465,7 +440,8 @@ public void insertOrUpdateSub(SubInfo subInfo) {
 		if (isAlreadyExist(subInfo)) {
 			updateConfigSubAtomic(subInfo.getDataId(), subInfo.getGroup(),
 					subInfo.getAppName(), subInfo.getDate());
-		} else {
+		}
+		else {
 			addConfigSubAtomic(subInfo.getDataId(), subInfo.getGroup(),
 					subInfo.getAppName(), subInfo.getDate());
 		}
@@ -473,9 +449,9 @@ public void insertOrUpdateSub(SubInfo subInfo) {
 
 	private boolean isAlreadyExist(SubInfo subInfo) {
 		final String sql = "SELECT * from app_configdata_relation_subs WHERE dara_id=? and group_id=? and app_name=?";
-		Map obj = databaseOperate.queryOne(sql, new Object[] {
-				subInfo.getDataId(), subInfo.getGroup(), subInfo.getAppName()
-		}, Map.class);
+		Map obj = databaseOperate.queryOne(sql,
+				new Object[] { subInfo.getDataId(), subInfo.getGroup(),
+						subInfo.getAppName() }, Map.class);
 		return obj != null;
 	}
 
@@ -485,19 +461,26 @@ public void removeConfigInfo(final String dataId, final String group,
 		ConfigInfo configInfo = findConfigInfo(dataId, group, tenant);
 		if (Objects.nonNull(configInfo)) {
 			try {
-				removeConfigInfoAtomic(dataId, group, tenant, srcIp, srcUser);
+				String tenantTmp = StringUtils.isBlank(tenant) ?
+						StringUtils.EMPTY :
+						tenant;
+
+				removeConfigInfoAtomic(dataId, group, tenantTmp, srcIp, srcUser);
 				removeTagByIdAtomic(configInfo.getId());
 				insertConfigHistoryAtomic(configInfo.getId(), configInfo, srcIp, srcUser,
 						time, "D");
 
+				EmbeddedStorageContextUtils
+						.onDeleteConfigInfo(tenantTmp, group, dataId, srcIp, time);
+
 				boolean result = databaseOperate
-						.update(SqlContextUtils.getCurrentSqlContext());
+						.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 				if (!result) {
 					throw new NacosConfigException("config deletion failed");
 				}
 			}
 			finally {
-				SqlContextUtils.cleanCurrentSqlContext();
+				EmbeddedStorageContextUtils.cleanAllContext();
 			}
 		}
 	}
@@ -521,8 +504,9 @@ public List removeConfigInfoByIds(final List ids,
 				}
 			}
 
+			EmbeddedStorageContextUtils.onBatchDeleteConfigInfo(configInfoList);
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException("Failed to config batch deletion");
 			}
@@ -530,7 +514,7 @@ public List removeConfigInfoByIds(final List ids,
 			return configInfoList;
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -542,16 +526,20 @@ public void removeConfigInfo4Beta(final String dataId, final String group,
 			try {
 				final String sql = "DELETE FROM config_info_beta WHERE data_id=? AND group_id=? AND tenant_id=?";
 				final Object[] args = new Object[] { dataId, group, tenantTmp };
-				SqlContextUtils.addSqlContext(sql, args);
+
+				EmbeddedStorageContextUtils
+						.onDeleteConfigBetaInfo(tenantTmp, group, dataId,
+								System.currentTimeMillis());
+				EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 				boolean result = databaseOperate
-						.update(SqlContextUtils.getCurrentSqlContext());
+						.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 				if (!result) {
 					throw new NacosConfigException("[Tag] Configuration deletion failed");
 				}
 			}
 			finally {
-				SqlContextUtils.cleanCurrentSqlContext();
+				EmbeddedStorageContextUtils.cleanAllContext();
 			}
 
 		}
@@ -581,24 +569,24 @@ public boolean addAggrConfigInfo(final String dataId, final String group,
 		if (Objects.isNull(dbContent)) {
 			final Object[] args = new Object[] { dataId, group, tenantTmp, datumId,
 					appNameTmp, contentTmp, now };
-			SqlContextUtils.addSqlContext(insert, args);
+			EmbeddedStorageContextUtils.addSqlContext(insert, args);
 		}
 		else if (!dbContent.equals(content)) {
 			final Object[] args = new Object[] { contentTmp, now, dataId, group,
 					tenantTmp, datumId };
-			SqlContextUtils.addSqlContext(update, args);
+			EmbeddedStorageContextUtils.addSqlContext(update, args);
 		}
 
 		try {
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException("[Merge] Configuration release failed");
 			}
 			return true;
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -608,18 +596,18 @@ public void removeSingleAggrConfigInfo(final String dataId, final String group,
 
 		final String sql = "DELETE FROM config_info_aggr WHERE data_id=? AND group_id=? AND tenant_id=? AND datum_id=?";
 		final Object[] args = new Object[] { dataId, group, tenantTmp, datumId };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 		try {
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException(
 						"[aggregation with single] Configuration deletion failed");
 			}
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -629,18 +617,18 @@ public void removeAggrConfigInfo(final String dataId, final String group,
 
 		final String sql = "DELETE FROM config_info_aggr WHERE data_id=? AND group_id=? AND tenant_id=?";
 		final Object[] args = new Object[] { dataId, group, tenantTmp };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 		try {
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException(
 						"[aggregation with all] Configuration deletion failed");
 			}
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -656,11 +644,11 @@ public boolean batchRemoveAggr(final String dataId, final String group,
 				"delete from config_info_aggr where data_id=? and group_id=? and tenant_id=? and datum_id in ("
 						+ datumString.toString() + ")";
 		final Object[] args = new Object[] { dataId, group, tenantTmp };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 		try {
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException(
 						"[aggregation] Failed to configure batch deletion");
@@ -668,7 +656,7 @@ public boolean batchRemoveAggr(final String dataId, final String group,
 			return true;
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -703,7 +691,8 @@ public boolean batchPublishAggr(final String dataId, final String group,
 						entry.getValue());
 			}
 
-			isPublishOk = databaseOperate.update(SqlContextUtils.getCurrentSqlContext());
+			isPublishOk = databaseOperate
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 
 			if (isPublishOk == null) {
 				return false;
@@ -711,7 +700,7 @@ public boolean batchPublishAggr(final String dataId, final String group,
 			return isPublishOk;
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -731,10 +720,11 @@ public boolean replaceAggr(final String dataId, final String group,
 			final Object[] args = new Object[] { dataId, group, tenantTmp,
 					datumEntry.getKey(), appNameTmp, datumEntry.getValue(),
 					new Timestamp(System.currentTimeMillis()) };
-			SqlContextUtils.addSqlContext(sql, args);
+			EmbeddedStorageContextUtils.addSqlContext(sql, args);
 		}
 		try {
-			isReplaceOk = databaseOperate.update(SqlContextUtils.getCurrentSqlContext());
+			isReplaceOk = databaseOperate
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 
 			if (isReplaceOk == null) {
 				return false;
@@ -742,7 +732,7 @@ public boolean replaceAggr(final String dataId, final String group,
 			return isReplaceOk;
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 
 	}
@@ -1981,7 +1971,7 @@ public long addConfigInfoAtomic(final long id, final String srcIp,
 		final Object[] args = new Object[] { id, configInfo.getDataId(),
 				configInfo.getGroup(), tenantTmp, appNameTmp, configInfo.getContent(),
 				md5Tmp, srcIp, srcUser, time, time, desc, use, effect, type, schema, };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 		return id;
 	}
 
@@ -1992,7 +1982,7 @@ public void addConfigTagRelationAtomic(long configId, String tagName, String dat
 						+ "VALUES(?,?,?,?,?,?)";
 		final Object[] args = new Object[] { configId, tagName, null, dataId, group,
 				tenant };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 	}
 
 	public void addConfigTagsRelation(long configId, String configTags, String dataId,
@@ -2008,7 +1998,7 @@ public void addConfigTagsRelation(long configId, String configTags, String dataI
 	public void removeTagByIdAtomic(long id) {
 		final String sql = "DELETE FROM config_tags_relation WHERE id=?";
 		final Object[] args = new Object[] { id };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 	}
 
 	public List getConfigTagsByTenant(String tenant) {
@@ -2029,7 +2019,7 @@ public void removeConfigInfoAtomic(final String dataId, final String group,
 		final String sql = "DELETE FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?";
 		final Object[] args = new Object[] { dataId, group, tenantTmp };
 
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 	}
 
 	public void removeConfigInfoByIdsAtomic(final String ids) {
@@ -2048,7 +2038,7 @@ public void removeConfigInfoByIdsAtomic(final String ids) {
 			paramList.add(Long.parseLong(tagArr[i]));
 		}
 		sql.append(") ");
-		SqlContextUtils.addSqlContext(sql.toString(), paramList.toArray());
+		EmbeddedStorageContextUtils.addSqlContext(sql.toString(), paramList.toArray());
 	}
 
 	public void removeConfigInfoTag(final String dataId, final String group,
@@ -2060,12 +2050,14 @@ public void removeConfigInfoTag(final String dataId, final String group,
 		final String sql = "DELETE FROM config_info_tag WHERE data_id=? AND group_id=? AND tenant_id=? AND tag_id=?";
 		final Object[] args = new Object[] { dataId, group, tenantTmp, tagTmp };
 
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils
+				.onDeleteConfigTagInfo(tenantTmp, group, dataId, tagTmp, srcIp);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 		try {
-			databaseOperate.update(SqlContextUtils.getCurrentSqlContext());
+			databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -2100,7 +2092,7 @@ public void updateConfigInfoAtomic(final ConfigInfo configInfo, final String src
 				srcUser, time, appNameTmp, desc, use, effect, type, schema,
 				configInfo.getDataId(), configInfo.getGroup(), tenantTmp };
 
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 	}
 
 	public ConfigInfo findConfigInfo(final String dataId, final String group,
@@ -2206,7 +2198,7 @@ public void insertConfigHistoryAtomic(long configHistoryId, ConfigInfo configInf
 				configInfo.getGroup(), tenantTmp, appNameTmp, configInfo.getContent(),
 				md5Tmp, srcIp, srcUser, time, ops };
 
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 	}
 
 	public Page findConfigHistory(String dataId, String group,
@@ -2224,17 +2216,17 @@ public Page findConfigHistory(String dataId, String group,
 	public void addConfigSubAtomic(final String dataId, final String group,
 			final String appName, final Timestamp date) {
 		final String appNameTmp = appName == null ? "" : appName;
-		final long id = idGeneratorManager.nextId(appConfigDataRelationSubs);
+		final long id = idGeneratorManager.nextId(RESOURCE_APP_CONFIGDATA_RELATION_SUBS);
 
 		final String sql = "INSERT INTO app_configdata_relation_subs(id, data_id,group_id,app_name,gmt_modified) VALUES(?,?,?,?,?)";
 		final Object[] args = new Object[] { id, dataId, group, appNameTmp, date };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 		try {
-			databaseOperate.update(SqlContextUtils.getCurrentSqlContext());
+			databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -2244,13 +2236,13 @@ public void updateConfigSubAtomic(final String dataId, final String group,
 
 		final String sql = "UPDATE app_configdata_relation_subs SET gmt_modified=? WHERE data_id=? AND group_id=? AND app_name=?";
 		final Object[] args = new Object[] { time, dataId, group, appNameTmp };
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 		try {
-			databaseOperate.update(SqlContextUtils.getCurrentSqlContext());
+			databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -2269,17 +2261,17 @@ public void insertTenantInfoAtomic(String kp, String tenantId, String tenantName
 		final Object[] args = new Object[] { kp, tenantId, tenantName, tenantDesc,
 				createResoure, time, time };
 
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 		try {
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException("Namespace creation failed");
 			}
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -2290,17 +2282,17 @@ public void updateTenantNameAtomic(String kp, String tenantId, String tenantName
 		final Object[] args = new Object[] { tenantName, tenantDesc,
 				System.currentTimeMillis(), kp, tenantId };
 
-		SqlContextUtils.addSqlContext(sql, args);
+		EmbeddedStorageContextUtils.addSqlContext(sql, args);
 
 		try {
 			boolean result = databaseOperate
-					.update(SqlContextUtils.getCurrentSqlContext());
+					.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 			if (!result) {
 				throw new NacosConfigException("Namespace update failed");
 			}
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -2319,14 +2311,14 @@ public TenantInfo findTenantByKp(String kp, String tenantId) {
 	}
 
 	public void removeTenantInfoAtomic(final String kp, final String tenantId) {
-		SqlContextUtils
+		EmbeddedStorageContextUtils
 				.addSqlContext("DELETE FROM tenant_info WHERE kp=? AND tenant_id=?", kp,
 						tenantId);
 		try {
-			databaseOperate.update(SqlContextUtils.getCurrentSqlContext());
+			databaseOperate.update(EmbeddedStorageContextUtils.getCurrentSqlContext());
 		}
 		finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
@@ -2556,7 +2548,10 @@ public Map batchInsertOrUpdate(List configInfoLis
 						notify);
 				succCount++;
 			}
-			catch (DataIntegrityViolationException ive) {
+			catch (Throwable e) {
+				if (!StringUtils.contains("DuplicateKeyException", e.toString())) {
+					throw e;
+				}
 				// uniqueness constraint conflict
 				if (SameConfigPolicy.ABORT.equals(policy)) {
 					failData = new ArrayList<>();
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePaginationHelperImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePaginationHelperImpl.java
index 38f0342ae90..edc2d63f3a3 100644
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePaginationHelperImpl.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePaginationHelperImpl.java
@@ -17,7 +17,7 @@
 package com.alibaba.nacos.config.server.service.repository;
 
 import com.alibaba.nacos.config.server.model.Page;
-import com.alibaba.nacos.config.server.service.sql.SqlContextUtils;
+import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils;
 import com.alibaba.nacos.config.server.utils.PropertyUtil;
 import com.alibaba.nacos.core.utils.ApplicationUtils;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -210,7 +210,7 @@ public void updateLimit(final String sql, final Object[] args) {
 		try {
 			jdbcTemplate.update(sqlUpdate, args);
 		} finally {
-			SqlContextUtils.cleanCurrentSqlContext();
+			EmbeddedStorageContextUtils.cleanAllContext();
 		}
 	}
 
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePersistServiceImpl.java
index d8e7adf9402..e26837ac677 100644
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePersistServiceImpl.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/ExternalStoragePersistServiceImpl.java
@@ -38,9 +38,10 @@
 import com.alibaba.nacos.config.server.model.SameConfigPolicy;
 import com.alibaba.nacos.config.server.model.SubInfo;
 import com.alibaba.nacos.config.server.model.TenantInfo;
-import com.alibaba.nacos.config.server.service.ConfigDataChangeEvent;
-import com.alibaba.nacos.config.server.service.DataSourceService;
-import com.alibaba.nacos.config.server.service.DynamicDataSource;
+import com.alibaba.nacos.config.server.model.event.ConfigDataChangeEvent;
+import com.alibaba.nacos.config.server.service.datasource.DataSourceService;
+import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource;
+import com.alibaba.nacos.config.server.service.trace.ConfigTraceService;
 import com.alibaba.nacos.config.server.utils.LogUtil;
 import com.alibaba.nacos.config.server.utils.ParamUtils;
 import com.alibaba.nacos.config.server.utils.event.EventDispatcher;
@@ -80,26 +81,26 @@
 import java.util.List;
 import java.util.Map;
 
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_ADVANCE_INFO_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_ALL_INFO_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO4BETA_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO4TAG_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_AGGR_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_BASE_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_BETA_WRAPPER_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_CHANGED_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_TAG_WRAPPER_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_INFO_WRAPPER_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.CONFIG_KEY_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.HISTORY_DETAIL_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.HISTORY_LIST_ROW_MAPPER;
-import static com.alibaba.nacos.config.server.service.RowMapperManager.TENANT_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_ADVANCE_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_ALL_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO4BETA_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO4TAG_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_AGGR_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_BASE_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_BETA_WRAPPER_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_CHANGED_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_TAG_WRAPPER_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_INFO_WRAPPER_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.CONFIG_KEY_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.HISTORY_DETAIL_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.HISTORY_LIST_ROW_MAPPER;
+import static com.alibaba.nacos.config.server.service.repository.RowMapperManager.TENANT_INFO_ROW_MAPPER;
 
 /**
  * @author liaochuntao
  */
-@SuppressWarnings(value = {"PMD.MethodReturnWrapperTypeRule"})
+@SuppressWarnings(value = { "PMD.MethodReturnWrapperTypeRule" })
 @Conditional(value = ConditionOnExternalStorage.class)
 @Component
 public class ExternalStoragePersistServiceImpl implements PersistService {
@@ -170,51 +171,54 @@ public  PaginationHelper createPaginationHelper() {
 	/**
 	 * 添加普通配置信息,发布数据变更事件
 	 */
-	public void addConfigInfo(final String srcIp, final String srcUser, final ConfigInfo configInfo,
-			final Timestamp time, final Map configAdvanceInfo, final boolean notify) {
-		tjt.execute(new TransactionCallback() {
-			@Override
-			public Boolean doInTransaction(TransactionStatus status) {
-				try {
-					long configId = addConfigInfoAtomic(-1, srcIp, srcUser, configInfo, time, configAdvanceInfo);
-					String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
-					addConfigTagsRelation(configId, configTags, configInfo.getDataId(), configInfo.getGroup(),
-							configInfo.getTenant());
-					insertConfigHistoryAtomic(0, configInfo, srcIp, srcUser, time, "I");
-					if (notify) {
-						EventDispatcher.fireEvent(
-								new ConfigDataChangeEvent(false, configInfo.getDataId(), configInfo.getGroup(),
-										configInfo.getTenant(), time.getTime()));
-					}
-				} catch (CannotGetJdbcConnectionException e) {
-					LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
-					throw e;
+	public void addConfigInfo(final String srcIp, final String srcUser,
+			final ConfigInfo configInfo, final Timestamp time,
+			final Map configAdvanceInfo, final boolean notify) {
+		boolean result = tjt.execute(status -> {
+			try {
+				long configId = addConfigInfoAtomic(-1, srcIp, srcUser, configInfo, time,
+						configAdvanceInfo);
+				String configTags = configAdvanceInfo == null ?
+						null :
+						(String) configAdvanceInfo.get("config_tags");
+				addConfigTagsRelation(configId, configTags, configInfo.getDataId(),
+						configInfo.getGroup(), configInfo.getTenant());
+				insertConfigHistoryAtomic(0, configInfo, srcIp, srcUser, time, "I");
+				if (notify) {
+					EventDispatcher.fireEvent(
+							new ConfigDataChangeEvent(false, configInfo.getDataId(),
+									configInfo.getGroup(), configInfo.getTenant(),
+									time.getTime()));
 				}
-				return Boolean.TRUE;
 			}
+			catch (CannotGetJdbcConnectionException e) {
+				LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
+				throw e;
+			}
+			return Boolean.TRUE;
 		});
 	}
 
 	/**
 	 * 添加普通配置信息,发布数据变更事件
 	 */
-	public void addConfigInfo4Beta(ConfigInfo configInfo, String betaIps,
-			String srcIp, String srcUser, Timestamp time, boolean notify) {
-		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY : configInfo.getAppName();
-		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
+	public void addConfigInfo4Beta(ConfigInfo configInfo, String betaIps, String srcIp,
+			String srcUser, Timestamp time, boolean notify) {
+		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
+				StringUtils.EMPTY :
+				configInfo.getAppName();
+		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+				StringUtils.EMPTY :
+				configInfo.getTenant();
+		String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 		try {
-			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 			jt.update(
 					"INSERT INTO config_info_beta(data_id,group_id,tenant_id,app_name,content,md5,beta_ips,src_ip,"
 							+ "src_user,gmt_create,gmt_modified) VALUES(?,?,?,?,?,?,?,?,?,?,?)",
-					configInfo.getDataId(), configInfo.getGroup(), tenantTmp, appNameTmp, configInfo.getContent(), md5,
-					betaIps, srcIp, srcUser, time, time);
-			if (notify) {
-				EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, configInfo.getDataId(), configInfo.getGroup(),
-						tenantTmp, time.getTime()));
-			}
-
-		} catch (CannotGetJdbcConnectionException e) {
+					configInfo.getDataId(), configInfo.getGroup(), tenantTmp, appNameTmp,
+					configInfo.getContent(), md5, betaIps, srcIp, srcUser, time, time);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -223,24 +227,24 @@ public void addConfigInfo4Beta(ConfigInfo configInfo, String betaIps,
 	/**
 	 * 添加普通配置信息,发布数据变更事件
 	 */
-	public void addConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp, String srcUser, Timestamp time,
-			boolean notify) {
-		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY : configInfo.getAppName();
-		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
+	public void addConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp,
+			String srcUser, Timestamp time, boolean notify) {
+		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
+				StringUtils.EMPTY :
+				configInfo.getAppName();
+		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+				StringUtils.EMPTY :
+				configInfo.getTenant();
 		String tagTmp = StringUtils.isBlank(tag) ? StringUtils.EMPTY : tag.trim();
+		String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 		try {
-			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 			jt.update(
 					"INSERT INTO config_info_tag(data_id,group_id,tenant_id,tag_id,app_name,content,md5,src_ip,src_user,"
 							+ "gmt_create,gmt_modified) VALUES(?,?,?,?,?,?,?,?,?,?,?)",
-					configInfo.getDataId(), configInfo.getGroup(), tenantTmp, tagTmp, appNameTmp, configInfo.getContent(),
-					md5,
-					srcIp, srcUser, time, time);
-			if (notify) {
-				EventDispatcher.fireEvent(new ConfigDataChangeEvent(false, configInfo.getDataId(),
-						configInfo.getGroup(), tenantTmp, tagTmp, time.getTime()));
-			}
-		} catch (CannotGetJdbcConnectionException e) {
+					configInfo.getDataId(), configInfo.getGroup(), tenantTmp, tagTmp,
+					appNameTmp, configInfo.getContent(), md5, srcIp, srcUser, time, time);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -249,62 +253,61 @@ public void addConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp, S
 	/**
 	 * 更新配置信息
 	 */
-	public void updateConfigInfo(final ConfigInfo configInfo, final String srcIp, final String srcUser,
-			final Timestamp time, final Map configAdvanceInfo,
-			final boolean notify) {
-		tjt.execute(new TransactionCallback() {
-			@Override
-			public Boolean doInTransaction(TransactionStatus status) {
-				try {
-					ConfigInfo oldConfigInfo = findConfigInfo(configInfo.getDataId(), configInfo.getGroup(),
+	public void updateConfigInfo(final ConfigInfo configInfo, final String srcIp,
+			final String srcUser, final Timestamp time,
+			final Map configAdvanceInfo, final boolean notify) {
+		boolean result = tjt.execute(status -> {
+			try {
+				ConfigInfo oldConfigInfo = findConfigInfo(configInfo.getDataId(),
+						configInfo.getGroup(), configInfo.getTenant());
+				String appNameTmp = oldConfigInfo.getAppName();
+				// 用户传过来的appName不为空,则用持久化用户的appName,否则用db的;清空appName的时候需要传空串
+				if (configInfo.getAppName() == null) {
+					configInfo.setAppName(appNameTmp);
+				}
+				updateConfigInfoAtomic(configInfo, srcIp, srcUser, time,
+						configAdvanceInfo);
+				String configTags = configAdvanceInfo == null ?
+						null :
+						(String) configAdvanceInfo.get("config_tags");
+				if (configTags != null) {
+					// 删除所有tag,然后再重新创建
+					removeTagByIdAtomic(oldConfigInfo.getId());
+					addConfigTagsRelation(oldConfigInfo.getId(), configTags,
+							configInfo.getDataId(), configInfo.getGroup(),
 							configInfo.getTenant());
-					String appNameTmp = oldConfigInfo.getAppName();
-					// 用户传过来的appName不为空,则用持久化用户的appName,否则用db的;清空appName的时候需要传空串
-					if (configInfo.getAppName() == null) {
-						configInfo.setAppName(appNameTmp);
-					}
-					updateConfigInfoAtomic(configInfo, srcIp, srcUser, time, configAdvanceInfo);
-					String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
-					if (configTags != null) {
-						// 删除所有tag,然后再重新创建
-						removeTagByIdAtomic(oldConfigInfo.getId());
-						addConfigTagsRelation(oldConfigInfo.getId(), configTags, configInfo.getDataId(),
-								configInfo.getGroup(), configInfo.getTenant());
-					}
-					insertConfigHistoryAtomic(oldConfigInfo.getId(), oldConfigInfo, srcIp, srcUser, time, "U");
-					if (notify) {
-						EventDispatcher.fireEvent(new ConfigDataChangeEvent(false, configInfo.getDataId(),
-								configInfo.getGroup(), configInfo.getTenant(), time.getTime()));
-					}
-				} catch (CannotGetJdbcConnectionException e) {
-					LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
-					throw e;
 				}
-				return Boolean.TRUE;
+				insertConfigHistoryAtomic(oldConfigInfo.getId(), oldConfigInfo, srcIp,
+						srcUser, time, "U");
 			}
+			catch (CannotGetJdbcConnectionException e) {
+				LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
+				throw e;
+			}
+			return Boolean.TRUE;
 		});
 	}
 
 	/**
 	 * 更新配置信息
 	 */
-	public void updateConfigInfo4Beta(ConfigInfo configInfo, String srcIp, String srcUser, Timestamp time,
-			boolean notify) {
-		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY : configInfo.getAppName();
-		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
+	public void updateConfigInfo4Beta(ConfigInfo configInfo, String betaIps, String srcIp,
+			String srcUser, Timestamp time, boolean notify) {
+		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
+				StringUtils.EMPTY :
+				configInfo.getAppName();
+		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+				StringUtils.EMPTY :
+				configInfo.getTenant();
+		String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 		try {
-			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 			jt.update(
 					"UPDATE config_info_beta SET content=?, md5 = ?, src_ip=?,src_user=?,gmt_modified=?,app_name=? WHERE "
 							+ "data_id=? AND group_id=? AND tenant_id=?",
-					configInfo.getContent(), md5, srcIp, srcUser, time, appNameTmp, configInfo.getDataId(),
-					configInfo.getGroup(), tenantTmp);
-			if (notify) {
-				EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, configInfo.getDataId(), configInfo.getGroup(),
-						tenantTmp, time.getTime()));
-			}
-
-		} catch (CannotGetJdbcConnectionException e) {
+					configInfo.getContent(), md5, srcIp, srcUser, time, appNameTmp,
+					configInfo.getDataId(), configInfo.getGroup(), tenantTmp);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -313,77 +316,100 @@ public void updateConfigInfo4Beta(ConfigInfo configInfo, String srcIp, String sr
 	/**
 	 * 更新配置信息
 	 */
-	public void updateConfigInfo4Tag(ConfigInfo configInfo, String tag, String srcIp, String srcUser, Timestamp time,
-			boolean notify) {
-		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY : configInfo.getAppName();
-		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
+	public void updateConfigInfo4Tag(ConfigInfo configInfo,
+			String tag, String srcIp, String srcUser, Timestamp time, boolean notify) {
+		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
+				StringUtils.EMPTY :
+				configInfo.getAppName();
+		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+				StringUtils.EMPTY :
+				configInfo.getTenant();
 		String tagTmp = StringUtils.isBlank(tag) ? StringUtils.EMPTY : tag.trim();
 		try {
 			String md5 = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 			jt.update(
 					"UPDATE config_info_tag SET content=?, md5 = ?, src_ip=?,src_user=?,gmt_modified=?,app_name=? WHERE "
 							+ "data_id=? AND group_id=? AND tenant_id=? AND tag_id=?",
-					configInfo.getContent(), md5, srcIp, srcUser, time, appNameTmp, configInfo.getDataId(),
-					configInfo.getGroup(), tenantTmp, tagTmp);
-			if (notify) {
-				EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, configInfo.getDataId(), configInfo.getGroup(),
-						tenantTmp, tagTmp, time.getTime()));
-			}
-
-		} catch (CannotGetJdbcConnectionException e) {
+					configInfo.getContent(), md5, srcIp, srcUser, time, appNameTmp,
+					configInfo.getDataId(), configInfo.getGroup(), tenantTmp, tagTmp);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public void insertOrUpdateBeta(final ConfigInfo configInfo, final String betaIps, final String srcIp,
-			final String srcUser, final Timestamp time, final boolean notify) {
+	public void insertOrUpdateBeta(final ConfigInfo configInfo,
+			final String betaIps, final String srcIp, final String srcUser,
+			final Timestamp time, final boolean notify) {
 		try {
 			addConfigInfo4Beta(configInfo, betaIps, srcIp, null, time, notify);
-		} catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
-			updateConfigInfo4Beta(configInfo, srcIp, null, time, notify);
 		}
+		catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
+			updateConfigInfo4Beta(configInfo, betaIps, srcIp, null, time,
+					notify);
+		}
+		EventDispatcher.fireEvent(
+				new ConfigDataChangeEvent(true, configInfo.getDataId(),
+						configInfo.getGroup(), configInfo.getTenant(),
+						time.getTime()));
 	}
 
-	public void insertOrUpdateTag(final ConfigInfo configInfo, final String tag, final String srcIp,
-			final String srcUser, final Timestamp time, final boolean notify) {
+	public void insertOrUpdateTag(final ConfigInfo configInfo,
+			final String tag, final String srcIp, final String srcUser,
+			final Timestamp time, final boolean notify) {
 		try {
 			addConfigInfo4Tag(configInfo, tag, srcIp, null, time, notify);
-		} catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
+		}
+		catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
 			updateConfigInfo4Tag(configInfo, tag, srcIp, null, time, notify);
 		}
+		EventDispatcher.fireEvent(
+				new ConfigDataChangeEvent(false, configInfo.getDataId(),
+						configInfo.getGroup(), configInfo.getTenant(), tag,
+						time.getTime()));
 	}
 
 	/**
 	 * 更新md5
 	 */
-	public void updateMd5(String dataId, String group, String tenant, String md5, Timestamp lastTime) {
+	public void updateMd5(String dataId, String group, String tenant, String md5,
+			Timestamp lastTime) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
 			jt.update(
 					"UPDATE config_info SET md5 = ? WHERE data_id=? AND group_id=? AND tenant_id=? AND gmt_modified=?",
 					md5, dataId, group, tenantTmp, lastTime);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public void insertOrUpdate(String srcIp, String srcUser, ConfigInfo configInfo, Timestamp time,
-			Map configAdvanceInfo) {
+	public void insertOrUpdate(String srcIp, String srcUser, ConfigInfo configInfo,
+			Timestamp time, Map configAdvanceInfo) {
 		insertOrUpdate(srcIp, srcUser, configInfo, time, configAdvanceInfo, true);
 	}
 
 	/**
 	 * 写入主表,插入或更新
 	 */
-	public void insertOrUpdate(String srcIp, String srcUser, ConfigInfo configInfo, Timestamp time,
-			Map configAdvanceInfo, boolean notify) {
+	public void insertOrUpdate(String srcIp, String srcUser,
+			ConfigInfo configInfo, Timestamp time, Map configAdvanceInfo,
+			boolean notify) {
 		try {
-			addConfigInfo(srcIp, srcUser, configInfo, time, configAdvanceInfo, notify);
-		} catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
-			updateConfigInfo(configInfo, srcIp, srcUser, time, configAdvanceInfo, notify);
+			addConfigInfo(srcIp, srcUser, configInfo, time, configAdvanceInfo,
+					notify);
 		}
+		catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
+			updateConfigInfo(configInfo, srcIp, srcUser, time, configAdvanceInfo,
+					notify);
+		}
+		EventDispatcher.fireEvent(
+				new ConfigDataChangeEvent(false, configInfo.getDataId(),
+						configInfo.getGroup(), configInfo.getTenant(),
+						time.getTime()));
 	}
 
 	/**
@@ -391,17 +417,20 @@ public void insertOrUpdate(String srcIp, String srcUser, ConfigInfo configInfo,
 	 */
 	public void insertOrUpdateSub(SubInfo subInfo) {
 		try {
-			addConfigSubAtomic(subInfo.getDataId(), subInfo.getGroup(), subInfo.getAppName(), subInfo.getDate());
-		} catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
-			updateConfigSubAtomic(subInfo.getDataId(), subInfo.getGroup(), subInfo.getAppName(), subInfo.getDate());
+			addConfigSubAtomic(subInfo.getDataId(), subInfo.getGroup(),
+					subInfo.getAppName(), subInfo.getDate());
+		}
+		catch (DataIntegrityViolationException ive) { // 唯一性约束冲突
+			updateConfigSubAtomic(subInfo.getDataId(), subInfo.getGroup(),
+					subInfo.getAppName(), subInfo.getDate());
 		}
 	}
 
 	/**
 	 * 删除配置信息, 物理删除
 	 */
-	public void removeConfigInfo(final String dataId, final String group, final String tenant, final String srcIp,
-			final String srcUser) {
+	public void removeConfigInfo(final String dataId, final String group,
+			final String tenant, final String srcIp, final String srcUser) {
 		tjt.execute(new TransactionCallback() {
 			final Timestamp time = new Timestamp(System.currentTimeMillis());
 
@@ -412,57 +441,83 @@ public Boolean doInTransaction(TransactionStatus status) {
 					if (configInfo != null) {
 						removeConfigInfoAtomic(dataId, group, tenant, srcIp, srcUser);
 						removeTagByIdAtomic(configInfo.getId());
-						insertConfigHistoryAtomic(configInfo.getId(), configInfo, srcIp, srcUser, time, "D");
+						insertConfigHistoryAtomic(configInfo.getId(), configInfo, srcIp,
+								srcUser, time, "D");
 					}
-				} catch (CannotGetJdbcConnectionException e) {
+				}
+				catch (CannotGetJdbcConnectionException e) {
 					LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 					throw e;
 				}
 				return Boolean.TRUE;
 			}
 		});
+
+		EventDispatcher.fireEvent(new ConfigDataChangeEvent(false, dataId, group, tenant,
+				System.currentTimeMillis()));
 	}
 
 	/**
+	 * @return List deleted configInfos
 	 * @author klw
 	 * @Description: delete config info by ids
 	 * @Date 2019/7/5 16:45
 	 * @Param [ids, srcIp, srcUser]
-	 * @return List deleted configInfos
 	 */
-	public List removeConfigInfoByIds(final List ids, final String srcIp, final String srcUser) {
-		if(CollectionUtils.isEmpty(ids)){
+	public List removeConfigInfoByIds(final List ids,
+			final String srcIp, final String srcUser) {
+		if (CollectionUtils.isEmpty(ids)) {
 			return null;
 		}
 		ids.removeAll(Collections.singleton(null));
-		return tjt.execute(new TransactionCallback>() {
-			final Timestamp time = new Timestamp(System.currentTimeMillis());
+		List result = tjt
+				.execute(new TransactionCallback>() {
+					final Timestamp time = new Timestamp(System.currentTimeMillis());
 
-			@Override
-			public List doInTransaction(TransactionStatus status) {
-				try {
-					String idsStr = Joiner.on(",").join(ids);
-					List configInfoList = findConfigInfosByIds(idsStr);
-					if (!CollectionUtils.isEmpty(configInfoList)) {
-						removeConfigInfoByIdsAtomic(idsStr);
-						for(ConfigInfo configInfo : configInfoList){
-							removeTagByIdAtomic(configInfo.getId());
-							insertConfigHistoryAtomic(configInfo.getId(), configInfo, srcIp, srcUser, time, "D");
+					@Override
+					public List doInTransaction(TransactionStatus status) {
+						try {
+							String idsStr = Joiner.on(",").join(ids);
+							List configInfoList = findConfigInfosByIds(
+									idsStr);
+							if (!CollectionUtils.isEmpty(configInfoList)) {
+								removeConfigInfoByIdsAtomic(idsStr);
+								for (ConfigInfo configInfo : configInfoList) {
+									removeTagByIdAtomic(configInfo.getId());
+									insertConfigHistoryAtomic(configInfo.getId(),
+											configInfo, srcIp, srcUser, time, "D");
+								}
+							}
+							return configInfoList;
+						}
+						catch (CannotGetJdbcConnectionException e) {
+							LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
+							throw e;
 						}
 					}
-					return configInfoList;
-				} catch (CannotGetJdbcConnectionException e) {
-					LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
-					throw e;
-				}
+				});
+
+		if (!CollectionUtils.isEmpty(result)) {
+			long currentTime = System.currentTimeMillis();
+			for (ConfigInfo configInfo : result) {
+				ConfigTraceService.logPersistenceEvent(configInfo.getDataId(),
+						configInfo.getGroup(), configInfo.getTenant(), null, currentTime,
+						srcIp, ConfigTraceService.PERSISTENCE_EVENT_REMOVE, null);
+				EventDispatcher.fireEvent(
+						new ConfigDataChangeEvent(false, configInfo.getDataId(),
+								configInfo.getGroup(), configInfo.getTenant(),
+								currentTime));
 			}
-		});
+		}
+
+		return result;
 	}
 
 	/**
 	 * 删除beta配置信息, 物理删除
 	 */
-	public void removeConfigInfo4Beta(final String dataId, final String group, final String tenant) {
+	public void removeConfigInfo4Beta(final String dataId, final String group,
+			final String tenant) {
 		final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		tjt.execute(new TransactionCallback() {
 			@Override
@@ -470,16 +525,21 @@ public Boolean doInTransaction(TransactionStatus status) {
 				try {
 					ConfigInfo configInfo = findConfigInfo4Beta(dataId, group, tenant);
 					if (configInfo != null) {
-						jt.update("DELETE FROM config_info_beta WHERE data_id=? AND group_id=? AND tenant_id=?", dataId,
-								group, tenantTmp);
+						jt.update(
+								"DELETE FROM config_info_beta WHERE data_id=? AND group_id=? AND tenant_id=?",
+								dataId, group, tenantTmp);
 					}
-				} catch (CannotGetJdbcConnectionException e) {
+				}
+				catch (CannotGetJdbcConnectionException e) {
 					LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 					throw e;
 				}
 				return Boolean.TRUE;
 			}
 		});
+
+		EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant,
+				System.currentTimeMillis()));
 	}
 
 	// ----------------------- config_aggr_info 表 insert update delete
@@ -487,35 +547,40 @@ public Boolean doInTransaction(TransactionStatus status) {
 	/**
 	 * 增加聚合前数据到数据库, select -> update or insert
 	 */
-	public boolean addAggrConfigInfo(final String dataId, final String group, String tenant, final String datumId,
-			String appName, final String content) {
+	public boolean addAggrConfigInfo(final String dataId, final String group,
+			String tenant, final String datumId, String appName, final String content) {
 		String appNameTmp = StringUtils.isBlank(appName) ? StringUtils.EMPTY : appName;
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		final Timestamp now = new Timestamp(System.currentTimeMillis());
-		String select
-				= "SELECT content FROM config_info_aggr WHERE data_id = ? AND group_id = ? AND tenant_id = ?  AND "
-				+ "datum_id = ?";
-		String insert
-				= "INSERT INTO config_info_aggr(data_id, group_id, tenant_id, datum_id, app_name, content, gmt_modified) "
-				+ "VALUES(?,?,?,?,?,?,?) ";
-		String update
-				= "UPDATE config_info_aggr SET content = ? , gmt_modified = ? WHERE data_id = ? AND group_id = ? AND "
-				+ "tenant_id = ? AND datum_id = ?";
+		String select =
+				"SELECT content FROM config_info_aggr WHERE data_id = ? AND group_id = ? AND tenant_id = ?  AND "
+						+ "datum_id = ?";
+		String insert =
+				"INSERT INTO config_info_aggr(data_id, group_id, tenant_id, datum_id, app_name, content, gmt_modified) "
+						+ "VALUES(?,?,?,?,?,?,?) ";
+		String update =
+				"UPDATE config_info_aggr SET content = ? , gmt_modified = ? WHERE data_id = ? AND group_id = ? AND "
+						+ "tenant_id = ? AND datum_id = ?";
 
 		try {
 			try {
-				String dbContent = jt.queryForObject(select, new Object[]{dataId, group, tenantTmp, datumId},
-						String.class);
+				String dbContent = jt.queryForObject(select,
+						new Object[] { dataId, group, tenantTmp, datumId }, String.class);
 
 				if (dbContent != null && dbContent.equals(content)) {
 					return true;
-				} else {
-					return jt.update(update, content, now, dataId, group, tenantTmp, datumId) > 0;
 				}
-			} catch (EmptyResultDataAccessException ex) { // no data, insert
-				return jt.update(insert, dataId, group, tenantTmp, datumId, appNameTmp, content, now) > 0;
+				else {
+					return jt.update(update, content, now, dataId, group, tenantTmp,
+							datumId) > 0;
+				}
 			}
-		} catch (DataAccessException e) {
+			catch (EmptyResultDataAccessException ex) { // no data, insert
+				return jt.update(insert, dataId, group, tenantTmp, datumId, appNameTmp,
+						content, now) > 0;
+			}
+		}
+		catch (DataAccessException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -524,8 +589,8 @@ public boolean addAggrConfigInfo(final String dataId, final String group, String
 	/**
 	 * 删除单条聚合前数据
 	 */
-	public void removeSingleAggrConfigInfo(final String dataId,
-			final String group, final String tenant, final String datumId) {
+	public void removeSingleAggrConfigInfo(final String dataId, final String group,
+			final String tenant, final String datumId) {
 		final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String sql = "DELETE FROM config_info_aggr WHERE data_id=? AND group_id=? AND tenant_id=? AND datum_id=?";
 
@@ -540,7 +605,8 @@ public void setValues(PreparedStatement ps) throws SQLException {
 					ps.setString(index, datumId);
 				}
 			});
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -549,7 +615,8 @@ public void setValues(PreparedStatement ps) throws SQLException {
 	/**
 	 * 删除一个dataId下面所有的聚合前数据
 	 */
-	public void removeAggrConfigInfo(final String dataId, final String group, final String tenant) {
+	public void removeAggrConfigInfo(final String dataId, final String group,
+			final String tenant) {
 		final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String sql = "DELETE FROM config_info_aggr WHERE data_id=? AND group_id=? AND tenant_id=?";
 
@@ -563,7 +630,8 @@ public void setValues(PreparedStatement ps) throws SQLException {
 					ps.setString(index, tenantTmp);
 				}
 			});
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -576,8 +644,8 @@ public void setValues(PreparedStatement ps) throws SQLException {
 	 * @param group
 	 * @param datumList
 	 */
-	public boolean batchRemoveAggr(final String dataId, final String group, final String tenant,
-			final List datumList) {
+	public boolean batchRemoveAggr(final String dataId, final String group,
+			final String tenant, final List datumList) {
 		final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		final StringBuilder datumString = new StringBuilder();
 		for (String datum : datumList) {
@@ -589,7 +657,8 @@ public boolean batchRemoveAggr(final String dataId, final String group, final St
 						+ datumString.toString() + ")";
 		try {
 			jt.update(sql, dataId, group, tenantTmp);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			return false;
 		}
@@ -603,8 +672,9 @@ public void removeConfigHistory(final Timestamp startTime, final int limitSize)
 		String sql = "delete from his_config_info where gmt_modified < ? limit ?";
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			helper.updateLimit(sql, new Object[]{startTime, limitSize});
-		} catch (CannotGetJdbcConnectionException e) {
+			helper.updateLimit(sql, new Object[] { startTime, limitSize });
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -615,7 +685,8 @@ public void removeConfigHistory(final Timestamp startTime, final int limitSize)
 	 */
 	public int findConfigHistoryCountByTime(final Timestamp startTime) {
 		String sql = "SELECT COUNT(*) FROM his_config_info WHERE gmt_modified < ?";
-		Integer result = jt.queryForObject(sql, Integer.class, new Object[]{startTime});
+		Integer result = jt
+				.queryForObject(sql, Integer.class, new Object[] { startTime });
 		if (result == null) {
 			throw new IllegalArgumentException("configInfoBetaCount error");
 		}
@@ -628,8 +699,9 @@ public int findConfigHistoryCountByTime(final Timestamp startTime) {
 	public long findConfigMaxId() {
 		String sql = "SELECT max(id) FROM config_info";
 		try {
-			return jt.queryForObject(sql, Integer.class);
-		} catch (NullPointerException e) {
+			return jt.queryForObject(sql, Long.class);
+		}
+		catch (NullPointerException e) {
 			return 0;
 		}
 	}
@@ -642,19 +714,22 @@ public long findConfigMaxId() {
 	 * @param datumMap
 	 * @return
 	 */
-	public boolean batchPublishAggr(final String dataId, final String group, final String tenant,
-			final Map datumMap, final String appName) {
+	public boolean batchPublishAggr(final String dataId, final String group,
+			final String tenant, final Map datumMap,
+			final String appName) {
 		try {
 			Boolean isPublishOk = tjt.execute(new TransactionCallback() {
 				@Override
 				public Boolean doInTransaction(TransactionStatus status) {
 					for (Map.Entry entry : datumMap.entrySet()) {
 						try {
-							if (!addAggrConfigInfo(dataId, group, tenant, entry.getKey(), appName, entry.getValue())) {
+							if (!addAggrConfigInfo(dataId, group, tenant, entry.getKey(),
+									appName, entry.getValue())) {
 								throw new TransactionSystemException(
 										"error in addAggrConfigInfo");
 							}
-						} catch (Throwable e) {
+						}
+						catch (Throwable e) {
 							throw new TransactionSystemException(
 									"error in addAggrConfigInfo");
 						}
@@ -666,7 +741,8 @@ public Boolean doInTransaction(TransactionStatus status) {
 				return false;
 			}
 			return isPublishOk;
-		} catch (TransactionException e) {
+		}
+		catch (TransactionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			return false;
 		}
@@ -680,8 +756,9 @@ public Boolean doInTransaction(TransactionStatus status) {
 	 * @param datumMap
 	 * @return
 	 */
-	public boolean replaceAggr(final String dataId, final String group, final String tenant,
-			final Map datumMap, final String appName) {
+	public boolean replaceAggr(final String dataId, final String group,
+			final String tenant, final Map datumMap,
+			final String appName) {
 		try {
 			Boolean isReplaceOk = tjt.execute(new TransactionCallback() {
 				@Override
@@ -689,15 +766,19 @@ public Boolean doInTransaction(TransactionStatus status) {
 					try {
 						String appNameTmp = appName == null ? "" : appName;
 						removeAggrConfigInfo(dataId, group, tenant);
-						String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
-						String sql
-								= "INSERT INTO config_info_aggr(data_id, group_id, tenant_id, datum_id, app_name, "
-								+ "content, gmt_modified) VALUES(?,?,?,?,?,?,?) ";
+						String tenantTmp = StringUtils.isBlank(tenant) ?
+								StringUtils.EMPTY :
+								tenant;
+						String sql =
+								"INSERT INTO config_info_aggr(data_id, group_id, tenant_id, datum_id, app_name, "
+										+ "content, gmt_modified) VALUES(?,?,?,?,?,?,?) ";
 						for (Map.Entry datumEntry : datumMap.entrySet()) {
-							jt.update(sql, dataId, group, tenantTmp, datumEntry.getKey(), appNameTmp,
-									datumEntry.getValue(), new Timestamp(System.currentTimeMillis()));
+							jt.update(sql, dataId, group, tenantTmp, datumEntry.getKey(),
+									appNameTmp, datumEntry.getValue(),
+									new Timestamp(System.currentTimeMillis()));
 						}
-					} catch (Throwable e) {
+					}
+					catch (Throwable e) {
 						throw new TransactionSystemException(
 								"error in addAggrConfigInfo");
 					}
@@ -708,7 +789,8 @@ public Boolean doInTransaction(TransactionStatus status) {
 				return false;
 			}
 			return isReplaceOk;
-		} catch (TransactionException e) {
+		}
+		catch (TransactionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			return false;
 		}
@@ -723,13 +805,16 @@ public List findAllDataIdAndGroup() {
 		String sql = "SELECT DISTINCT data_id, group_id FROM config_info";
 
 		try {
-			return jt.query(sql, new Object[]{}, CONFIG_INFO_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) {
+			return jt.query(sql, new Object[] {}, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) {
 			return Collections.emptyList();
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			LogUtil.fatalLog.error("[db-other-error]" + e.getMessage(), e);
 			throw new RuntimeException(e);
 		}
@@ -738,16 +823,20 @@ public List findAllDataIdAndGroup() {
 	/**
 	 * 根据dataId和group查询配置信息
 	 */
-	public ConfigInfo4Beta findConfigInfo4Beta(final String dataId, final String group, final String tenant) {
+	public ConfigInfo4Beta findConfigInfo4Beta(final String dataId, final String group,
+			final String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
 			return this.jt.queryForObject(
 					"SELECT ID,data_id,group_id,tenant_id,app_name,content,beta_ips FROM config_info_beta WHERE data_id=?"
 							+ " AND group_id=? AND tenant_id=?",
-					new Object[]{dataId, group, tenantTmp}, CONFIG_INFO4BETA_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+					new Object[] { dataId, group, tenantTmp },
+					CONFIG_INFO4BETA_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -756,18 +845,21 @@ public ConfigInfo4Beta findConfigInfo4Beta(final String dataId, final String gro
 	/**
 	 * 根据dataId和group查询配置信息
 	 */
-	public ConfigInfo4Tag findConfigInfo4Tag(final String dataId, final String group, final String tenant,
-			final String tag) {
+	public ConfigInfo4Tag findConfigInfo4Tag(final String dataId, final String group,
+			final String tenant, final String tag) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String tagTmp = StringUtils.isBlank(tag) ? StringUtils.EMPTY : tag.trim();
 		try {
 			return this.jt.queryForObject(
 					"SELECT ID,data_id,group_id,tenant_id,tag_id,app_name,content FROM config_info_tag WHERE data_id=? "
 							+ "AND group_id=? AND tenant_id=? AND tag_id=?",
-					new Object[]{dataId, group, tenantTmp, tagTmp}, CONFIG_INFO4TAG_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+					new Object[] { dataId, group, tenantTmp, tagTmp },
+					CONFIG_INFO4TAG_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -776,17 +868,20 @@ public ConfigInfo4Tag findConfigInfo4Tag(final String dataId, final String group
 	/**
 	 * 根据dataId和group查询配置信息
 	 */
-	public ConfigInfo findConfigInfoApp(final String dataId, final String group, final String tenant,
-			final String appName) {
+	public ConfigInfo findConfigInfoApp(final String dataId, final String group,
+			final String tenant, final String appName) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
 			return this.jt.queryForObject(
 					"SELECT ID,data_id,group_id,tenant_id,app_name,content FROM config_info WHERE data_id=? AND "
 							+ "group_id=? AND tenant_id=? AND app_name=?",
-					new Object[]{dataId, group, tenantTmp, appName}, CONFIG_INFO_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+					new Object[] { dataId, group, tenantTmp, appName },
+					CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -795,11 +890,15 @@ public ConfigInfo findConfigInfoApp(final String dataId, final String group, fin
 	/**
 	 * 根据dataId和group查询配置信息
 	 */
-	public ConfigInfo findConfigInfoAdvanceInfo(final String dataId, final String group, final String tenant,
-			final Map configAdvanceInfo) {
+	public ConfigInfo findConfigInfoAdvanceInfo(final String dataId, final String group,
+			final String tenant, final Map configAdvanceInfo) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
-		final String appName = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("appName");
-		final String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
+		final String appName = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("appName");
+		final String configTags = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("config_tags");
 		List paramList = new ArrayList();
 		paramList.add(dataId);
 		paramList.add(group);
@@ -827,7 +926,8 @@ public ConfigInfo findConfigInfoAdvanceInfo(final String dataId, final String gr
 				sql.append(" and a.app_name=? ");
 				paramList.add(appName);
 			}
-		} else {
+		}
+		else {
 			if (StringUtils.isNotBlank(appName)) {
 				sql.append(" and app_name=? ");
 				paramList.add(appName);
@@ -835,10 +935,13 @@ public ConfigInfo findConfigInfoAdvanceInfo(final String dataId, final String gr
 		}
 
 		try {
-			return this.jt.queryForObject(sql.toString(), paramList.toArray(), CONFIG_INFO_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+			return this.jt.queryForObject(sql.toString(), paramList.toArray(),
+					CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -850,15 +953,16 @@ public ConfigInfo findConfigInfoAdvanceInfo(final String dataId, final String gr
 	 */
 	public ConfigInfoBase findConfigInfoBase(final String dataId, final String group) {
 		try {
-			return this.jt
-					.queryForObject(
-							"SELECT ID,data_id,group_id,content FROM config_info WHERE data_id=? AND group_id=? AND "
-									+ "tenant_id=?",
-							new Object[]{dataId, group, StringUtils.EMPTY},
-							CONFIG_INFO_BASE_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+			return this.jt.queryForObject(
+					"SELECT ID,data_id,group_id,content FROM config_info WHERE data_id=? AND group_id=? AND "
+							+ "tenant_id=?",
+					new Object[] { dataId, group, StringUtils.EMPTY },
+					CONFIG_INFO_BASE_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -872,13 +976,14 @@ public ConfigInfoBase findConfigInfoBase(final String dataId, final String group
 	 */
 	public ConfigInfo findConfigInfo(long id) {
 		try {
-			return this.jt
-					.queryForObject(
-							"SELECT ID,data_id,group_id,tenant_id,app_name,content FROM config_info WHERE ID=?",
-							new Object[]{id}, CONFIG_INFO_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在
+			return this.jt.queryForObject(
+					"SELECT ID,data_id,group_id,tenant_id,app_name,content FROM config_info WHERE ID=?",
+					new Object[] { id }, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -892,16 +997,18 @@ public ConfigInfo findConfigInfo(long id) {
 	 * @param dataId
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findConfigInfoByDataId(final int pageNo, final int pageSize, final String dataId,
-			final String tenant) {
+	public Page findConfigInfoByDataId(final int pageNo, final int pageSize,
+			final String dataId, final String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPage("select count(*) from config_info where data_id=? and tenant_id=?",
+			return helper.fetchPage(
+					"select count(*) from config_info where data_id=? and tenant_id=?",
 					"select ID,data_id,group_id,tenant_id,app_name,content from config_info where data_id=? and "
-							+ "tenant_id=?",
-					new Object[]{dataId, tenantTmp}, pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+							+ "tenant_id=?", new Object[] { dataId, tenantTmp }, pageNo,
+					pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -915,8 +1022,9 @@ public Page findConfigInfoByDataId(final int pageNo, final int pageS
 	 * @param dataId
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findConfigInfoByDataIdAndApp(final int pageNo, final int pageSize, final String dataId,
-			final String tenant, final String appName) {
+	public Page findConfigInfoByDataIdAndApp(final int pageNo,
+			final int pageSize, final String dataId, final String tenant,
+			final String appName) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
 		try {
@@ -924,21 +1032,28 @@ public Page findConfigInfoByDataIdAndApp(final int pageNo, final int
 					"select count(*) from config_info where data_id=? and tenant_id=? and app_name=?",
 					"select ID,data_id,group_id,tenant_id,app_name,content from config_info where data_id=? and "
 							+ "tenant_id=? and app_name=?",
-					new Object[]{dataId, tenantTmp, appName}, pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+					new Object[] { dataId, tenantTmp, appName }, pageNo, pageSize,
+					CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findConfigInfoByDataIdAndAdvance(final int pageNo, final int pageSize, final String dataId,
-			final String tenant,
+	public Page findConfigInfoByDataIdAndAdvance(final int pageNo,
+			final int pageSize, final String dataId, final String tenant,
 			final Map configAdvanceInfo) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
-		final String appName = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("appName");
-		final String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
-		StringBuilder sqlCount = new StringBuilder("select count(*) from config_info where data_id=? and tenant_id=? ");
+		final String appName = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("appName");
+		final String configTags = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("config_tags");
+		StringBuilder sqlCount = new StringBuilder(
+				"select count(*) from config_info where data_id=? and tenant_id=? ");
 		StringBuilder sql = new StringBuilder(
 				"select ID,data_id,group_id,tenant_id,app_name,content from config_info where data_id=? and tenant_id=? ");
 		List paramList = new ArrayList();
@@ -973,7 +1088,8 @@ public Page findConfigInfoByDataIdAndAdvance(final int pageNo, final
 				sql.append(" and a.app_name=? ");
 				paramList.add(appName);
 			}
-		} else {
+		}
+		else {
 			if (StringUtils.isNotBlank(appName)) {
 				sqlCount.append(" and app_name=? ");
 				sql.append(" and app_name=? ");
@@ -981,21 +1097,27 @@ public Page findConfigInfoByDataIdAndAdvance(final int pageNo, final
 			}
 		}
 		try {
-			return helper.fetchPage(sqlCount.toString(), sql.toString(), paramList.toArray(), pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper
+					.fetchPage(sqlCount.toString(), sql.toString(), paramList.toArray(),
+							pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findConfigInfo4Page(final int pageNo, final int pageSize, final String dataId,
-			final String group,
-			final String tenant, final Map configAdvanceInfo) {
+	public Page findConfigInfo4Page(final int pageNo, final int pageSize,
+			final String dataId, final String group, final String tenant,
+			final Map configAdvanceInfo) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
-		final String appName = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("appName");
-		final String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
+		final String appName = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("appName");
+		final String configTags = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("config_tags");
 		String sqlCount = "select count(*) from config_info";
 		String sql = "select ID,data_id,group_id,tenant_id,app_name,content,type from config_info";
 		StringBuilder where = new StringBuilder(" where ");
@@ -1003,8 +1125,7 @@ public Page findConfigInfo4Page(final int pageNo, final int pageSize
 		paramList.add(tenantTmp);
 		if (StringUtils.isNotBlank(configTags)) {
 			sqlCount = "select count(*) from config_info  a left join config_tags_relation b on a.id=b.id";
-			sql
-					= "select a.ID,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content from config_info  a left join "
+			sql = "select a.ID,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content from config_info  a left join "
 					+ "config_tags_relation b on a.id=b.id";
 
 			where.append(" a.tenant_id=? ");
@@ -1032,7 +1153,8 @@ public Page findConfigInfo4Page(final int pageNo, final int pageSize
 				paramList.add(tagArr[i]);
 			}
 			where.append(") ");
-		} else {
+		}
+		else {
 			where.append(" tenant_id=? ");
 			if (StringUtils.isNotBlank(dataId)) {
 				where.append(" and data_id=? ");
@@ -1048,9 +1170,11 @@ public Page findConfigInfo4Page(final int pageNo, final int pageSize
 			}
 		}
 		try {
-			return helper.fetchPage(sqlCount + where, sql + where, paramList.toArray(), pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper
+					.fetchPage(sqlCount + where, sql + where, paramList.toArray(), pageNo,
+							pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1068,13 +1192,13 @@ public Page findConfigInfoBaseByDataId(final int pageNo,
 			final int pageSize, final String dataId) {
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper
-					.fetchPage(
-							"select count(*) from config_info where data_id=? and tenant_id=?",
-							"select ID,data_id,group_id,content from config_info where data_id=? and tenant_id=?",
-							new Object[]{dataId, StringUtils.EMPTY}, pageNo, pageSize,
-							CONFIG_INFO_BASE_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPage(
+					"select count(*) from config_info where data_id=? and tenant_id=?",
+					"select ID,data_id,group_id,content from config_info where data_id=? and tenant_id=?",
+					new Object[] { dataId, StringUtils.EMPTY }, pageNo, pageSize,
+					CONFIG_INFO_BASE_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1088,16 +1212,18 @@ public Page findConfigInfoBaseByDataId(final int pageNo,
 	 * @param group
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findConfigInfoByGroup(final int pageNo, final int pageSize, final String group,
-			final String tenant) {
+	public Page findConfigInfoByGroup(final int pageNo, final int pageSize,
+			final String group, final String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPage("select count(*) from config_info where group_id=? and tenant_id=?",
+			return helper.fetchPage(
+					"select count(*) from config_info where group_id=? and tenant_id=?",
 					"select ID,data_id,group_id,tenant_id,app_name,content from config_info where group_id=? and "
-							+ "tenant_id=?",
-					new Object[]{group, tenantTmp}, pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+							+ "tenant_id=?", new Object[] { group, tenantTmp }, pageNo,
+					pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1121,8 +1247,10 @@ public Page findConfigInfoByGroupAndApp(final int pageNo,
 					"select count(*) from config_info where group_id=? and tenant_id=? and app_name =?",
 					"select ID,data_id,group_id,tenant_id,app_name,content from config_info where group_id=? and "
 							+ "tenant_id=? and app_name =?",
-					new Object[]{group, tenantTmp, appName}, pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+					new Object[] { group, tenantTmp, appName }, pageNo, pageSize,
+					CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1134,8 +1262,12 @@ public Page findConfigInfoByGroupAndAdvance(final int pageNo,
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
 
-		final String appName = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("appName");
-		final String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
+		final String appName = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("appName");
+		final String configTags = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("config_tags");
 		StringBuilder sqlCount = new StringBuilder(
 				"select count(*) from config_info where group_id=? and tenant_id=? ");
 		StringBuilder sql = new StringBuilder(
@@ -1171,7 +1303,8 @@ public Page findConfigInfoByGroupAndAdvance(final int pageNo,
 				sql.append(" and a.app_name=? ");
 				paramList.add(appName);
 			}
-		} else {
+		}
+		else {
 			if (StringUtils.isNotBlank(appName)) {
 				sqlCount.append(" and app_name=? ");
 				sql.append(" and app_name=? ");
@@ -1180,9 +1313,11 @@ public Page findConfigInfoByGroupAndAdvance(final int pageNo,
 		}
 
 		try {
-			return helper.fetchPage(sqlCount.toString(), sql.toString(), paramList.toArray(), pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper
+					.fetchPage(sqlCount.toString(), sql.toString(), paramList.toArray(),
+							pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1195,30 +1330,36 @@ public Page findConfigInfoByGroupAndAdvance(final int pageNo,
 	 * @param pageSize 每页大小(必须大于0)
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findConfigInfoByApp(final int pageNo,
-			final int pageSize, final String tenant, final String appName) {
+	public Page findConfigInfoByApp(final int pageNo, final int pageSize,
+			final String tenant, final String appName) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPage("select count(*) from config_info where tenant_id like ? and app_name=?",
+			return helper.fetchPage(
+					"select count(*) from config_info where tenant_id like ? and app_name=?",
 					"select ID,data_id,group_id,tenant_id,app_name,content from config_info where tenant_id like ? and "
 							+ "app_name=?",
-					new Object[]{generateLikeArgument(tenantTmp), appName}, pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+					new Object[] { generateLikeArgument(tenantTmp), appName }, pageNo,
+					pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findConfigInfoByAdvance(final int pageNo,
-			final int pageSize, final String tenant,
-			final Map configAdvanceInfo) {
+	public Page findConfigInfoByAdvance(final int pageNo, final int pageSize,
+			final String tenant, final Map configAdvanceInfo) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		PaginationHelper helper = createPaginationHelper();
-		final String appName = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("appName");
-		final String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
-		StringBuilder sqlCount = new StringBuilder("select count(*) from config_info where tenant_id like ? ");
+		final String appName = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("appName");
+		final String configTags = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("config_tags");
+		StringBuilder sqlCount = new StringBuilder(
+				"select count(*) from config_info where tenant_id like ? ");
 		StringBuilder sql = new StringBuilder(
 				"select ID,data_id,group_id,tenant_id,app_name,content from config_info where tenant_id like ? ");
 		List paramList = new ArrayList();
@@ -1252,7 +1393,8 @@ public Page findConfigInfoByAdvance(final int pageNo,
 				sql.append(" and a.app_name=? ");
 				paramList.add(appName);
 			}
-		} else {
+		}
+		else {
 			if (StringUtils.isNotBlank(appName)) {
 				sqlCount.append(" and app_name=? ");
 				sql.append(" and app_name=? ");
@@ -1261,9 +1403,11 @@ public Page findConfigInfoByAdvance(final int pageNo,
 		}
 
 		try {
-			return helper.fetchPage(sqlCount.toString(), sql.toString(), paramList.toArray(), pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper
+					.fetchPage(sqlCount.toString(), sql.toString(), paramList.toArray(),
+							pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1281,13 +1425,13 @@ public Page findConfigInfoBaseByGroup(final int pageNo,
 			final int pageSize, final String group) {
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper
-					.fetchPage(
-							"select count(*) from config_info where group_id=? and tenant_id=?",
-							"select ID,data_id,group_id,content from config_info where group_id=? and tenant_id=?",
-							new Object[]{group, StringUtils.EMPTY}, pageNo, pageSize,
-							CONFIG_INFO_BASE_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPage(
+					"select count(*) from config_info where group_id=? and tenant_id=?",
+					"select ID,data_id,group_id,content from config_info where group_id=? and tenant_id=?",
+					new Object[] { group, StringUtils.EMPTY }, pageNo, pageSize,
+					CONFIG_INFO_BASE_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1309,7 +1453,8 @@ public int configInfoCount() {
 	 * 返回配置项个数
 	 */
 	public int configInfoCount(String tenant) {
-		String sql = " SELECT COUNT(ID) FROM config_info where tenant_id like '" + tenant + "'";
+		String sql = " SELECT COUNT(ID) FROM config_info where tenant_id like '" + tenant
+				+ "'";
 		Integer result = jt.queryForObject(sql, Integer.class);
 		if (result == null) {
 			throw new IllegalArgumentException("configInfoCount error");
@@ -1356,23 +1501,26 @@ public List getGroupIdList(int page, int pageSize) {
 	public int aggrConfigInfoCount(String dataId, String group, String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String sql = " SELECT COUNT(ID) FROM config_info_aggr WHERE data_id = ? AND group_id = ? AND tenant_id = ?";
-		Integer result = jt.queryForObject(sql, Integer.class, new Object[]{dataId, group, tenantTmp});
+		Integer result = jt.queryForObject(sql, Integer.class,
+				new Object[] { dataId, group, tenantTmp });
 		if (result == null) {
 			throw new IllegalArgumentException("aggrConfigInfoCount error");
 		}
 		return result.intValue();
 	}
 
-	public int aggrConfigInfoCountIn(String dataId, String group, String tenant, List datumIds) {
+	public int aggrConfigInfoCountIn(String dataId, String group, String tenant,
+			List datumIds) {
 		return aggrConfigInfoCount(dataId, group, tenant, datumIds, true);
 	}
 
-	public int aggrConfigInfoCountNotIn(String dataId, String group, String tenant, List datumIds) {
+	public int aggrConfigInfoCountNotIn(String dataId, String group, String tenant,
+			List datumIds) {
 		return aggrConfigInfoCount(dataId, group, tenant, datumIds, false);
 	}
 
-	public int aggrConfigInfoCount(String dataId, String group, String tenant, List datumIds,
-			boolean isIn) {
+	public int aggrConfigInfoCount(String dataId, String group, String tenant,
+			List datumIds, boolean isIn) {
 		if (datumIds == null || datumIds.isEmpty()) {
 			return 0;
 		}
@@ -1382,7 +1530,8 @@ public int aggrConfigInfoCount(String dataId, String group, String tenant, List<
 						+ "datum_id");
 		if (isIn) {
 			sql.append(" in (");
-		} else {
+		}
+		else {
 			sql.append(" not in (");
 		}
 		for (int i = 0, size = datumIds.size(); i < size; i++) {
@@ -1395,7 +1544,8 @@ public int aggrConfigInfoCount(String dataId, String group, String tenant, List<
 
 		List objectList = Lists.newArrayList(dataId, group, tenantTmp);
 		objectList.addAll(datumIds);
-		Integer result = jt.queryForObject(sql.toString(), Integer.class, objectList.toArray());
+		Integer result = jt
+				.queryForObject(sql.toString(), Integer.class, objectList.toArray());
 		if (result == null) {
 			throw new IllegalArgumentException("aggrConfigInfoCount error");
 		}
@@ -1409,23 +1559,27 @@ public int aggrConfigInfoCount(String dataId, String group, String tenant, List<
 	 * @param pageSize 每页大小(必须大于0)
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findAllConfigInfo(final int pageNo, final int pageSize, final String tenant) {
+	public Page findAllConfigInfo(final int pageNo, final int pageSize,
+			final String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String sqlCountRows = "SELECT COUNT(*) FROM config_info";
-		String sqlFetchRows = " SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5 "
-				+ " FROM (                               "
-				+ "   SELECT id FROM config_info         "
-				+ "   WHERE tenant_id like ?                  "
-				+ "   ORDER BY id LIMIT ?,?             "
-				+ " ) g, config_info t                   "
-				+ " WHERE g.id = t.id                    ";
+		String sqlFetchRows =
+				" SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5 "
+						+ " FROM (                               "
+						+ "   SELECT id FROM config_info         "
+						+ "   WHERE tenant_id like ?                  "
+						+ "   ORDER BY id LIMIT ?,?             "
+						+ " ) g, config_info t                   "
+						+ " WHERE g.id = t.id                    ";
 
 		PaginationHelper helper = createPaginationHelper();
 		try {
 			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows,
-					new Object[]{generateLikeArgument(tenantTmp), (pageNo - 1) * pageSize, pageSize},
-					pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+					new Object[] { generateLikeArgument(tenantTmp),
+							(pageNo - 1) * pageSize, pageSize }, pageNo, pageSize,
+					CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1438,7 +1592,8 @@ public Page findAllConfigInfo(final int pageNo, final int pageSize,
 	 * @param pageSize 每页大小(必须大于0)
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findAllConfigKey(final int pageNo, final int pageSize, final String tenant) {
+	public Page findAllConfigKey(final int pageNo, final int pageSize,
+			final String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String select = " SELECT data_id,group_id,app_name "
 				+ " FROM (                               "
@@ -1465,7 +1620,8 @@ public Page findAllConfigKey(final int pageNo, final int pageSize, fi
 
 		try {
 			List result = jt.query(select,
-					new Object[]{generateLikeArgument(tenantTmp), (pageNo - 1) * pageSize, pageSize},
+					new Object[] { generateLikeArgument(tenantTmp),
+							(pageNo - 1) * pageSize, pageSize },
 					// new Object[0],
 					CONFIG_KEY_ROW_MAPPER);
 
@@ -1473,9 +1629,11 @@ public Page findAllConfigKey(final int pageNo, final int pageSize, fi
 				page.getPageItems().add(item);
 			}
 			return page;
-		} catch (EmptyResultDataAccessException e) {
+		}
+		catch (EmptyResultDataAccessException e) {
 			return page;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1501,85 +1659,99 @@ public Page findAllConfigInfoBase(final int pageNo,
 
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows, new Object[]{
-					(pageNo - 1) * pageSize, pageSize}, pageNo, pageSize, CONFIG_INFO_BASE_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows,
+					new Object[] { (pageNo - 1) * pageSize, pageSize }, pageNo, pageSize,
+					CONFIG_INFO_BASE_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findAllConfigInfoForDumpAll(
-			final int pageNo, final int pageSize) {
+	public Page findAllConfigInfoForDumpAll(final int pageNo,
+			final int pageSize) {
 		String sqlCountRows = "select count(*) from config_info";
-		String sqlFetchRows = " SELECT t.id,type,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified "
-				+ " FROM (                               "
-				+ "   SELECT id FROM config_info         "
-				+ "   ORDER BY id LIMIT ?,?             "
-				+ " ) g, config_info t                   "
-				+ " WHERE g.id = t.id                    ";
+		String sqlFetchRows =
+				" SELECT t.id,type,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified "
+						+ " FROM (                               "
+						+ "   SELECT id FROM config_info         "
+						+ "   ORDER BY id LIMIT ?,?             "
+						+ " ) g, config_info t                   "
+						+ " WHERE g.id = t.id                    ";
 		PaginationHelper helper = createPaginationHelper();
 
 		List params = new ArrayList();
 
 		try {
-			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows, params.toArray(), pageNo, pageSize,
-					CONFIG_INFO_WRAPPER_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper
+					.fetchPageLimit(sqlCountRows, sqlFetchRows, params.toArray(), pageNo,
+							pageSize, CONFIG_INFO_WRAPPER_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findAllConfigInfoFragment(final long lastMaxId, final int pageSize) {
-		String select
-				= "SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type from config_info where id > ? "
-				+ "order by id asc limit ?,?";
+	public Page findAllConfigInfoFragment(final long lastMaxId,
+			final int pageSize) {
+		String select =
+				"SELECT id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,type from config_info where id > ? "
+						+ "order by id asc limit ?,?";
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPageLimit(select, new Object[]{lastMaxId, 0, pageSize}, 1, pageSize,
-					CONFIG_INFO_WRAPPER_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper
+					.fetchPageLimit(select, new Object[] { lastMaxId, 0, pageSize }, 1,
+							pageSize, CONFIG_INFO_WRAPPER_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findAllConfigInfoBetaForDumpAll(
-			final int pageNo, final int pageSize) {
+	public Page findAllConfigInfoBetaForDumpAll(final int pageNo,
+			final int pageSize) {
 		String sqlCountRows = "SELECT COUNT(*) FROM config_info_beta";
-		String sqlFetchRows = " SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,beta_ips "
-				+ " FROM (                               "
-				+ "   SELECT id FROM config_info_beta         "
-				+ "   ORDER BY id LIMIT ?,?             "
-				+ " ) g, config_info_beta t                   "
-				+ " WHERE g.id = t.id                    ";
+		String sqlFetchRows =
+				" SELECT t.id,data_id,group_id,tenant_id,app_name,content,md5,gmt_modified,beta_ips "
+						+ " FROM (                               "
+						+ "   SELECT id FROM config_info_beta         "
+						+ "   ORDER BY id LIMIT ?,?             "
+						+ " ) g, config_info_beta t                   "
+						+ " WHERE g.id = t.id                    ";
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows, new Object[]{
-					(pageNo - 1) * pageSize, pageSize}, pageNo, pageSize, CONFIG_INFO_BETA_WRAPPER_ROW_MAPPER);
+			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows,
+					new Object[] { (pageNo - 1) * pageSize, pageSize }, pageNo, pageSize,
+					CONFIG_INFO_BETA_WRAPPER_ROW_MAPPER);
 
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findAllConfigInfoTagForDumpAll(
-			final int pageNo, final int pageSize) {
+	public Page findAllConfigInfoTagForDumpAll(final int pageNo,
+			final int pageSize) {
 		String sqlCountRows = "SELECT COUNT(*) FROM config_info_tag";
-		String sqlFetchRows = " SELECT t.id,data_id,group_id,tenant_id,tag_id,app_name,content,md5,gmt_modified "
-				+ " FROM (                               "
-				+ "   SELECT id FROM config_info_tag         "
-				+ "   ORDER BY id LIMIT ?,?             "
-				+ " ) g, config_info_tag t                   "
-				+ " WHERE g.id = t.id                    ";
+		String sqlFetchRows =
+				" SELECT t.id,data_id,group_id,tenant_id,tag_id,app_name,content,md5,gmt_modified "
+						+ " FROM (                               "
+						+ "   SELECT id FROM config_info_tag         "
+						+ "   ORDER BY id LIMIT ?,?             "
+						+ " ) g, config_info_tag t                   "
+						+ " WHERE g.id = t.id                    ";
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows, new Object[]{
-					(pageNo - 1) * pageSize, pageSize}, pageNo, pageSize, CONFIG_INFO_TAG_WRAPPER_ROW_MAPPER);
+			return helper.fetchPageLimit(sqlCountRows, sqlFetchRows,
+					new Object[] { (pageNo - 1) * pageSize, pageSize }, pageNo, pageSize,
+					CONFIG_INFO_TAG_WRAPPER_ROW_MAPPER);
 
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1604,17 +1776,18 @@ public List findConfigInfoByBatch(final List dataIds,
 		}
 		List result = new ArrayList(dataIds.size());
 
-		String sqlStart
-				= "select data_id, group_id, tenant_id, app_name, content from config_info where group_id = ? and "
-				+ "tenant_id = ? and data_id in (";
+		String sqlStart =
+				"select data_id, group_id, tenant_id, app_name, content from config_info where group_id = ? and "
+						+ "tenant_id = ? and data_id in (";
 		String sqlEnd = ")";
 		StringBuilder subQuerySql = new StringBuilder();
 
 		for (int i = 0; i < dataIds.size(); i += subQueryLimit) {
 			// dataids
-			List params = new ArrayList(dataIds.subList(i, i
-					+ subQueryLimit < dataIds.size() ? i + subQueryLimit
-					: dataIds.size()));
+			List params = new ArrayList(dataIds.subList(i,
+					i + subQueryLimit < dataIds.size() ?
+							i + subQueryLimit :
+							dataIds.size()));
 
 			for (int j = 0; j < params.size(); j++) {
 				subQuerySql.append("?");
@@ -1627,9 +1800,9 @@ public List findConfigInfoByBatch(final List dataIds,
 			params.add(0, group);
 			params.add(1, tenantTmp);
 
-			List r = this.jt.query(
-					sqlStart + subQuerySql.toString() + sqlEnd,
-					params.toArray(), CONFIG_INFO_ROW_MAPPER);
+			List r = this.jt
+					.query(sqlStart + subQuerySql.toString() + sqlEnd, params.toArray(),
+							CONFIG_INFO_ROW_MAPPER);
 
 			// assert not null
 			if (r != null && r.size() > 0) {
@@ -1649,14 +1822,15 @@ public List findConfigInfoByBatch(final List dataIds,
 	 * @param tenant   支持模糊查询
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findConfigInfoLike(final int pageNo, final int pageSize, final String dataId,
-			final String group, final String tenant, final String appName,
-			final String content) {
+	public Page findConfigInfoLike(final int pageNo, final int pageSize,
+			final String dataId, final String group, final String tenant,
+			final String appName, final String content) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		if (StringUtils.isBlank(dataId) && StringUtils.isBlank(group)) {
 			if (StringUtils.isBlank(appName)) {
 				return this.findAllConfigInfo(pageNo, pageSize, tenantTmp);
-			} else {
+			}
+			else {
 				return this.findConfigInfoByApp(pageNo, pageSize, tenantTmp, appName);
 			}
 		}
@@ -1690,22 +1864,28 @@ public Page findConfigInfoLike(final int pageNo, final int pageSize,
 		}
 
 		try {
-			return helper.fetchPage(sqlCountRows + where, sqlFetchRows
-							+ where, params.toArray(), pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPage(sqlCountRows + where, sqlFetchRows + where,
+					params.toArray(), pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
-	public Page findConfigInfoLike4Page(final int pageNo, final int pageSize, final String dataId,
-			final String group, final String tenant,
+	public Page findConfigInfoLike4Page(final int pageNo, final int pageSize,
+			final String dataId, final String group, final String tenant,
 			final Map configAdvanceInfo) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
-		final String appName = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("appName");
-		final String content = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("content");
-		final String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
+		final String appName = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("appName");
+		final String content = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("content");
+		final String configTags = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("config_tags");
 		PaginationHelper helper = createPaginationHelper();
 		String sqlCountRows = "select count(*) from config_info";
 		String sqlFetchRows = "select ID,data_id,group_id,tenant_id,app_name,content from config_info";
@@ -1714,9 +1894,9 @@ public Page findConfigInfoLike4Page(final int pageNo, final int page
 		params.add(generateLikeArgument(tenantTmp));
 		if (StringUtils.isNotBlank(configTags)) {
 			sqlCountRows = "select count(*) from config_info  a left join config_tags_relation b on a.id=b.id ";
-			sqlFetchRows
-					= "select a.ID,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content from config_info  a left join "
-					+ "config_tags_relation b on a.id=b.id ";
+			sqlFetchRows =
+					"select a.ID,a.data_id,a.group_id,a.tenant_id,a.app_name,a.content from config_info  a left join "
+							+ "config_tags_relation b on a.id=b.id ";
 
 			where.append(" a.tenant_id like ? ");
 			if (!StringUtils.isBlank(dataId)) {
@@ -1746,7 +1926,8 @@ public Page findConfigInfoLike4Page(final int pageNo, final int page
 				params.add(tagArr[i]);
 			}
 			where.append(") ");
-		} else {
+		}
+		else {
 			where.append(" tenant_id like ? ");
 			if (!StringUtils.isBlank(dataId)) {
 				where.append(" and data_id like ? ");
@@ -1767,10 +1948,10 @@ public Page findConfigInfoLike4Page(final int pageNo, final int page
 		}
 
 		try {
-			return helper.fetchPage(sqlCountRows + where, sqlFetchRows
-							+ where, params.toArray(), pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPage(sqlCountRows + where, sqlFetchRows + where,
+					params.toArray(), pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1785,9 +1966,8 @@ public Page findConfigInfoLike4Page(final int pageNo, final int page
 	 * @param blacklist  是否黑名单
 	 * @return ConfigInfo对象的集合
 	 */
-	public Page findConfigInfoLike(final int pageNo,
-			final int pageSize, final ConfigKey[] configKeys,
-			final boolean blacklist) {
+	public Page findConfigInfoLike(final int pageNo, final int pageSize,
+			final ConfigKey[] configKeys, final boolean blacklist) {
 		String sqlCountRows = "select count(*) from config_info where ";
 		String sqlFetchRows = "select ID,data_id,group_id,tenant_id,app_name,content from config_info where ";
 		String where = " 1=1 ";
@@ -1805,9 +1985,8 @@ public Page findConfigInfoLike(final int pageNo,
 			String group = configInfo.getGroup();
 			String appName = configInfo.getAppName();
 
-			if (StringUtils.isBlank(dataId)
-					&& StringUtils.isBlank(group)
-					&& StringUtils.isBlank(appName)) {
+			if (StringUtils.isBlank(dataId) && StringUtils.isBlank(group) && StringUtils
+					.isBlank(appName)) {
 				break;
 			}
 
@@ -1815,7 +1994,8 @@ public Page findConfigInfoLike(final int pageNo,
 				if (isFirst) {
 					isFirst = false;
 					where += " and ";
-				} else {
+				}
+				else {
 					where += " and ";
 				}
 
@@ -1843,11 +2023,13 @@ public Page findConfigInfoLike(final int pageNo,
 					isFirstSub = false;
 				}
 				where += ") ";
-			} else {
+			}
+			else {
 				if (isFirst) {
 					isFirst = false;
 					where += " and ";
-				} else {
+				}
+				else {
 					where += " or ";
 				}
 				where += "(";
@@ -1878,10 +2060,10 @@ public Page findConfigInfoLike(final int pageNo,
 		}
 
 		try {
-			return helper.fetchPage(sqlCountRows + where, sqlFetchRows
-							+ where, params.toArray(), pageNo, pageSize,
-					CONFIG_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPage(sqlCountRows + where, sqlFetchRows + where,
+					params.toArray(), pageNo, pageSize, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1925,10 +2107,10 @@ public Page findConfigInfoBaseLike(final int pageNo,
 		}
 
 		try {
-			return helper.fetchPage(sqlCountRows + where, sqlFetchRows
-							+ where, params.toArray(), pageNo, pageSize,
-					CONFIG_INFO_BASE_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPage(sqlCountRows + where, sqlFetchRows + where,
+					params.toArray(), pageNo, pageSize, CONFIG_INFO_BASE_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -1942,22 +2124,27 @@ public Page findConfigInfoBaseLike(final int pageNo,
 	 * @param datumId
 	 * @return
 	 */
-	public ConfigInfoAggr findSingleConfigInfoAggr(String dataId, String group, String tenant, String datumId) {
+	public ConfigInfoAggr findSingleConfigInfoAggr(String dataId, String group,
+			String tenant, String datumId) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
-		String sql
-				= "SELECT id,data_id,group_id,tenant_id,datum_id,app_name,content FROM config_info_aggr WHERE data_id=? "
-				+ "AND group_id=? AND tenant_id=? AND datum_id=?";
+		String sql =
+				"SELECT id,data_id,group_id,tenant_id,datum_id,app_name,content FROM config_info_aggr WHERE data_id=? "
+						+ "AND group_id=? AND tenant_id=? AND datum_id=?";
 
 		try {
-			return this.jt.queryForObject(sql, new Object[]{dataId, group, tenantTmp, datumId},
+			return this.jt.queryForObject(sql,
+					new Object[] { dataId, group, tenantTmp, datumId },
 					CONFIG_INFO_AGGR_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) {
+		}
+		catch (EmptyResultDataAccessException e) {
 			// 是EmptyResultDataAccessException, 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			LogUtil.fatalLog.error("[db-other-error]" + e.getMessage(), e);
 			throw new RuntimeException(e);
 		}
@@ -1966,41 +2153,46 @@ public ConfigInfoAggr findSingleConfigInfoAggr(String dataId, String group, Stri
 	/**
 	 * 查找一个dataId下面的所有聚合前的数据. 保证不返回NULL.
 	 */
-	public List findConfigInfoAggr(String dataId, String group, String tenant) {
+	public List findConfigInfoAggr(String dataId, String group,
+			String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
-		String sql
-				= "SELECT data_id,group_id,tenant_id,datum_id,app_name,content FROM config_info_aggr WHERE data_id=? AND "
-				+ "group_id=? AND tenant_id=? ORDER BY datum_id";
+		String sql =
+				"SELECT data_id,group_id,tenant_id,datum_id,app_name,content FROM config_info_aggr WHERE data_id=? AND "
+						+ "group_id=? AND tenant_id=? ORDER BY datum_id";
 
 		try {
-			return this.jt.query(sql, new Object[]{dataId, group, tenantTmp},
+			return this.jt.query(sql, new Object[] { dataId, group, tenantTmp },
 					CONFIG_INFO_AGGR_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
-		} catch (EmptyResultDataAccessException e) {
+		}
+		catch (EmptyResultDataAccessException e) {
 			return Collections.emptyList();
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			LogUtil.fatalLog.error("[db-other-error]" + e.getMessage(), e);
 			throw new RuntimeException(e);
 		}
 	}
 
-	public Page findConfigInfoAggrByPage(String dataId, String group, String tenant, final int pageNo,
-			final int pageSize) {
+	public Page findConfigInfoAggrByPage(String dataId, String group,
+			String tenant, final int pageNo, final int pageSize) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
-		String sqlCountRows
-				= "SELECT COUNT(*) FROM config_info_aggr WHERE data_id = ? and group_id = ? and tenant_id = ?";
-		String sqlFetchRows
-				= "select data_id,group_id,tenant_id,datum_id,app_name,content from config_info_aggr where data_id=? and "
-				+ "group_id=? and tenant_id=? order by datum_id limit ?,?";
+		String sqlCountRows = "SELECT COUNT(*) FROM config_info_aggr WHERE data_id = ? and group_id = ? and tenant_id = ?";
+		String sqlFetchRows =
+				"select data_id,group_id,tenant_id,datum_id,app_name,content from config_info_aggr where data_id=? and "
+						+ "group_id=? and tenant_id=? order by datum_id limit ?,?";
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPageLimit(sqlCountRows, new Object[]{dataId, group, tenantTmp}, sqlFetchRows,
-					new Object[]{dataId, group, tenantTmp, (pageNo - 1) * pageSize, pageSize},
-					pageNo, pageSize, CONFIG_INFO_AGGR_ROW_MAPPER);
+			return helper.fetchPageLimit(sqlCountRows,
+					new Object[] { dataId, group, tenantTmp }, sqlFetchRows,
+					new Object[] { dataId, group, tenantTmp, (pageNo - 1) * pageSize,
+							pageSize }, pageNo, pageSize, CONFIG_INFO_AGGR_ROW_MAPPER);
 
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2015,12 +2207,11 @@ public Page findConfigInfoAggrByPage(String dataId, String group
 	 * @param blacklist  黑名单
 	 * @return
 	 */
-	public Page findConfigInfoAggrLike(final int pageNo, final int pageSize, ConfigKey[] configKeys,
-			boolean blacklist) {
+	public Page findConfigInfoAggrLike(final int pageNo,
+			final int pageSize, ConfigKey[] configKeys, boolean blacklist) {
 
 		String sqlCountRows = "select count(*) from config_info_aggr where ";
-		String sqlFetchRows
-				= "select data_id,group_id,tenant_id,datum_id,app_name,content from config_info_aggr where ";
+		String sqlFetchRows = "select data_id,group_id,tenant_id,datum_id,app_name,content from config_info_aggr where ";
 		String where = " 1=1 ";
 		// 白名单,请同步条件为空,则没有符合条件的配置
 		if (configKeys.length == 0 && blacklist == false) {
@@ -2036,16 +2227,16 @@ public Page findConfigInfoAggrLike(final int pageNo, final int p
 			String dataId = configInfoAggr.getDataId();
 			String group = configInfoAggr.getGroup();
 			String appName = configInfoAggr.getAppName();
-			if (StringUtils.isBlank(dataId)
-					&& StringUtils.isBlank(group)
-					&& StringUtils.isBlank(appName)) {
+			if (StringUtils.isBlank(dataId) && StringUtils.isBlank(group) && StringUtils
+					.isBlank(appName)) {
 				break;
 			}
 			if (blacklist) {
 				if (isFirst) {
 					isFirst = false;
 					where += " and ";
-				} else {
+				}
+				else {
 					where += " and ";
 				}
 
@@ -2073,11 +2264,13 @@ public Page findConfigInfoAggrLike(final int pageNo, final int p
 					isFirstSub = false;
 				}
 				where += ") ";
-			} else {
+			}
+			else {
 				if (isFirst) {
 					isFirst = false;
 					where += " and ";
-				} else {
+				}
+				else {
 					where += " or ";
 				}
 				where += "(";
@@ -2108,11 +2301,13 @@ public Page findConfigInfoAggrLike(final int pageNo, final int p
 		}
 
 		try {
-			Page result = helper.fetchPage(sqlCountRows
-							+ where, sqlFetchRows + where, params.toArray(), pageNo,
-					pageSize, CONFIG_INFO_AGGR_ROW_MAPPER);
+			Page result = helper
+					.fetchPage(sqlCountRows + where, sqlFetchRows + where,
+							params.toArray(), pageNo, pageSize,
+							CONFIG_INFO_AGGR_ROW_MAPPER);
 			return result;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2125,14 +2320,16 @@ public List findAllAggrGroup() {
 		String sql = "SELECT DISTINCT data_id, group_id, tenant_id FROM config_info_aggr";
 
 		try {
-			return jt.query(sql, new Object[]{},
-					CONFIG_INFO_CHANGED_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return jt.query(sql, new Object[] {}, CONFIG_INFO_CHANGED_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
-		} catch (EmptyResultDataAccessException e) {
+		}
+		catch (EmptyResultDataAccessException e) {
 			return null;
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			LogUtil.fatalLog.error("[db-other-error]" + e.getMessage(), e);
 			throw new RuntimeException(e);
 		}
@@ -2151,13 +2348,16 @@ public List findDatumIdByContent(String dataId, String groupId,
 		String sql = "SELECT datum_id FROM config_info_aggr WHERE data_id = ? AND group_id = ? AND content = ? ";
 
 		try {
-			return this.jt.queryForList(sql, new Object[]{dataId, groupId,
-					content}, String.class);
-		} catch (EmptyResultDataAccessException e) {
+			return this.jt.queryForList(sql, new Object[] { dataId, groupId, content },
+					String.class);
+		}
+		catch (EmptyResultDataAccessException e) {
 			return null;
-		} catch (IncorrectResultSizeDataAccessException e) {
+		}
+		catch (IncorrectResultSizeDataAccessException e) {
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2166,13 +2366,13 @@ public List findDatumIdByContent(String dataId, String groupId,
 	public List findChangeConfig(final Timestamp startTime,
 			final Timestamp endTime) {
 		try {
-			List> list = jt
-					.queryForList(
-							"SELECT data_id, group_id, tenant_id, app_name, content, gmt_modified FROM config_info WHERE "
-									+ "gmt_modified >=? AND gmt_modified <= ?",
-							new Object[]{startTime, endTime});
+			List> list = jt.queryForList(
+					"SELECT data_id, group_id, tenant_id, app_name, content, gmt_modified FROM config_info WHERE "
+							+ "gmt_modified >=? AND gmt_modified <= ?",
+					new Object[] { startTime, endTime });
 			return convertChangeConfig(list);
-		} catch (DataAccessException e) {
+		}
+		catch (DataAccessException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2190,14 +2390,13 @@ public List findChangeConfig(final Timestamp startTime,
 	 * @param pageSize  pageSize
 	 * @return
 	 */
-	public Page findChangeConfig(final String dataId, final String group, final String tenant,
-			final String appName, final Timestamp startTime,
-			final Timestamp endTime, final int pageNo,
+	public Page findChangeConfig(final String dataId,
+			final String group, final String tenant, final String appName,
+			final Timestamp startTime, final Timestamp endTime, final int pageNo,
 			final int pageSize, final long lastMaxId) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String sqlCountRows = "select count(*) from config_info where ";
-		String sqlFetchRows
-				= "select id,data_id,group_id,tenant_id,app_name,content,type,md5,gmt_modified from config_info where ";
+		String sqlFetchRows = "select id,data_id,group_id,tenant_id,app_name,content,type,md5,gmt_modified from config_info where ";
 		String where = " 1=1 ";
 		List params = new ArrayList();
 
@@ -2230,9 +2429,11 @@ public Page findChangeConfig(final String dataId, final Strin
 
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			return helper.fetchPage(sqlCountRows + where, sqlFetchRows + where, params.toArray(), pageNo, pageSize,
-					lastMaxId, CONFIG_INFO_WRAPPER_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return helper.fetchPage(sqlCountRows + where, sqlFetchRows + where,
+					params.toArray(), pageNo, pageSize, lastMaxId,
+					CONFIG_INFO_WRAPPER_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2242,11 +2443,12 @@ public List findDeletedConfig(final Timestamp startTime,
 			final Timestamp endTime) {
 		try {
 			List> list = jt.queryForList(
-							"SELECT DISTINCT data_id, group_id, tenant_id FROM his_config_info WHERE op_type = 'D' AND "
-									+ "gmt_modified >=? AND gmt_modified <= ?",
-							new Object[]{startTime, endTime});
+					"SELECT DISTINCT data_id, group_id, tenant_id FROM his_config_info WHERE op_type = 'D' AND "
+							+ "gmt_modified >=? AND gmt_modified <= ?",
+					new Object[] { startTime, endTime });
 			return convertDeletedConfig(list);
-		} catch (DataAccessException e) {
+		}
+		catch (DataAccessException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2262,33 +2464,44 @@ public List findDeletedConfig(final Timestamp startTime,
 	 * @param configAdvanceInfo advance info
 	 * @return excute sql result
 	 */
-	public long addConfigInfoAtomic(final long configId, final String srcIp, final String srcUser, final ConfigInfo configInfo,
-			final Timestamp time,
+	public long addConfigInfoAtomic(final long configId, final String srcIp,
+			final String srcUser, final ConfigInfo configInfo, final Timestamp time,
 			Map configAdvanceInfo) {
-		final String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY
-				: configInfo.getAppName();
-		final String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY
-				: configInfo.getTenant();
-
-		final String desc = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("desc");
-		final String use = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("use");
-		final String effect = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("effect");
-		final String type = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("type");
-		final String schema = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("schema");
+		final String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
+				StringUtils.EMPTY :
+				configInfo.getAppName();
+		final String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+				StringUtils.EMPTY :
+				configInfo.getTenant();
+
+		final String desc =
+				configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("desc");
+		final String use =
+				configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("use");
+		final String effect = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("effect");
+		final String type =
+				configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("type");
+		final String schema = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("schema");
 
 		final String md5Tmp = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 
 		KeyHolder keyHolder = new GeneratedKeyHolder();
 
-		final String sql
-				= "INSERT INTO config_info(data_id,group_id,tenant_id,app_name,content,md5,src_ip,src_user,gmt_create,"
-				+ "gmt_modified,c_desc,c_use,effect,type,c_schema) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+		final String sql =
+				"INSERT INTO config_info(data_id,group_id,tenant_id,app_name,content,md5,src_ip,src_user,gmt_create,"
+						+ "gmt_modified,c_desc,c_use,effect,type,c_schema) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
 
 		try {
 			jt.update(new PreparedStatementCreator() {
 				@Override
-				public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
-					PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
+				public PreparedStatement createPreparedStatement(Connection connection)
+						throws SQLException {
+					PreparedStatement ps = connection
+							.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
 					ps.setString(1, configInfo.getDataId());
 					ps.setString(2, configInfo.getGroup());
 					ps.setString(3, tenantTmp);
@@ -2312,7 +2525,8 @@ public PreparedStatement createPreparedStatement(Connection connection) throws S
 				throw new IllegalArgumentException("insert config_info fail");
 			}
 			return nu.longValue();
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2327,8 +2541,8 @@ public PreparedStatement createPreparedStatement(Connection connection) throws S
 	 * @param group      group
 	 * @param tenant     tenant
 	 */
-	public void addConfigTagsRelation(long configId, String configTags, String dataId, String group,
-			String tenant) {
+	public void addConfigTagsRelation(long configId, String configTags, String dataId,
+			String group, String tenant) {
 		if (StringUtils.isNotBlank(configTags)) {
 			String[] tagArr = configTags.split(",");
 			for (int i = 0; i < tagArr.length; i++) {
@@ -2337,12 +2551,14 @@ public void addConfigTagsRelation(long configId, String configTags, String dataI
 		}
 	}
 
-	public void addConfigTagRelationAtomic(long configId, String tagName, String dataId, String group, String tenant) {
+	public void addConfigTagRelationAtomic(long configId, String tagName, String dataId,
+			String group, String tenant) {
 		try {
 			jt.update(
 					"INSERT INTO config_tags_relation(id,tag_name,tag_type,data_id,group_id,tenant_id) VALUES(?,?,?,?,?,?)",
 					configId, tagName, null, dataId, group, tenant);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2351,7 +2567,8 @@ public void addConfigTagRelationAtomic(long configId, String tagName, String dat
 	public void removeTagByIdAtomic(long id) {
 		try {
 			jt.update("DELETE FROM config_tags_relation WHERE id=?", id);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2360,12 +2577,15 @@ public void removeTagByIdAtomic(long id) {
 	public List getConfigTagsByTenant(String tenant) {
 		String sql = "SELECT tag_name FROM config_tags_relation WHERE tenant_id = ? ";
 		try {
-			return jt.queryForList(sql, new Object[]{tenant}, String.class);
-		} catch (EmptyResultDataAccessException e) {
+			return jt.queryForList(sql, new Object[] { tenant }, String.class);
+		}
+		catch (EmptyResultDataAccessException e) {
 			return null;
-		} catch (IncorrectResultSizeDataAccessException e) {
+		}
+		catch (IncorrectResultSizeDataAccessException e) {
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2374,12 +2594,16 @@ public List getConfigTagsByTenant(String tenant) {
 	public List selectTagByConfig(String dataId, String group, String tenant) {
 		String sql = "SELECT tag_name FROM config_tags_relation WHERE data_id=? AND group_id=? AND tenant_id = ? ";
 		try {
-			return jt.queryForList(sql, new Object[]{dataId, group, tenant}, String.class);
-		} catch (EmptyResultDataAccessException e) {
+			return jt.queryForList(sql, new Object[] { dataId, group, tenant },
+					String.class);
+		}
+		catch (EmptyResultDataAccessException e) {
 			return null;
-		} catch (IncorrectResultSizeDataAccessException e) {
+		}
+		catch (IncorrectResultSizeDataAccessException e) {
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2394,28 +2618,29 @@ public List selectTagByConfig(String dataId, String group, String tenant
 	 * @param srcIp   ip
 	 * @param srcUser user
 	 */
-	public void removeConfigInfoAtomic(final String dataId, final String group, final String tenant,
-			final String srcIp,
-			final String srcUser) {
+	public void removeConfigInfoAtomic(final String dataId, final String group,
+			final String tenant, final String srcIp, final String srcUser) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
-			jt.update("DELETE FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?", dataId, group,
-					tenantTmp);
-		} catch (CannotGetJdbcConnectionException e) {
+			jt.update(
+					"DELETE FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?",
+					dataId, group, tenantTmp);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
 	/**
+	 * @return void
 	 * @author klw
 	 * @Description: Delete configuration; database atomic operation, minimum SQL action, no business encapsulation
 	 * @Date 2019/7/5 16:39
 	 * @Param [id]
-	 * @return void
 	 */
 	public void removeConfigInfoByIdsAtomic(final String ids) {
-		if(StringUtils.isBlank(ids)){
+		if (StringUtils.isBlank(ids)) {
 			return;
 		}
 		StringBuilder sql = new StringBuilder(SQL_DELETE_CONFIG_INFO_BY_IDS);
@@ -2432,7 +2657,8 @@ public void removeConfigInfoByIdsAtomic(final String ids) {
 		sql.append(") ");
 		try {
 			jt.update(sql.toString(), paramList.toArray());
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2448,19 +2674,23 @@ public void removeConfigInfoByIdsAtomic(final String ids) {
 	 * @param srcIp   ip
 	 * @param srcUser user
 	 */
-	public void removeConfigInfoTag(final String dataId, final String group, final String tenant, final String tag,
-			final String srcIp,
+	public void removeConfigInfoTag(final String dataId, final String group,
+			final String tenant, final String tag, final String srcIp,
 			final String srcUser) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		String tagTmp = StringUtils.isBlank(tag) ? StringUtils.EMPTY : tag;
 		try {
-			jt.update("DELETE FROM config_info_tag WHERE data_id=? AND group_id=? AND tenant_id=? AND tag_id=?", dataId,
-					group,
-					tenantTmp, tagTmp);
-		} catch (CannotGetJdbcConnectionException e) {
+			jt.update(
+					"DELETE FROM config_info_tag WHERE data_id=? AND group_id=? AND tenant_id=? AND tag_id=?",
+					dataId, group, tenantTmp, tagTmp);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
+		EventDispatcher.fireEvent(
+				new ConfigDataChangeEvent(false, dataId, group, tenant, tag,
+						System.currentTimeMillis()));
 	}
 
 	/**
@@ -2472,23 +2702,37 @@ public void removeConfigInfoTag(final String dataId, final String group, final S
 	 * @param time              time
 	 * @param configAdvanceInfo advance info
 	 */
-	public void updateConfigInfoAtomic(final ConfigInfo configInfo, final String srcIp, final String srcUser,
-			final Timestamp time, Map configAdvanceInfo) {
-		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY : configInfo.getAppName();
-		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
+	public void updateConfigInfoAtomic(final ConfigInfo configInfo, final String srcIp,
+			final String srcUser, final Timestamp time,
+			Map configAdvanceInfo) {
+		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
+				StringUtils.EMPTY :
+				configInfo.getAppName();
+		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+				StringUtils.EMPTY :
+				configInfo.getTenant();
 		final String md5Tmp = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
-		String desc = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("desc");
-		String use = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("use");
-		String effect = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("effect");
-		String type = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("type");
-		String schema = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("schema");
+		String desc =
+				configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("desc");
+		String use =
+				configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("use");
+		String effect = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("effect");
+		String type =
+				configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("type");
+		String schema = configAdvanceInfo == null ?
+				null :
+				(String) configAdvanceInfo.get("schema");
 
 		try {
 			jt.update(
 					"UPDATE config_info SET content=?, md5 = ?, src_ip=?,src_user=?,gmt_modified=?,app_name=?,c_desc=?,c_use=?,effect=?,type=?,c_schema=? WHERE data_id=? AND group_id=? AND tenant_id=?",
-					configInfo.getContent(), md5Tmp, srcIp, srcUser, time, appNameTmp, desc, use, effect, type, schema,
-					configInfo.getDataId(), configInfo.getGroup(), tenantTmp);
-		} catch (CannotGetJdbcConnectionException e) {
+					configInfo.getContent(), md5Tmp, srcIp, srcUser, time, appNameTmp,
+					desc, use, effect, type, schema, configInfo.getDataId(),
+					configInfo.getGroup(), tenantTmp);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2502,29 +2746,32 @@ public void updateConfigInfoAtomic(final ConfigInfo configInfo, final String src
 	 * @param tenant tenant
 	 * @return config info
 	 */
-	public ConfigInfo findConfigInfo(final String dataId, final String group, final String tenant) {
+	public ConfigInfo findConfigInfo(final String dataId, final String group,
+			final String tenant) {
 		final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
 			return this.jt.queryForObject(
 					"SELECT ID,data_id,group_id,tenant_id,app_name,content,md5,type FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?",
-					new Object[] {dataId, group, tenantTmp}, CONFIG_INFO_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+					new Object[] { dataId, group, tenantTmp }, CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
 	/**
+	 * @return java.util.List
 	 * @author klw
 	 * @Description: find ConfigInfo by ids
 	 * @Date 2019/7/5 16:37
 	 * @Param [ids]
-	 * @return java.util.List
 	 */
 	public List findConfigInfosByIds(final String ids) {
-		if(StringUtils.isBlank(ids)){
+		if (StringUtils.isBlank(ids)) {
 			return null;
 		}
 		StringBuilder sql = new StringBuilder(SQL_FIND_CONFIG_INFO_BY_IDS);
@@ -2540,10 +2787,13 @@ public List findConfigInfosByIds(final String ids) {
 		}
 		sql.append(") ");
 		try {
-			return this.jt.query(sql.toString(), paramList.toArray(), CONFIG_INFO_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+			return this.jt
+					.query(sql.toString(), paramList.toArray(), CONFIG_INFO_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2557,28 +2807,33 @@ public List findConfigInfosByIds(final String ids) {
 	 * @param tenant tenant
 	 * @return advance info
 	 */
-	public ConfigAdvanceInfo findConfigAdvanceInfo(final String dataId, final String group, final String tenant) {
+	public ConfigAdvanceInfo findConfigAdvanceInfo(final String dataId,
+			final String group, final String tenant) {
 		final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
 			List configTagList = this.selectTagByConfig(dataId, group, tenant);
 			ConfigAdvanceInfo configAdvance = this.jt.queryForObject(
 					"SELECT gmt_create,gmt_modified,src_user,src_ip,c_desc,c_use,effect,type,c_schema FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?",
-					new Object[]{dataId, group, tenantTmp}, CONFIG_ADVANCE_INFO_ROW_MAPPER);
+					new Object[] { dataId, group, tenantTmp },
+					CONFIG_ADVANCE_INFO_ROW_MAPPER);
 			if (configTagList != null && !configTagList.isEmpty()) {
 				StringBuilder configTagsTmp = new StringBuilder();
 				for (String configTag : configTagList) {
 					if (configTagsTmp.length() == 0) {
 						configTagsTmp.append(configTag);
-					} else {
+					}
+					else {
 						configTagsTmp.append(",").append(configTag);
 					}
 				}
 				configAdvance.setConfigTags(configTagsTmp.toString());
 			}
 			return configAdvance;
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2592,28 +2847,33 @@ public ConfigAdvanceInfo findConfigAdvanceInfo(final String dataId, final String
 	 * @param tenant tenant
 	 * @return advance info
 	 */
-	public ConfigAllInfo findConfigAllInfo(final String dataId, final String group, final String tenant) {
+	public ConfigAllInfo findConfigAllInfo(final String dataId, final String group,
+			final String tenant) {
 		final String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
 			List configTagList = this.selectTagByConfig(dataId, group, tenant);
 			ConfigAllInfo configAdvance = this.jt.queryForObject(
 					"SELECT ID,data_id,group_id,tenant_id,app_name,content,md5,gmt_create,gmt_modified,src_user,src_ip,c_desc,c_use,effect,type,c_schema FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?",
-					new Object[]{dataId, group, tenantTmp}, CONFIG_ALL_INFO_ROW_MAPPER);
+					new Object[] { dataId, group, tenantTmp },
+					CONFIG_ALL_INFO_ROW_MAPPER);
 			if (configTagList != null && !configTagList.isEmpty()) {
 				StringBuilder configTagsTmp = new StringBuilder();
 				for (String configTag : configTagList) {
 					if (configTagsTmp.length() == 0) {
 						configTagsTmp.append(configTag);
-					} else {
+					}
+					else {
 						configTagsTmp.append(",").append(configTag);
 					}
 				}
 				configAdvance.setConfigTags(configTagsTmp.toString());
 			}
 			return configAdvance;
-		} catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
+		}
+		catch (EmptyResultDataAccessException e) { // 表明数据不存在, 返回null
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2629,17 +2889,23 @@ public ConfigAllInfo findConfigAllInfo(final String dataId, final String group,
 	 * @param time       time
 	 * @param ops        ops type
 	 */
-	public void insertConfigHistoryAtomic(long id, ConfigInfo configInfo, String srcIp, String srcUser,
-			final Timestamp time, String ops) {
-		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY : configInfo.getAppName();
-		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
+	public void insertConfigHistoryAtomic(long id, ConfigInfo configInfo, String srcIp,
+			String srcUser, final Timestamp time, String ops) {
+		String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ?
+				StringUtils.EMPTY :
+				configInfo.getAppName();
+		String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ?
+				StringUtils.EMPTY :
+				configInfo.getTenant();
 		final String md5Tmp = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
 		try {
 			jt.update(
 					"INSERT INTO his_config_info (id,data_id,group_id,tenant_id,app_name,content,md5,src_ip,src_user,gmt_modified,op_type) VALUES(?,?,?,?,?,?,?,?,?,?,?)",
-					id, configInfo.getDataId(), configInfo.getGroup(), tenantTmp, appNameTmp, configInfo.getContent(),
-					md5Tmp, srcIp, srcUser, time, ops);
-		} catch (DataAccessException e) {
+					id, configInfo.getDataId(), configInfo.getGroup(), tenantTmp,
+					appNameTmp, configInfo.getContent(), md5Tmp, srcIp, srcUser, time,
+					ops);
+		}
+		catch (DataAccessException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2655,22 +2921,22 @@ public void insertConfigHistoryAtomic(long id, ConfigInfo configInfo, String src
 	 * @param pageSize size
 	 * @return history info
 	 */
-	public Page findConfigHistory(String dataId, String group, String tenant, int pageNo,
-			int pageSize) {
+	public Page findConfigHistory(String dataId, String group,
+			String tenant, int pageNo, int pageSize) {
 		PaginationHelper helper = createPaginationHelper();
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
-		String sqlCountRows
-				= "select count(*) from his_config_info where data_id = ? and group_id = ? and tenant_id = ?";
-		String sqlFetchRows
-				= "select nid,data_id,group_id,tenant_id,app_name,src_ip,op_type,gmt_create,gmt_modified from his_config_info where data_id = ? and group_id = ? and tenant_id = ? order by nid desc";
+		String sqlCountRows = "select count(*) from his_config_info where data_id = ? and group_id = ? and tenant_id = ?";
+		String sqlFetchRows = "select nid,data_id,group_id,tenant_id,app_name,src_ip,op_type,gmt_create,gmt_modified from his_config_info where data_id = ? and group_id = ? and tenant_id = ? order by nid desc";
 
 		Page page = null;
 		try {
-			page = helper.fetchPage(sqlCountRows, sqlFetchRows, new Object[]{dataId, group, tenantTmp},
-					pageNo,
-					pageSize, HISTORY_LIST_ROW_MAPPER);
-		} catch (DataAccessException e) {
-			LogUtil.fatalLog.error("[list-config-history] error, dataId:{}, group:{}", new Object[]{dataId, group}, e);
+			page = helper.fetchPage(sqlCountRows, sqlFetchRows,
+					new Object[] { dataId, group, tenantTmp }, pageNo, pageSize,
+					HISTORY_LIST_ROW_MAPPER);
+		}
+		catch (DataAccessException e) {
+			LogUtil.fatalLog.error("[list-config-history] error, dataId:{}, group:{}",
+					new Object[] { dataId, group }, e);
 			throw e;
 		}
 		return page;
@@ -2684,14 +2950,15 @@ public Page findConfigHistory(String dataId, String group, St
 	 * @param appName appName
 	 * @param date    date
 	 */
-	public void addConfigSubAtomic(final String dataId, final String group, final String appName,
-			final Timestamp date) {
+	public void addConfigSubAtomic(final String dataId, final String group,
+			final String appName, final Timestamp date) {
 		final String appNameTmp = appName == null ? "" : appName;
 		try {
 			jt.update(
 					"INSERT INTO app_configdata_relation_subs(data_id,group_id,app_name,gmt_modified) VALUES(?,?,?,?)",
 					dataId, group, appNameTmp, date);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2705,28 +2972,32 @@ public void addConfigSubAtomic(final String dataId, final String group, final St
 	 * @param appName app name
 	 * @param time    time
 	 */
-	public void updateConfigSubAtomic(final String dataId, final String group, final String appName,
-			final Timestamp time) {
+	public void updateConfigSubAtomic(final String dataId, final String group,
+			final String appName, final Timestamp time) {
 		final String appNameTmp = appName == null ? "" : appName;
 		try {
 			jt.update(
 					"UPDATE app_configdata_relation_subs SET gmt_modified=? WHERE data_id=? AND group_id=? AND app_name=?",
 					time, dataId, group, appNameTmp);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
 	}
 
 	public ConfigHistoryInfo detailConfigHistory(Long nid) {
-		String sqlFetchRows
-				= "SELECT nid,data_id,group_id,tenant_id,app_name,content,md5,src_user,src_ip,op_type,gmt_create,gmt_modified FROM his_config_info WHERE nid = ?";
+		String sqlFetchRows = "SELECT nid,data_id,group_id,tenant_id,app_name,content,md5,src_user,src_ip,op_type,gmt_create,gmt_modified FROM his_config_info WHERE nid = ?";
 		try {
-			ConfigHistoryInfo historyInfo = jt.queryForObject(sqlFetchRows, new Object[]{nid},
-					HISTORY_DETAIL_ROW_MAPPER);
+			ConfigHistoryInfo historyInfo = jt
+					.queryForObject(sqlFetchRows, new Object[] { nid },
+							HISTORY_DETAIL_ROW_MAPPER);
 			return historyInfo;
-		} catch (DataAccessException e) {
-			LogUtil.fatalLog.error("[list-config-history] error, nid:{}", new Object[]{nid}, e);
+		}
+		catch (DataAccessException e) {
+			LogUtil.fatalLog
+					.error("[list-config-history] error, nid:{}", new Object[] { nid },
+							e);
 			throw e;
 		}
 	}
@@ -2740,13 +3011,14 @@ public ConfigHistoryInfo detailConfigHistory(Long nid) {
 	 * @param tenantDesc tenant description
 	 * @param time       time
 	 */
-	public void insertTenantInfoAtomic(String kp, String tenantId, String tenantName, String tenantDesc,
-			String createResoure, final long time) {
+	public void insertTenantInfoAtomic(String kp, String tenantId, String tenantName,
+			String tenantDesc, String createResoure, final long time) {
 		try {
 			jt.update(
 					"INSERT INTO tenant_info(kp,tenant_id,tenant_name,tenant_desc,create_source,gmt_create,gmt_modified) VALUES(?,?,?,?,?,?,?)",
 					kp, tenantId, tenantName, tenantDesc, createResoure, time, time);
-		} catch (DataAccessException e) {
+		}
+		catch (DataAccessException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2760,12 +3032,14 @@ public void insertTenantInfoAtomic(String kp, String tenantId, String tenantName
 	 * @param tenantName tenant name
 	 * @param tenantDesc tenant description
 	 */
-	public void updateTenantNameAtomic(String kp, String tenantId, String tenantName, String tenantDesc) {
+	public void updateTenantNameAtomic(String kp, String tenantId, String tenantName,
+			String tenantDesc) {
 		try {
 			jt.update(
 					"UPDATE tenant_info SET tenant_name = ?, tenant_desc = ?, gmt_modified= ? WHERE kp=? AND tenant_id=?",
 					tenantName, tenantDesc, System.currentTimeMillis(), kp, tenantId);
-		} catch (DataAccessException e) {
+		}
+		catch (DataAccessException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2774,13 +3048,16 @@ public void updateTenantNameAtomic(String kp, String tenantId, String tenantName
 	public List findTenantByKp(String kp) {
 		String sql = "SELECT tenant_id,tenant_name,tenant_desc FROM tenant_info WHERE kp=?";
 		try {
-			return this.jt.query(sql, new Object[]{kp}, TENANT_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return this.jt.query(sql, new Object[] { kp }, TENANT_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
-		} catch (EmptyResultDataAccessException e) {
+		}
+		catch (EmptyResultDataAccessException e) {
 			return Collections.emptyList();
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			LogUtil.fatalLog.error("[db-other-error]" + e.getMessage(), e);
 			throw new RuntimeException(e);
 		}
@@ -2789,13 +3066,17 @@ public List findTenantByKp(String kp) {
 	public TenantInfo findTenantByKp(String kp, String tenantId) {
 		String sql = "SELECT tenant_id,tenant_name,tenant_desc FROM tenant_info WHERE kp=? AND tenant_id=?";
 		try {
-			return jt.queryForObject(sql, new Object[]{kp, tenantId}, TENANT_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return jt.queryForObject(sql, new Object[] { kp, tenantId },
+					TENANT_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
-		} catch (EmptyResultDataAccessException e) {
+		}
+		catch (EmptyResultDataAccessException e) {
 			return null;
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			LogUtil.fatalLog.error("[db-other-error]" + e.getMessage(), e);
 			throw new RuntimeException(e);
 		}
@@ -2804,7 +3085,8 @@ public TenantInfo findTenantByKp(String kp, String tenantId) {
 	public void removeTenantInfoAtomic(final String kp, final String tenantId) {
 		try {
 			jt.update("DELETE FROM tenant_info WHERE kp=? AND tenant_id=?", kp, tenantId);
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2825,8 +3107,7 @@ public List convertDeletedConfig(List> list) {
 		return configs;
 	}
 
-	public List convertChangeConfig(
-			List> list) {
+	public List convertChangeConfig(List> list) {
 		List configs = new ArrayList();
 		for (Map map : list) {
 			String dataId = (String) map.get("data_id");
@@ -2856,7 +3137,8 @@ public List listAllGroupKeyMd5() {
 		int pageCount = (int) Math.ceil(totalCount * 1.0 / pageSize);
 		List allConfigInfo = new ArrayList();
 		for (int pageNo = 1; pageNo <= pageCount; pageNo++) {
-			List configInfoList = listGroupKeyMd5ByPage(pageNo, pageSize);
+			List configInfoList = listGroupKeyMd5ByPage(pageNo,
+					pageSize);
 			allConfigInfo.addAll(configInfoList);
 		}
 		return allConfigInfo;
@@ -2864,15 +3146,17 @@ public List listAllGroupKeyMd5() {
 
 	public List listGroupKeyMd5ByPage(int pageNo, int pageSize) {
 		String sqlCountRows = " SELECT COUNT(*) FROM config_info ";
-		String sqlFetchRows
-				= " SELECT t.id,data_id,group_id,tenant_id,app_name,md5,type,gmt_modified FROM ( SELECT id FROM config_info ORDER BY id LIMIT ?,?  ) g, config_info t WHERE g.id = t.id";
+		String sqlFetchRows = " SELECT t.id,data_id,group_id,tenant_id,app_name,md5,type,gmt_modified FROM ( SELECT id FROM config_info ORDER BY id LIMIT ?,?  ) g, config_info t WHERE g.id = t.id";
 		PaginationHelper helper = createPaginationHelper();
 		try {
-			Page page = helper.fetchPageLimit(sqlCountRows, sqlFetchRows, new Object[]{
-					(pageNo - 1) * pageSize, pageSize}, pageNo, pageSize, CONFIG_INFO_WRAPPER_ROW_MAPPER);
+			Page page = helper
+					.fetchPageLimit(sqlCountRows, sqlFetchRows,
+							new Object[] { (pageNo - 1) * pageSize, pageSize }, pageNo,
+							pageSize, CONFIG_INFO_WRAPPER_ROW_MAPPER);
 
 			return page.getPageItems();
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2883,21 +3167,25 @@ public String generateLikeArgument(String s) {
 		String sqlLikePercentSign = "%";
 		if (s.contains(PATTERN_STR)) {
 			return s.replaceAll(fuzzySearchSign, sqlLikePercentSign);
-		} else {
+		}
+		else {
 			return s;
 		}
 	}
 
-	public ConfigInfoWrapper queryConfigInfo(final String dataId, final String group, final String tenant) {
+	public ConfigInfoWrapper queryConfigInfo(final String dataId, final String group,
+			final String tenant) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		try {
-			return this.jt
-					.queryForObject(
-							"SELECT ID,data_id,group_id,tenant_id,app_name,content,type,gmt_modified,md5 FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?",
-							new Object[]{dataId, group, tenantTmp}, CONFIG_INFO_WRAPPER_ROW_MAPPER);
-		} catch (EmptyResultDataAccessException e) {
+			return this.jt.queryForObject(
+					"SELECT ID,data_id,group_id,tenant_id,app_name,content,type,gmt_modified,md5 FROM config_info WHERE data_id=? AND group_id=? AND tenant_id=?",
+					new Object[] { dataId, group, tenantTmp },
+					CONFIG_INFO_WRAPPER_ROW_MAPPER);
+		}
+		catch (EmptyResultDataAccessException e) {
 			return null;
-		} catch (CannotGetJdbcConnectionException e) {
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -2908,7 +3196,8 @@ public boolean isExistTable(String tableName) {
 		try {
 			jt.queryForObject(sql, Integer.class);
 			return true;
-		} catch (Throwable e) {
+		}
+		catch (Throwable e) {
 			return false;
 		}
 	}
@@ -2920,8 +3209,8 @@ public Boolean completeMd5() {
 		int pageCount = (int) Math.ceil(rowCount * 1.0 / perPageSize);
 		int actualRowCount = 0;
 		for (int pageNo = 1; pageNo <= pageCount; pageNo++) {
-			Page page = findAllConfigInfoForDumpAll(
-					pageNo, perPageSize);
+			Page page = findAllConfigInfoForDumpAll(pageNo,
+					perPageSize);
 			if (page != null) {
 				for (ConfigInfoWrapper cf : page.getPageItems()) {
 					String md5InDb = cf.getMd5();
@@ -2930,32 +3219,37 @@ public Boolean completeMd5() {
 					final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE);
 					if (StringUtils.isBlank(md5InDb)) {
 						try {
-							updateMd5(cf.getDataId(), cf.getGroup(), tenant, md5, new Timestamp(cf.getLastModified()));
-						} catch (Exception e) {
+							updateMd5(cf.getDataId(), cf.getGroup(), tenant, md5,
+									new Timestamp(cf.getLastModified()));
+						}
+						catch (Exception e) {
 							LogUtil.defaultLog
 									.error("[completeMd5-error] datId:{} group:{} lastModified:{}",
-											new Object[]{
-													cf.getDataId(),
-													cf.getGroup(),
-													new Timestamp(cf
-															.getLastModified())});
+											new Object[] { cf.getDataId(), cf.getGroup(),
+													new Timestamp(
+															cf.getLastModified()) });
 						}
-					} else {
+					}
+					else {
 						if (!md5InDb.equals(md5)) {
 							try {
 								updateMd5(cf.getDataId(), cf.getGroup(), tenant, md5,
 										new Timestamp(cf.getLastModified()));
-							} catch (Exception e) {
-								LogUtil.defaultLog.error("[completeMd5-error] datId:{} group:{} lastModified:{}",
-										new Object[]{cf.getDataId(), cf.getGroup(),
-												new Timestamp(cf.getLastModified())});
+							}
+							catch (Exception e) {
+								LogUtil.defaultLog
+										.error("[completeMd5-error] datId:{} group:{} lastModified:{}",
+												new Object[] { cf.getDataId(),
+														cf.getGroup(), new Timestamp(
+														cf.getLastModified()) });
 							}
 						}
 					}
 				}
 
 				actualRowCount += page.getPageItems().size();
-				LogUtil.defaultLog.info("[completeMd5] {} / {}", actualRowCount, rowCount);
+				LogUtil.defaultLog
+						.info("[completeMd5] {} / {}", actualRowCount, rowCount);
 			}
 		}
 		return true;
@@ -2967,8 +3261,9 @@ public Boolean completeMd5() {
 	 * @param group
 	 * @return Collection of ConfigInfo objects
 	 */
-	public List findAllConfigInfo4Export(final String dataId, final String group, final String tenant,
-			final String appName, final List ids) {
+	public List findAllConfigInfo4Export(final String dataId,
+			final String group, final String tenant, final String appName,
+			final List ids) {
 		String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;
 		StringBuilder where = new StringBuilder(" where ");
 		List paramList = new ArrayList<>();
@@ -2982,7 +3277,8 @@ public List findAllConfigInfo4Export(final String dataId, final S
 				paramList.add(ids.get(i));
 			}
 			where.append(") ");
-		} else {
+		}
+		else {
 			where.append(" tenant_id=? ");
 			paramList.add(tenantTmp);
 			if (!StringUtils.isBlank(dataId)) {
@@ -2999,8 +3295,10 @@ public List findAllConfigInfo4Export(final String dataId, final S
 			}
 		}
 		try {
-			return this.jt.query(SQL_FIND_ALL_CONFIG_INFO + where, paramList.toArray(), CONFIG_ALL_INFO_ROW_MAPPER);
-		} catch (CannotGetJdbcConnectionException e) {
+			return this.jt.query(SQL_FIND_ALL_CONFIG_INFO + where, paramList.toArray(),
+					CONFIG_ALL_INFO_ROW_MAPPER);
+		}
+		catch (CannotGetJdbcConnectionException e) {
 			LogUtil.fatalLog.error("[db-error] " + e.toString(), e);
 			throw e;
 		}
@@ -3014,9 +3312,10 @@ public List findAllConfigInfo4Export(final String dataId, final S
 	 * failData: import failed data (only with abort for the same configs)
 	 * skipData: data skipped at import  (only with skip for the same configs)
 	 */
-	public Map batchInsertOrUpdate(List configInfoList, String srcUser, String srcIp,
-			Map configAdvanceInfo, Timestamp time, boolean notify, SameConfigPolicy policy) throws
-			NacosException {
+	public Map batchInsertOrUpdate(List configInfoList,
+			String srcUser, String srcIp, Map configAdvanceInfo,
+			Timestamp time, boolean notify, SameConfigPolicy policy)
+			throws NacosException {
 		int succCount = 0;
 		int skipCount = 0;
 		List> failData = null;
@@ -3025,22 +3324,28 @@ public Map batchInsertOrUpdate(List configInfoLis
 		for (int i = 0; i < configInfoList.size(); i++) {
 			ConfigAllInfo configInfo = configInfoList.get(i);
 			try {
-				ParamUtils.checkParam(configInfo.getDataId(), configInfo.getGroup(), "datumId", configInfo.getContent());
-			} catch (NacosException e) {
+				ParamUtils.checkParam(configInfo.getDataId(), configInfo.getGroup(),
+						"datumId", configInfo.getContent());
+			}
+			catch (NacosException e) {
 				LogUtil.defaultLog.error("data verification failed", e);
 				throw e;
 			}
-			ConfigInfo configInfo2Save = new ConfigInfo(configInfo.getDataId(), configInfo.getGroup(),
-					configInfo.getTenant(), configInfo.getAppName(), configInfo.getContent());
+			ConfigInfo configInfo2Save = new ConfigInfo(configInfo.getDataId(),
+					configInfo.getGroup(), configInfo.getTenant(),
+					configInfo.getAppName(), configInfo.getContent());
 
 			String type = configInfo.getType();
 			if (StringUtils.isBlank(type)) {
 				// simple judgment of file type based on suffix
 				if (configInfo.getDataId().contains(SPOT)) {
-					String extName = configInfo.getDataId().substring(configInfo.getDataId().lastIndexOf(SPOT) + 1).toUpperCase();
+					String extName = configInfo.getDataId()
+							.substring(configInfo.getDataId().lastIndexOf(SPOT) + 1)
+							.toUpperCase();
 					try {
 						type = FileTypeEnum.valueOf(extName.toUpperCase()).getFileType();
-					} catch (Exception ex) {
+					}
+					catch (Exception ex) {
 						type = FileTypeEnum.TEXT.getFileType();
 					}
 				}
@@ -3050,9 +3355,11 @@ public Map batchInsertOrUpdate(List configInfoLis
 			}
 			configAdvanceInfo.put("type", type);
 			try {
-				addConfigInfo(srcIp, srcUser, configInfo2Save, time, configAdvanceInfo, notify);
+				addConfigInfo(srcIp, srcUser, configInfo2Save, time, configAdvanceInfo,
+						notify);
 				succCount++;
-			} catch (DataIntegrityViolationException ive) {
+			}
+			catch (DataIntegrityViolationException ive) {
 				// uniqueness constraint conflict
 				if (SameConfigPolicy.ABORT.equals(policy)) {
 					failData = new ArrayList<>();
@@ -3069,7 +3376,8 @@ public Map batchInsertOrUpdate(List configInfoLis
 						skipData.add(skipitem);
 					}
 					break;
-				} else if (SameConfigPolicy.SKIP.equals(policy)) {
+				}
+				else if (SameConfigPolicy.SKIP.equals(policy)) {
 					skipCount++;
 					if (skipData == null) {
 						skipData = new ArrayList<>();
@@ -3078,9 +3386,11 @@ public Map batchInsertOrUpdate(List configInfoLis
 					skipitem.put("dataId", configInfo2Save.getDataId());
 					skipitem.put("group", configInfo2Save.getGroup());
 					skipData.add(skipitem);
-				} else if (SameConfigPolicy.OVERWRITE.equals(policy)) {
+				}
+				else if (SameConfigPolicy.OVERWRITE.equals(policy)) {
 					succCount++;
-					updateConfigInfo(configInfo2Save, srcIp, srcUser, time, configAdvanceInfo, notify);
+					updateConfigInfo(configInfo2Save, srcIp, srcUser, time,
+							configAdvanceInfo, notify);
 				}
 			}
 		}
@@ -3096,7 +3406,6 @@ public Map batchInsertOrUpdate(List configInfoLis
 		return result;
 	}
 
-
 	/**
 	 * query tenantInfo (namespace) existence based by tenantId
 	 *
@@ -3105,7 +3414,8 @@ public Map batchInsertOrUpdate(List configInfoLis
 	 */
 	public int tenantInfoCountByTenantId(String tenantId) {
 		Assert.hasText(tenantId, "tenantId can not be null");
-		Integer result = this.jt.queryForObject(SQL_TENANT_INFO_COUNT_BY_TENANT_ID, new String[]{tenantId}, Integer.class);
+		Integer result = this.jt.queryForObject(SQL_TENANT_INFO_COUNT_BY_TENANT_ID,
+				new String[] { tenantId }, Integer.class);
 		if (result == null) {
 			return 0;
 		}
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java
index 31ac42155e0..a2799cf8af4 100644
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java
@@ -93,7 +93,8 @@ void updateConfigInfo(final ConfigInfo configInfo, final String srcIp, final Str
 	/**
 	 * 更新配置信息
 	 */
-	void updateConfigInfo4Beta(ConfigInfo configInfo, String srcIp, String srcUser, Timestamp time,
+	void updateConfigInfo4Beta(ConfigInfo configInfo,
+			String betaIps, String srcIp, String srcUser, Timestamp time,
 			boolean notify);
 
 	/**
@@ -798,4 +799,4 @@ Map batchInsertOrUpdate(List configInfoList, Stri
 	 * @return count by tenantId
 	 */
 	int tenantInfoCountByTenantId(String tenantId);
-}
+}
\ No newline at end of file
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/RowMapperManager.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/RowMapperManager.java
similarity index 99%
rename from config/src/main/java/com/alibaba/nacos/config/server/service/RowMapperManager.java
rename to config/src/main/java/com/alibaba/nacos/config/server/service/repository/RowMapperManager.java
index b3d84a0209d..cbd70fa5baa 100644
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/RowMapperManager.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/RowMapperManager.java
@@ -1,4 +1,5 @@
 /*
+ *
  * Copyright 1999-2018 Alibaba Group Holding Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,9 +13,10 @@
  * 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.
+ *
  */
 
-package com.alibaba.nacos.config.server.service;
+package com.alibaba.nacos.config.server.service.repository;
 
 import com.alibaba.nacos.config.server.auth.PermissionInfo;
 import com.alibaba.nacos.config.server.auth.RoleInfo;
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/StandaloneDatabaseOperateImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/StandaloneDatabaseOperateImpl.java
index ff7095b22e9..66b39416b05 100644
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/StandaloneDatabaseOperateImpl.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/StandaloneDatabaseOperateImpl.java
@@ -17,8 +17,8 @@
 package com.alibaba.nacos.config.server.service.repository;
 
 import com.alibaba.nacos.config.server.configuration.ConditionStandaloneEmbedStorage;
-import com.alibaba.nacos.config.server.service.DataSourceService;
-import com.alibaba.nacos.config.server.service.DynamicDataSource;
+import com.alibaba.nacos.config.server.service.datasource.DataSourceService;
+import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource;
 import com.alibaba.nacos.config.server.service.sql.ModifyRequest;
 import com.alibaba.nacos.config.server.utils.LogUtil;
 import org.springframework.context.annotation.Conditional;
@@ -30,6 +30,9 @@
 import javax.annotation.PostConstruct;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.BiConsumer;
 
 /**
  * @author liaochuntao
@@ -81,6 +84,12 @@ public List> queryMany(String sql, Object[] args) {
 		return queryMany(jdbcTemplate, sql, args);
 	}
 
+	@Override
+	public Boolean update(List modifyRequests,
+			BiConsumer consumer) {
+		return update(modifyRequests);
+	}
+
 	@Override
 	public Boolean update(List requestList) {
 		return update(transactionTemplate, jdbcTemplate, requestList);
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/sql/EmbeddedStorageContextUtils.java b/config/src/main/java/com/alibaba/nacos/config/server/service/sql/EmbeddedStorageContextUtils.java
new file mode 100644
index 00000000000..db719c6578f
--- /dev/null
+++ b/config/src/main/java/com/alibaba/nacos/config/server/service/sql/EmbeddedStorageContextUtils.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright 1999-2018 Alibaba Group Holding Ltd.
+ *
+ * Licensed 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.
+ */
+
+package com.alibaba.nacos.config.server.service.sql;
+
+import com.alibaba.nacos.common.utils.JacksonUtils;
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.alibaba.nacos.config.server.constant.Constants;
+import com.alibaba.nacos.config.server.model.ConfigInfo;
+import com.alibaba.nacos.config.server.model.event.ConfigDumpEvent;
+import com.alibaba.nacos.core.utils.ApplicationUtils;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Temporarily saves all insert, update, and delete statements under
+ * a transaction in the order in which they occur
+ *
+ * @author liaochuntao
+ */
+public class EmbeddedStorageContextUtils {
+
+    private static final ThreadLocal> SQL_CONTEXT =
+            ThreadLocal.withInitial(ArrayList::new);
+
+    private static final ThreadLocal> EXTEND_INFO_CONTEXT = ThreadLocal.withInitial(
+            HashMap::new);
+
+    public static void addSqlContext(String sql, Object... args) {
+        ArrayList requests = SQL_CONTEXT.get();
+        ModifyRequest context = new ModifyRequest();
+        context.setExecuteNo(requests.size());
+        context.setSql(sql);
+        context.setArgs(args);
+        requests.add(context);
+        SQL_CONTEXT.set(requests);
+    }
+
+    public static void putExtendInfo(String key, String value) {
+        Map old = EXTEND_INFO_CONTEXT.get();
+        old.put(key, value);
+        EXTEND_INFO_CONTEXT.set(old);
+    }
+
+    public static void putAllExtendInfo(Map map) {
+        Map old = EXTEND_INFO_CONTEXT.get();
+        old.putAll(map);
+        EXTEND_INFO_CONTEXT.set(old);
+    }
+
+    /**
+     * In the case of the in-cluster storage mode, the logic of horizontal notification
+     * is implemented asynchronously via the raft state machine, along with the information
+     *
+     * @param configInfo {@link ConfigInfo}
+     * @param srcIp The IP of the operator
+     * @param time Operating time
+     */
+    public static void onModifyConfigInfo(ConfigInfo configInfo, String srcIp, Timestamp time) {
+        if (!ApplicationUtils.getStandaloneMode()) {
+            ConfigDumpEvent event = ConfigDumpEvent.builder()
+                    .remove(false)
+                    .namespaceId(configInfo.getTenant())
+                    .dataId(configInfo.getDataId())
+                    .group(configInfo.getGroup())
+                    .isBeta(false)
+                    .content(configInfo.getContent())
+                    .type(configInfo.getType())
+                    .handleIp(srcIp)
+                    .lastModifiedTs(time.getTime())
+                    .build();
+
+            Map extendInfo = new HashMap<>(2);
+            extendInfo.put(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT, JacksonUtils.toJson(event));
+            EmbeddedStorageContextUtils.putAllExtendInfo(extendInfo);
+        }
+    }
+
+    /**
+     * In the case of the in-cluster storage mode, the logic of horizontal notification
+     * is implemented asynchronously via the raft state machine, along with the information
+     *
+     * @param configInfo {@link ConfigInfo}
+     * @param betaIps Receive client IP for grayscale configuration publishing
+     * @param srcIp The IP of the operator
+     * @param time Operating time
+     */
+    public static void onModifyConfigBetaInfo(ConfigInfo configInfo, String betaIps, String srcIp, Timestamp time) {
+        if (!ApplicationUtils.getStandaloneMode()) {
+            ConfigDumpEvent event = ConfigDumpEvent.builder()
+                    .remove(false)
+                    .namespaceId(configInfo.getTenant())
+                    .dataId(configInfo.getDataId())
+                    .group(configInfo.getGroup())
+                    .isBeta(true)
+                    .betaIps(betaIps)
+                    .content(configInfo.getContent())
+                    .type(configInfo.getType())
+                    .handleIp(srcIp)
+                    .lastModifiedTs(time.getTime())
+                    .build();
+
+            Map extendInfo = new HashMap<>(2);
+            extendInfo.put(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT, JacksonUtils.toJson(event));
+            EmbeddedStorageContextUtils.putAllExtendInfo(extendInfo);
+        }
+    }
+
+    /**
+     * In the case of the in-cluster storage mode, the logic of horizontal notification
+     * is implemented asynchronously via the raft state machine, along with the information
+     *
+     * @param configInfo {@link ConfigInfo}
+     * @param tag tag info
+     * @param srcIp The IP of the operator
+     * @param time Operating time
+     */
+    public static void onModifyConfigTagInfo(ConfigInfo configInfo, String tag, String srcIp, Timestamp time) {
+        if (!ApplicationUtils.getStandaloneMode()) {
+            ConfigDumpEvent event = ConfigDumpEvent.builder()
+                    .remove(false)
+                    .namespaceId(configInfo.getTenant())
+                    .dataId(configInfo.getDataId())
+                    .group(configInfo.getGroup())
+                    .isBeta(false)
+                    .tag(tag)
+                    .content(configInfo.getContent())
+                    .type(configInfo.getType())
+                    .handleIp(srcIp)
+                    .lastModifiedTs(time.getTime())
+                    .build();
+
+            Map extendInfo = new HashMap<>(2);
+            extendInfo.put(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT, JacksonUtils.toJson(event));
+            EmbeddedStorageContextUtils.putAllExtendInfo(extendInfo);
+        }
+    }
+
+    /**
+     * In the case of the in-cluster storage mode, the logic of horizontal notification
+     * is implemented asynchronously via the raft state machine, along with the information
+     *
+     * @param namespaceId namespaceId
+     * @param group groupName
+     * @param dataId dataId
+     * @param srcIp The IP of the operator
+     * @param time Operating time
+     */
+    public static void onDeleteConfigInfo(String namespaceId, String group, String dataId, String srcIp, Timestamp time) {
+        if (!ApplicationUtils.getStandaloneMode()) {
+            ConfigDumpEvent event = ConfigDumpEvent.builder()
+                    .remove(true)
+                    .namespaceId(namespaceId)
+                    .group(group)
+                    .dataId(dataId)
+                    .isBeta(false)
+                    .handleIp(srcIp)
+                    .lastModifiedTs(time.getTime())
+                    .build();
+
+            Map extendInfo = new HashMap<>(2);
+            extendInfo.put(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT, JacksonUtils.toJson(event));
+            EmbeddedStorageContextUtils.putAllExtendInfo(extendInfo);
+        }
+    }
+
+    /**
+     * In the case of the in-cluster storage mode, the logic of horizontal notification
+     * is implemented asynchronously via the raft state machine, along with the information
+     *
+     * @param configInfos {@link List}
+     */
+    public static void onBatchDeleteConfigInfo(List configInfos) {
+        if (!ApplicationUtils.getStandaloneMode()) {
+            List events = new ArrayList<>();
+            for (ConfigInfo configInfo : configInfos) {
+                String namespaceId = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
+                ConfigDumpEvent event = ConfigDumpEvent.builder()
+                        .remove(true)
+                        .namespaceId(namespaceId)
+                        .group(configInfo.getGroup())
+                        .dataId(configInfo.getDataId())
+                        .isBeta(false)
+                        .build();
+
+                events.add(event);
+            }
+
+            Map extendInfo = new HashMap<>(2);
+            extendInfo.put(Constants.EXTEND_INFOS_CONFIG_DUMP_EVENT, JacksonUtils.toJson(events));
+            EmbeddedStorageContextUtils.putAllExtendInfo(extendInfo);
+        }
+    }
+
+    /**
+     * In the case of the in-cluster storage mode, the logic of horizontal notification
+     * is implemented asynchronously via the raft state machine, along with the information
+     *
+     * @param namespaceId namespaceId
+     * @param group group
+     * @param dataId dataId
+     * @param time Operating time
+     */
+    public static void onDeleteConfigBetaInfo(String namespaceId, String group, String dataId, long time) {
+        if (!ApplicationUtils.getStandaloneMode()) {
+            ConfigDumpEvent event = ConfigDumpEvent.builder()
+                    .remove(true)
+                    .namespaceId(namespaceId)
+                    .dataId(dataId)
+                    .group(group)
+                    .isBeta(true)
+                    .build();
+
+            Map extendInfo = new HashMap<>(2);
+            extendInfo.put(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT, JacksonUtils.toJson(event));
+            EmbeddedStorageContextUtils.putAllExtendInfo(extendInfo);
+        }
+    }
+
+    /**
+     * In the case of the in-cluster storage mode, the logic of horizontal notification
+     * is implemented asynchronously via the raft state machine, along with the information
+     *
+     * @param namespaceId namespaceId
+     * @param group group
+     * @param dataId dataId
+     * @param tag tag info
+     * @param srcIp The IP of the operator
+     */
+    public static void onDeleteConfigTagInfo(String namespaceId, String group, String dataId, String tag, String srcIp) {
+        if (!ApplicationUtils.getStandaloneMode()) {
+            ConfigDumpEvent event = ConfigDumpEvent.builder()
+                    .remove(true)
+                    .namespaceId(namespaceId)
+                    .group(group)
+                    .dataId(dataId)
+                    .isBeta(true)
+                    .tag(tag)
+                    .handleIp(srcIp)
+                    .build();
+
+            Map extendInfo = new HashMap<>(2);
+            extendInfo.put(Constants.EXTEND_INFO_CONFIG_DUMP_EVENT, JacksonUtils.toJson(event));
+            EmbeddedStorageContextUtils.putAllExtendInfo(extendInfo);
+        }
+    }
+
+    public static boolean containsExtendInfo(String key) {
+        Map extendInfo = EXTEND_INFO_CONTEXT.get();
+        boolean exist = extendInfo.containsKey(key);
+        EXTEND_INFO_CONTEXT.set(extendInfo);
+        return exist;
+    }
+
+    public static List getCurrentSqlContext() {
+        return SQL_CONTEXT.get();
+    }
+
+    public static Map getCurrentExtendInfo() {
+        return EXTEND_INFO_CONTEXT.get();
+    }
+
+    public static void cleanAllContext() {
+        SQL_CONTEXT.remove();
+        EXTEND_INFO_CONTEXT.remove();
+    }
+
+}
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/sql/SqlContextUtils.java b/config/src/main/java/com/alibaba/nacos/config/server/service/sql/SqlContextUtils.java
deleted file mode 100644
index e65813498f3..00000000000
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/sql/SqlContextUtils.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 1999-2018 Alibaba Group Holding Ltd.
- *
- * Licensed 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.
- */
-
-package com.alibaba.nacos.config.server.service.sql;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Temporarily saves all insert, update, and delete statements under
- * a transaction in the order in which they occur
- *
- * @author liaochuntao
- */
-public class SqlContextUtils {
-
-    private static final ThreadLocal> SQL_CONTEXT =
-            ThreadLocal.withInitial(ArrayList::new);
-
-    public static void addSqlContext(String sql, Object... args) {
-        ArrayList requests = SQL_CONTEXT.get();
-        ModifyRequest context = new ModifyRequest();
-        context.setExecuteNo(requests.size());
-        context.setSql(sql);
-        context.setArgs(args);
-        requests.add(context);
-        SQL_CONTEXT.set(requests);
-    }
-
-    public static List getCurrentSqlContext() {
-        return SQL_CONTEXT.get();
-    }
-
-    public static void cleanCurrentSqlContext() {
-        SQL_CONTEXT.remove();
-    }
-
-}
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/utils/ConfigExecutor.java b/config/src/main/java/com/alibaba/nacos/config/server/utils/ConfigExecutor.java
new file mode 100644
index 00000000000..513477958f4
--- /dev/null
+++ b/config/src/main/java/com/alibaba/nacos/config/server/utils/ConfigExecutor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 1999-2018 Alibaba Group Holding Ltd.
+ *
+ * Licensed 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.
+ */
+
+package com.alibaba.nacos.config.server.utils;
+
+import com.alibaba.nacos.common.executor.ExecutorFactory;
+import com.alibaba.nacos.common.executor.NameThreadFactory;
+import com.alibaba.nacos.config.server.Config;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author liaochuntao
+ */
+public final class ConfigExecutor {
+
+	private static final Executor DUMP_EXECUTOR = ExecutorFactory.newFixExecutorService(
+			Config.class.getCanonicalName(),
+			1,
+			new NameThreadFactory("nacos.config.embedded.dump"));
+
+	private static ScheduledExecutorService TIMER_EXECUTOR = ExecutorFactory.newScheduledExecutorService(Config.class.getCanonicalName(),
+			10,
+			new NameThreadFactory("com.alibaba.nacos.server.Timer"));
+
+	static public void scheduleWithFixedDelay(Runnable command, long initialDelay, long delay,
+			TimeUnit unit) {
+		TIMER_EXECUTOR.scheduleWithFixedDelay(command, initialDelay, delay, unit);
+	}
+
+	public static void executeEmbeddedDump(Runnable runnable) {
+		DUMP_EXECUTOR.execute(runnable);
+	}
+
+}
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/DiskUtil.java b/config/src/main/java/com/alibaba/nacos/config/server/utils/DiskUtil.java
similarity index 99%
rename from config/src/main/java/com/alibaba/nacos/config/server/service/DiskUtil.java
rename to config/src/main/java/com/alibaba/nacos/config/server/utils/DiskUtil.java
index 548c3bda1cf..ff99f4348ec 100644
--- a/config/src/main/java/com/alibaba/nacos/config/server/service/DiskUtil.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/utils/DiskUtil.java
@@ -1,4 +1,5 @@
 /*
+ *
  * Copyright 1999-2018 Alibaba Group Holding Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,8 +13,9 @@
  * 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.
+ *
  */
-package com.alibaba.nacos.config.server.service;
+package com.alibaba.nacos.config.server.utils;
 
 import com.alibaba.nacos.common.utils.IoUtils;
 import com.alibaba.nacos.common.utils.MD5Utils;
diff --git a/config/src/main/java/com/alibaba/nacos/config/server/utils/MD5Util.java b/config/src/main/java/com/alibaba/nacos/config/server/utils/MD5Util.java
index 1c0bb4e5711..09bd94e26c9 100755
--- a/config/src/main/java/com/alibaba/nacos/config/server/utils/MD5Util.java
+++ b/config/src/main/java/com/alibaba/nacos/config/server/utils/MD5Util.java
@@ -16,7 +16,7 @@
 package com.alibaba.nacos.config.server.utils;
 
 import com.alibaba.nacos.config.server.constant.Constants;
-import com.alibaba.nacos.config.server.service.ConfigService;
+import com.alibaba.nacos.config.server.service.ConfigCacheService;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.servlet.http.HttpServletRequest;
@@ -52,7 +52,8 @@ static public List compareMd5(HttpServletRequest request,
             String groupKey = entry.getKey();
             String clientMd5 = entry.getValue();
             String ip = RequestUtil.getRemoteIp(request);
-            boolean isUptodate = ConfigService.isUptodate(groupKey, clientMd5, ip, tag);
+            boolean isUptodate = ConfigCacheService
+					.isUptodate(groupKey, clientMd5, ip, tag);
             if (!isUptodate) {
                 changedGroupKeys.add(groupKey);
             }
diff --git a/config/src/test/java/com/alibaba/nacos/config/server/controller/HealthControllerUnitTest.java b/config/src/test/java/com/alibaba/nacos/config/server/controller/HealthControllerUnitTest.java
index c8cf6930bc0..8839f25df9d 100644
--- a/config/src/test/java/com/alibaba/nacos/config/server/controller/HealthControllerUnitTest.java
+++ b/config/src/test/java/com/alibaba/nacos/config/server/controller/HealthControllerUnitTest.java
@@ -32,7 +32,7 @@
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 import com.alibaba.nacos.config.server.constant.Constants;
-import com.alibaba.nacos.config.server.service.DataSourceService;
+import com.alibaba.nacos.config.server.service.datasource.DataSourceService;
 
 /**
  * Created by qingliang on 2017/8/14.
diff --git a/config/src/test/java/com/alibaba/nacos/config/server/model/ConfigInfoTest.java b/config/src/test/java/com/alibaba/nacos/config/server/model/ConfigInfoTest.java
new file mode 100644
index 00000000000..b56096f385e
--- /dev/null
+++ b/config/src/test/java/com/alibaba/nacos/config/server/model/ConfigInfoTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1999-2018 Alibaba Group Holding Ltd.
+ *
+ * Licensed 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.
+ */
+
+package com.alibaba.nacos.config.server.model;
+
+import com.alibaba.nacos.common.utils.JacksonUtils;
+import com.alibaba.nacos.consistency.IdGenerator;
+import com.alibaba.nacos.core.distributed.id.SnowFlowerIdGenerator;
+import com.alibaba.nacos.core.utils.ApplicationUtils;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.core.env.StandardEnvironment;
+
+public class ConfigInfoTest {
+
+	@Test
+	public void test_precision_issue() throws Exception {
+		ApplicationUtils.injectEnvironment(new StandardEnvironment());
+		IdGenerator generator = new SnowFlowerIdGenerator();
+		long id = generator.nextId();
+		ConfigInfo configInfo = new ConfigInfo();
+		configInfo.setId(id);
+		String json = JacksonUtils.toJson(configInfo);
+		ConfigInfo _c = JacksonUtils.toObj(json, ConfigInfo.class);
+		Assert.assertEquals(id, _c.getId());
+
+	}
+
+}
\ No newline at end of file
diff --git a/config/src/test/java/com/alibaba/nacos/config/server/service/ClientTrackServiceTest.java b/config/src/test/java/com/alibaba/nacos/config/server/service/ClientTrackServiceTest.java
index c5ec39dac95..03088553797 100644
--- a/config/src/test/java/com/alibaba/nacos/config/server/service/ClientTrackServiceTest.java
+++ b/config/src/test/java/com/alibaba/nacos/config/server/service/ClientTrackServiceTest.java
@@ -40,7 +40,7 @@ public void test_trackClientMd5() {
         String groupKey = GroupKey2.getKey(dataId, group);
         String md5 = "xxxxxxxxxxxxx";
 
-        ConfigService.updateMd5(groupKey, md5, System.currentTimeMillis());
+        ConfigCacheService.updateMd5(groupKey, md5, System.currentTimeMillis());
 
         ClientTrackService.trackClientMd5(clientIp, groupKey, md5);
         ClientTrackService.trackClientMd5(clientIp, groupKey, md5);
@@ -50,7 +50,7 @@ public void test_trackClientMd5() {
         Assert.assertEquals(1, ClientTrackService.subscriberCount());
 
         //服务端数据更新
-        ConfigService.updateMd5(groupKey, md5 + "111", System.currentTimeMillis());
+        ConfigCacheService.updateMd5(groupKey, md5 + "111", System.currentTimeMillis());
         Assert.assertEquals(false, ClientTrackService.isClientUptodate(clientIp).get(groupKey));
     }
 
diff --git a/config/src/test/java/com/alibaba/nacos/config/server/service/DiskServiceUnitTest.java b/config/src/test/java/com/alibaba/nacos/config/server/service/DiskServiceUnitTest.java
index fe5e0bc7f0a..97e04c57362 100755
--- a/config/src/test/java/com/alibaba/nacos/config/server/service/DiskServiceUnitTest.java
+++ b/config/src/test/java/com/alibaba/nacos/config/server/service/DiskServiceUnitTest.java
@@ -15,6 +15,7 @@
  */
 package com.alibaba.nacos.config.server.service;
 
+import com.alibaba.nacos.config.server.utils.DiskUtil;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/config/src/test/java/com/alibaba/nacos/config/server/service/RowMapperManagerTest.java b/config/src/test/java/com/alibaba/nacos/config/server/service/RowMapperManagerTest.java
index 749facd0e53..004bbd7eff7 100644
--- a/config/src/test/java/com/alibaba/nacos/config/server/service/RowMapperManagerTest.java
+++ b/config/src/test/java/com/alibaba/nacos/config/server/service/RowMapperManagerTest.java
@@ -1,5 +1,6 @@
 package com.alibaba.nacos.config.server.service;
 
+import com.alibaba.nacos.config.server.service.repository.RowMapperManager;
 import com.alibaba.nacos.core.utils.ClassUtils;
 import com.alibaba.nacos.config.server.model.User;
 import org.junit.Assert;
diff --git a/consistency/pom.xml b/consistency/pom.xml
index fa440728fdc..c4cd3cd9090 100644
--- a/consistency/pom.xml
+++ b/consistency/pom.xml
@@ -20,7 +20,7 @@
     
         com.alibaba.nacos
         nacos-all
-        1.3.0-BETA
+        1.3.0
         ../pom.xml
     
 
@@ -30,7 +30,7 @@
     jar
 
     nacos-consistency ${project.version}
-    http://maven.apache.org
+    http://nacos.io
     
         
             
diff --git a/consistency/src/main/java/com/alibaba/nacos/consistency/ConsistencyProtocol.java b/consistency/src/main/java/com/alibaba/nacos/consistency/ConsistencyProtocol.java
index bcde5b04950..26a65342d3a 100644
--- a/consistency/src/main/java/com/alibaba/nacos/consistency/ConsistencyProtocol.java
+++ b/consistency/src/main/java/com/alibaba/nacos/consistency/ConsistencyProtocol.java
@@ -68,17 +68,25 @@ public interface ConsistencyProtocol e
      * Obtain data according to the request
      *
      * @param request request
-     * @return data {@link GetRequest}
+     * @return data {@link Response}
      * @throws Exception
      */
     Response getData(GetRequest request) throws Exception;
 
+    /**
+     * Get data asynchronously
+     *
+     * @param request request
+     * @return data {@link CompletableFuture}
+     */
+    CompletableFuture aGetData(GetRequest request);
+
     /**
      * Data operation, returning submission results synchronously
      * 同步数据提交,在 Datum 中已携带相应的数据操作信息
      *
      * @param data {@link Log}
-     * @return submit operation result
+     * @return submit operation result {@link Response}
      * @throws Exception
      */
     Response submit(Log data) throws Exception;
diff --git a/consistency/src/main/java/com/alibaba/nacos/consistency/cp/Constants.java b/consistency/src/main/java/com/alibaba/nacos/consistency/cp/MetadataKey.java
similarity index 97%
rename from consistency/src/main/java/com/alibaba/nacos/consistency/cp/Constants.java
rename to consistency/src/main/java/com/alibaba/nacos/consistency/cp/MetadataKey.java
index bd43726d6c4..3b9c79a79a9 100644
--- a/consistency/src/main/java/com/alibaba/nacos/consistency/cp/Constants.java
+++ b/consistency/src/main/java/com/alibaba/nacos/consistency/cp/MetadataKey.java
@@ -19,7 +19,7 @@
 /**
  * @author liaochuntao
  */
-public class Constants {
+public class MetadataKey {
 
     public static final String LEADER_META_DATA = "leader";
 
diff --git a/consistency/src/test/java/com/alibaba/nacos/consistency/ProtocolMetaDataTest.java b/consistency/src/test/java/com/alibaba/nacos/consistency/ProtocolMetaDataTest.java
index 8e878fddfb4..146286b260f 100644
--- a/consistency/src/test/java/com/alibaba/nacos/consistency/ProtocolMetaDataTest.java
+++ b/consistency/src/test/java/com/alibaba/nacos/consistency/ProtocolMetaDataTest.java
@@ -6,11 +6,8 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Predicate;
 
 import com.alibaba.nacos.common.utils.JacksonUtils;
-import com.alibaba.nacos.common.utils.Observable;
-import com.alibaba.nacos.common.utils.Observer;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -28,6 +25,7 @@ public void test_protocol_meta_data() throws Exception {
 
         metaData.load(map);
 
+        String json = JacksonUtils.toJson(metaData);
         AtomicInteger count = new AtomicInteger(0);
 
         CountDownLatch latch = new CountDownLatch(2);
@@ -38,7 +36,6 @@ public void test_protocol_meta_data() throws Exception {
             latch.countDown();
         });
 
-        String json = JacksonUtils.toJson(metaData);
         System.out.println(json);
 
         map = new HashMap<>();
diff --git a/console/pom.xml b/console/pom.xml
index 15e9fdbdaa3..8ee3fabb476 100644
--- a/console/pom.xml
+++ b/console/pom.xml
@@ -18,18 +18,17 @@
     
         com.alibaba.nacos
         nacos-all
-        1.3.0-BETA
+        1.3.0
     
     nacos-console
-    
     jar
     nacos-console ${project.version}
-    http://maven.apache.org
+    http://nacos.io
     
         UTF-8
     
-    
 
+    
         
             ${project.groupId}
             nacos-config
@@ -37,7 +36,6 @@
         
             org.apache.tomcat.embed
             tomcat-embed-jasper
-            7.0.59
         
         
             ${project.groupId}
@@ -107,7 +105,6 @@
             
                 org.codehaus.mojo
                 findbugs-maven-plugin
-                3.0.4
             
         
     
@@ -132,7 +129,6 @@
                     
                         org.springframework.boot
                         spring-boot-maven-plugin
-                        2.1.1.RELEASE
                         
                             com.alibaba.nacos.Nacos
                             ZIP
diff --git a/console/src/main/java/com/alibaba/nacos/console/controller/UserController.java b/console/src/main/java/com/alibaba/nacos/console/controller/UserController.java
index 8534abd9522..c75456c217e 100644
--- a/console/src/main/java/com/alibaba/nacos/console/controller/UserController.java
+++ b/console/src/main/java/com/alibaba/nacos/console/controller/UserController.java
@@ -15,9 +15,9 @@
  */
 package com.alibaba.nacos.console.controller;
 
-import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.api.common.Constants;
 import com.alibaba.nacos.common.model.RestResult;
+import com.alibaba.nacos.common.utils.JacksonUtils;
 import com.alibaba.nacos.config.server.auth.RoleInfo;
 import com.alibaba.nacos.config.server.model.User;
 import com.alibaba.nacos.console.security.nacos.NacosAuthConfig;
@@ -28,6 +28,8 @@
 import com.alibaba.nacos.console.utils.JwtTokenUtils;
 import com.alibaba.nacos.console.utils.PasswordEncoderUtil;
 import com.alibaba.nacos.core.auth.*;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
@@ -172,7 +174,8 @@ public Object login(@RequestParam String username, @RequestParam String password
             response.addHeader(NacosAuthConfig.AUTHORIZATION_HEADER,
                 NacosAuthConfig.TOKEN_PREFIX + user.getToken());
 
-            JSONObject result = new JSONObject();
+            ObjectNode result = JacksonUtils.createEmptyJsonNode();
+//            JSONObject result = new JSONObject();
             result.put(Constants.ACCESS_TOKEN, user.getToken());
             result.put(Constants.TOKEN_TTL, authConfigs.getTokenValidityInSeconds());
             result.put(Constants.GLOBAL_ADMIN, user.isGlobalAdmin());
diff --git a/console/src/main/java/com/alibaba/nacos/console/security/nacos/users/NacosUser.java b/console/src/main/java/com/alibaba/nacos/console/security/nacos/users/NacosUser.java
index f2f519c585d..f3dfa0f7335 100644
--- a/console/src/main/java/com/alibaba/nacos/console/security/nacos/users/NacosUser.java
+++ b/console/src/main/java/com/alibaba/nacos/console/security/nacos/users/NacosUser.java
@@ -16,7 +16,6 @@
 
 package com.alibaba.nacos.console.security.nacos.users;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.nacos.core.auth.User;
 
 /**
@@ -47,6 +46,9 @@ public void setGlobalAdmin(boolean globalAdmin) {
 
     @Override
     public String toString() {
-        return JSON.toJSONString(this);
+        return "NacosUser{" +
+            "token='" + token + '\'' +
+            ", globalAdmin=" + globalAdmin +
+            '}';
     }
 }
diff --git a/console/src/main/resources/application.properties b/console/src/main/resources/application.properties
index fb38270173a..f2ba17b2867 100644
--- a/console/src/main/resources/application.properties
+++ b/console/src/main/resources/application.properties
@@ -117,7 +117,7 @@ nacos.istio.mcp.server.enabled=false
 
 
 
-###*************** Add from 1.3.0-BETA ***************###
+###*************** Add from 1.3.0 ***************###
 
 
 #*************** Core Related Configurations ***************#
@@ -132,7 +132,7 @@ nacos.istio.mcp.server.enabled=false
 
 ### MemberLookup
 ### Addressing pattern category, If set, the priority is highest
-# nacos.core.member.lookup.type=[file,address-server,discovery]
+# nacos.core.member.lookup.type=[file,address-server]
 ## Set the cluster list with a configuration file or command-line argument
 # nacos.member.list=192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
 ## for AddressServerMemberLookup
@@ -145,13 +145,11 @@ nacos.istio.mcp.server.enabled=false
 # nacos.core.protocol.raft.data.election_timeout_ms=5000
 ### Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute
 # nacos.core.protocol.raft.data.snapshot_interval_secs=30
-### Requested retries, default value is 1
-# nacos.core.protocol.raft.data.request_failoverRetries=1
 ### raft internal worker threads
 # nacos.core.protocol.raft.data.core_thread_num=8
 ### Number of threads required for raft business request processing
 # nacos.core.protocol.raft.data.cli_service_thread_num=4
-### raft linear read strategy, defaults to index
+### raft linear read strategy. Safe linear reads are used by default, that is, the Leader tenure is confirmed by heartbeat
 # nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe
 ### rpc request timeout, default 5 seconds
-# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000
\ No newline at end of file
+# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000
diff --git a/console/src/main/resources/static/css/main.css b/console/src/main/resources/static/css/main.css
index 11821d275a5..39132c147d0 100644
--- a/console/src/main/resources/static/css/main.css
+++ b/console/src/main/resources/static/css/main.css
@@ -1 +1 @@
-.next-icon[dir=rtl]:before{transform:rotateY(180deg)}@font-face{font-family:NextIcon;src:url(/nacos/console-fe/public/icons/icon-font.eot);src:url(/nacos/console-fe/public/icons/icon-font.eot?#iefix) format("embedded-opentype"),url(/nacos/console-fe/public/icons/icon-font.woff2) format("woff2"),url(/nacos/console-fe/public/icons/icon-font.woff) format("woff"),url(/nacos/console-fe/public/icons/icon-font.ttf) format("truetype"),url(/nacos/console-fe/public/icons/icon-font.svg#NextIcon) format("svg")}.next-icon{display:inline-block;font-family:NextIcon;font-style:normal;font-weight:400;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.next-icon:before{display:inline-block;vertical-align:middle;text-align:center}.next-icon-smile:before{content:""}.next-icon-cry:before{content:""}.next-icon-success:before{content:""}.next-icon-warning:before{content:""}.next-icon-prompt:before{content:""}.next-icon-error:before{content:""}.next-icon-help:before{content:""}.next-icon-clock:before{content:""}.next-icon-success-filling:before{content:""}.next-icon-delete-filling:before{content:""}.next-icon-favorites-filling:before{content:""}.next-icon-add:before{content:""}.next-icon-minus:before{content:""}.next-icon-arrow-up:before{content:""}.next-icon-arrow-down:before{content:""}.next-icon-arrow-left:before{content:""}.next-icon-arrow-right:before{content:""}.next-icon-arrow-double-left:before{content:""}.next-icon-arrow-double-right:before{content:""}.next-icon-switch:before{content:""}.next-icon-sorting:before{content:""}.next-icon-descending:before{content:""}.next-icon-ascending:before{content:""}.next-icon-select:before{content:""}.next-icon-semi-select:before{content:""}.next-icon-search:before{content:""}.next-icon-close:before{content:""}.next-icon-ellipsis:before{content:""}.next-icon-picture:before{content:""}.next-icon-calendar:before{content:""}.next-icon-ashbin:before{content:""}.next-icon-upload:before{content:""}.next-icon-download:before{content:""}.next-icon-set:before{content:""}.next-icon-edit:before{content:""}.next-icon-refresh:before{content:""}.next-icon-filter:before{content:""}.next-icon-attachment:before{content:""}.next-icon-account:before{content:""}.next-icon-email:before{content:""}.next-icon-atm:before{content:""}.next-icon-loading:before{content:"";animation:loadingCircle 1s linear infinite}.next-icon-eye:before{content:""}.next-icon-copy:before{content:""}.next-icon-toggle-left:before{content:""}.next-icon-toggle-right:before{content:""}.next-icon-eye-close:before{content:""}.next-icon-unlock:before{content:""}.next-icon-lock:before{content:""}.next-icon-exit:before{content:""}.next-icon-chart-bar:before{content:""}.next-icon-chart-pie:before{content:""}.next-icon-form:before{content:""}.next-icon-detail:before{content:""}.next-icon-list:before{content:""}.next-icon-dashboard:before{content:""}.next-icon.next-xxs .next-icon-remote,.next-icon.next-xxs:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-icon.next-xxs{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-icon.next-xxs:before{width:16px;font-size:16px}}.next-icon.next-xs .next-icon-remote,.next-icon.next-xs:before{width:12px;font-size:12px;line-height:inherit}.next-icon.next-small .next-icon-remote,.next-icon.next-small:before{width:16px;font-size:16px;line-height:inherit}.next-icon.next-medium .next-icon-remote,.next-icon.next-medium:before{width:20px;font-size:20px;line-height:inherit}.next-icon.next-large .next-icon-remote,.next-icon.next-large:before{width:24px;font-size:24px;line-height:inherit}.next-icon.next-xl .next-icon-remote,.next-icon.next-xl:before{width:32px;font-size:32px;line-height:inherit}.next-icon.next-xxl .next-icon-remote,.next-icon.next-xxl:before{width:48px;font-size:48px;line-height:inherit}.next-icon.next-xxxl .next-icon-remote,.next-icon.next-xxxl:before{width:64px;font-size:64px;line-height:inherit}.next-icon.next-inherit .next-icon-remote,.next-icon.next-inherit:before{width:inherit;font-size:inherit;line-height:inherit}.next-icon .next-icon-remote,.next-icon.next-inherit .next-icon-remote{width:1em;height:1em;vertical-align:middle;fill:currentColor}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-ms-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-ms-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-o-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-moz-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-ms-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-o-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-moz-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-ms-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-o-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-moz-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-ms-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-o-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-moz-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-ms-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-o-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-moz-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-ms-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-o-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-moz-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-ms-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-o-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-moz-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-ms-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-o-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-moz-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-ms-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-o-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-webkit-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-moz-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-ms-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-o-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-moz-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-ms-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-o-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-webkit-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-moz-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-ms-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-o-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-webkit-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-moz-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-ms-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-o-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-webkit-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-moz-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-ms-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-o-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-webkit-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-moz-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-ms-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-o-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-webkit-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-moz-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-ms-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-o-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-webkit-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-moz-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-ms-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-o-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-ms-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-o-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.fadeIn{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;-ms-animation-name:fadeIn;-o-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeIn,.fadeInDown{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeInDown{-webkit-animation-name:fadeInDown;-moz-animation-name:fadeInDown;-ms-animation-name:fadeInDown;-o-animation-name:fadeInDown;animation-name:fadeInDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeInLeft{-webkit-animation-name:fadeInLeft;-moz-animation-name:fadeInLeft;-ms-animation-name:fadeInLeft;-o-animation-name:fadeInLeft;animation-name:fadeInLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeInLeft,.fadeInRight{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeInRight{-webkit-animation-name:fadeInRight;-moz-animation-name:fadeInRight;-ms-animation-name:fadeInRight;-o-animation-name:fadeInRight;animation-name:fadeInRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeInUp{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-ms-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeOut{-webkit-animation-name:fadeOut;-moz-animation-name:fadeOut;-ms-animation-name:fadeOut;-o-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOut,.fadeOutDown{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeOutDown{-webkit-animation-name:fadeOutDown;-moz-animation-name:fadeOutDown;-ms-animation-name:fadeOutDown;-o-animation-name:fadeOutDown;animation-name:fadeOutDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;-moz-animation-name:fadeOutLeft;-ms-animation-name:fadeOutLeft;-o-animation-name:fadeOutLeft;animation-name:fadeOutLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOutLeft,.fadeOutRight{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeOutRight{-webkit-animation-name:fadeOutRight;-moz-animation-name:fadeOutRight;-ms-animation-name:fadeOutRight;-o-animation-name:fadeOutRight;animation-name:fadeOutRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOutUp{-webkit-animation-name:fadeOutUp;-moz-animation-name:fadeOutUp;-ms-animation-name:fadeOutUp;-o-animation-name:fadeOutUp;animation-name:fadeOutUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideInUp{-webkit-animation-name:slideInUp;-moz-animation-name:slideInUp;-ms-animation-name:slideInUp;-o-animation-name:slideInUp;animation-name:slideInUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideInDown,.slideInUp{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideInDown{-webkit-animation-name:slideInDown;-moz-animation-name:slideInDown;-ms-animation-name:slideInDown;-o-animation-name:slideInDown;animation-name:slideInDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideInLeft{-webkit-animation-name:slideInLeft;-moz-animation-name:slideInLeft;-ms-animation-name:slideInLeft;-o-animation-name:slideInLeft;animation-name:slideInLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideInLeft,.slideInRight{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideInRight{-webkit-animation-name:slideInRight;-moz-animation-name:slideInRight;-ms-animation-name:slideInRight;-o-animation-name:slideInRight;animation-name:slideInRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutUp{-webkit-animation-name:slideOutUp;-moz-animation-name:slideOutUp;-ms-animation-name:slideOutUp;-o-animation-name:slideOutUp;animation-name:slideOutUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutRight,.slideOutUp{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideOutRight{-webkit-animation-name:slideOutRight;-moz-animation-name:slideOutRight;-ms-animation-name:slideOutRight;-o-animation-name:slideOutRight;animation-name:slideOutRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutLeft{-webkit-animation-name:slideOutLeft;-moz-animation-name:slideOutLeft;-ms-animation-name:slideOutLeft;-o-animation-name:slideOutLeft;animation-name:slideOutLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutDown,.slideOutLeft{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideOutDown{-webkit-animation-name:slideOutDown;-moz-animation-name:slideOutDown;-ms-animation-name:slideOutDown;-o-animation-name:slideOutDown;animation-name:slideOutDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.zoomIn{-webkit-animation-name:zoomIn;-moz-animation-name:zoomIn;-ms-animation-name:zoomIn;-o-animation-name:zoomIn;animation-name:zoomIn;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.zoomIn,.zoomOut{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.zoomOut{-webkit-animation-name:zoomOut;-moz-animation-name:zoomOut;-ms-animation-name:zoomOut;-o-animation-name:zoomOut;animation-name:zoomOut;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInDown{-webkit-animation-name:expandInDown;-moz-animation-name:expandInDown;-ms-animation-name:expandInDown;-o-animation-name:expandInDown;animation-name:expandInDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInDown,.expandOutUp{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expandOutUp{-webkit-animation-name:expandOutUp;-moz-animation-name:expandOutUp;-ms-animation-name:expandOutUp;-o-animation-name:expandOutUp;animation-name:expandOutUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.15s;-moz-animation-duration:.15s;-ms-animation-duration:.15s;-o-animation-duration:.15s;animation-duration:.15s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInUp{-webkit-animation-name:expandInUp;-moz-animation-name:expandInUp;-ms-animation-name:expandInUp;-o-animation-name:expandInUp;animation-name:expandInUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInUp,.expandOutDown{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expandOutDown{-webkit-animation-name:expandOutDown;-moz-animation-name:expandOutDown;-ms-animation-name:expandOutDown;-o-animation-name:expandOutDown;animation-name:expandOutDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.15s;-moz-animation-duration:.15s;-ms-animation-duration:.15s;-o-animation-duration:.15s;animation-duration:.15s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.pulse{-webkit-animation-name:pulse;-moz-animation-name:pulse;-ms-animation-name:pulse;-o-animation-name:pulse;animation-name:pulse;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expand-enter{overflow:hidden}.expand-enter-active{transition:all .3s ease-out}.expand-enter-active>*{-webkit-animation-name:expandInWithFade;-moz-animation-name:expandInWithFade;-ms-animation-name:expandInWithFade;-o-animation-name:expandInWithFade;animation-name:expandInWithFade;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:"forwards";-moz-animation-fill-mode:"forwards";-ms-animation-fill-mode:"forwards";-o-animation-fill-mode:"forwards";animation-fill-mode:"forwards";-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expand-leave{overflow:hidden}.expand-leave-active{transition:all .2s ease-out}.expand-leave-active>*{-webkit-animation-name:expandOutWithFade;-moz-animation-name:expandOutWithFade;-ms-animation-name:expandOutWithFade;-o-animation-name:expandOutWithFade;animation-name:expandOutWithFade;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:"forwards";-moz-animation-fill-mode:"forwards";-ms-animation-fill-mode:"forwards";-o-animation-fill-mode:"forwards";animation-fill-mode:"forwards";-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.next-overlay-wrapper .next-overlay-inner{z-index:1001}.next-overlay-wrapper .next-overlay-backdrop{position:fixed;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.2);transition:opacity .3s ease;opacity:0}.next-overlay-wrapper.opened .next-overlay-backdrop{opacity:1}.next-loading-fusion-reactor[dir=rtl]{-webkit-animation-name:nextVectorRouteRTL;-moz-animation-name:nextVectorRouteRTL;-ms-animation-name:nextVectorRouteRTL;-o-animation-name:nextVectorRouteRTL;animation-name:nextVectorRouteRTL}@-webkit-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@-moz-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@-ms-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@-o-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}.next-loading{position:relative}.next-loading.next-open{pointer-events:none}.next-loading .next-loading-component{opacity:.7;-webkit-filter:blur(1px);filter:blur(1px);filter:"progid\:DXImageTransform\.Microsoft\.Blur(PixelRadius\=1, MakeShadow\=false)";position:relative;pointer-events:none}.next-loading-masker{position:absolute;top:0;bottom:0;left:0;right:0;z-index:99;opacity:.2;background:#fff}.next-loading-inline{display:inline-block}.next-loading-tip{display:block;position:absolute;top:50%;left:50%;z-index:4;transform:translate(-50%,-50%);text-align:center}.next-loading-tip-fullscreen{top:inherit;left:inherit;transform:inherit}.next-loading-tip-placeholder{display:none}.next-loading-right-tip .next-loading-indicator{display:inline-block}.next-loading-right-tip .next-loading-tip-content{position:absolute;display:block;top:50%;right:0;transform:translateY(-50%)}.next-loading-right-tip .next-loading-tip-placeholder{display:inline-block;visibility:hidden;margin-left:1em}.next-loading-fusion-reactor{display:inline-block;width:48px;height:48px;position:relative;margin:0;-webkit-animation-duration:5.6s;-moz-animation-duration:5.6s;-ms-animation-duration:5.6s;-o-animation-duration:5.6s;animation-duration:5.6s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-o-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;-ms-animation-timing-function:linear;-o-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-name:nextVectorRoute;-moz-animation-name:nextVectorRoute;-ms-animation-name:nextVectorRoute;-o-animation-name:nextVectorRoute;animation-name:nextVectorRoute}.next-loading-fusion-reactor .next-loading-dot{position:absolute;margin:auto;width:12px;height:12px;border-radius:50%;background:#5584ff;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;-ms-animation-timing-function:ease-in-out;-o-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-o-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-duration:1.4s;-moz-animation-duration:1.4s;-ms-animation-duration:1.4s;-o-animation-duration:1.4s;animation-duration:1.4s}.next-loading-fusion-reactor .next-loading-dot:first-child{top:0;bottom:0;left:0;-webkit-animation-name:nextVectorDotsX;-moz-animation-name:nextVectorDotsX;-ms-animation-name:nextVectorDotsX;-o-animation-name:nextVectorDotsX;animation-name:nextVectorDotsX}.next-loading-fusion-reactor .next-loading-dot:nth-child(2){left:0;right:0;top:0;opacity:.8;-webkit-animation-name:nextVectorDotsY;-moz-animation-name:nextVectorDotsY;-ms-animation-name:nextVectorDotsY;-o-animation-name:nextVectorDotsY;animation-name:nextVectorDotsY}.next-loading-fusion-reactor .next-loading-dot:nth-child(3){top:0;bottom:0;right:0;opacity:.6;-webkit-animation-name:nextVectorDotsXR;-moz-animation-name:nextVectorDotsXR;-ms-animation-name:nextVectorDotsXR;-o-animation-name:nextVectorDotsXR;animation-name:nextVectorDotsXR}.next-loading-fusion-reactor .next-loading-dot:nth-child(4){left:0;right:0;bottom:0;opacity:.2;-webkit-animation-name:nextVectorDotsYR;-moz-animation-name:nextVectorDotsYR;-ms-animation-name:nextVectorDotsYR;-o-animation-name:nextVectorDotsYR;animation-name:nextVectorDotsYR}.next-loading-medium-fusion-reactor{width:32px;height:32px}.next-loading-medium-fusion-reactor .next-loading-dot{width:8px;height:8px}.next-loading-medium-fusion-reactor .next-loading-dot:first-child{-webkit-animation-name:nextVectorDotsX-medium;-moz-animation-name:nextVectorDotsX-medium;-ms-animation-name:nextVectorDotsX-medium;-o-animation-name:nextVectorDotsX-medium;animation-name:nextVectorDotsX-medium}.next-loading-medium-fusion-reactor .next-loading-dot:nth-child(2){-webkit-animation-name:nextVectorDotsY-medium;-moz-animation-name:nextVectorDotsY-medium;-ms-animation-name:nextVectorDotsY-medium;-o-animation-name:nextVectorDotsY-medium;animation-name:nextVectorDotsY-medium}.next-loading-medium-fusion-reactor .next-loading-dot:nth-child(3){-webkit-animation-name:nextVectorDotsXR-medium;-moz-animation-name:nextVectorDotsXR-medium;-ms-animation-name:nextVectorDotsXR-medium;-o-animation-name:nextVectorDotsXR-medium;animation-name:nextVectorDotsXR-medium}.next-loading-medium-fusion-reactor .next-loading-dot:nth-child(4){-webkit-animation-name:nextVectorDotsYR-medium;-moz-animation-name:nextVectorDotsYR-medium;-ms-animation-name:nextVectorDotsYR-medium;-o-animation-name:nextVectorDotsYR-medium;animation-name:nextVectorDotsYR-medium}@-webkit-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-moz-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-ms-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-o-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-webkit-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-webkit-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-webkit-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}.next-message{position:relative;display:block;vertical-align:baseline;animation-duration:.3s;animation-timing-function:ease-in-out}.next-message,.next-message *,.next-message :after,.next-message :before{box-sizing:border-box}.next-message:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-message .next-message-close{color:#999;font-size:0;position:absolute;cursor:pointer}.next-message .next-message-close .next-icon-close{width:12px;height:12px;line-height:12px}.next-message .next-message-close .next-icon-close:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-message .next-message-close:hover{color:#666}.next-message.next-message-success.next-inline{background-color:#e4fdda;border-color:#e4fdda;box-shadow:none;border-style:solid}.next-message.next-message-success.next-inline .next-message-title{color:#333}.next-message.next-message-success.next-inline .next-message-content{color:#666}.next-message.next-message-success.next-inline .next-message-symbol{color:#46bc15}.next-message.next-message-success.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-success.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-success.next-addon .next-message-title{color:#333}.next-message.next-message-success.next-addon .next-message-content{color:#666}.next-message.next-message-success.next-addon .next-message-symbol{color:#46bc15}.next-message.next-message-success.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-success.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-success.next-toast .next-message-title{color:#333}.next-message.next-message-success.next-toast .next-message-content{color:#666}.next-message.next-message-success.next-toast .next-message-symbol{color:#46bc15}.next-message.next-message-success.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-warning.next-inline{background-color:#fff3e0;border-color:#fff3e0;box-shadow:none;border-style:solid}.next-message.next-message-warning.next-inline .next-message-title{color:#333}.next-message.next-message-warning.next-inline .next-message-content{color:#666}.next-message.next-message-warning.next-inline .next-message-symbol{color:#ff9300}.next-message.next-message-warning.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-warning.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-warning.next-addon .next-message-title{color:#333}.next-message.next-message-warning.next-addon .next-message-content{color:#666}.next-message.next-message-warning.next-addon .next-message-symbol{color:#ff9300}.next-message.next-message-warning.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-warning.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-warning.next-toast .next-message-title{color:#333}.next-message.next-message-warning.next-toast .next-message-content{color:#666}.next-message.next-message-warning.next-toast .next-message-symbol{color:#ff9300}.next-message.next-message-warning.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-error.next-inline{background-color:#ffece4;border-color:#ffece4;box-shadow:none;border-style:solid}.next-message.next-message-error.next-inline .next-message-title{color:#333}.next-message.next-message-error.next-inline .next-message-content{color:#666}.next-message.next-message-error.next-inline .next-message-symbol{color:#ff3000}.next-message.next-message-error.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-error.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-error.next-addon .next-message-title{color:#333}.next-message.next-message-error.next-addon .next-message-content{color:#666}.next-message.next-message-error.next-addon .next-message-symbol{color:#ff3000}.next-message.next-message-error.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-error.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-error.next-toast .next-message-title{color:#333}.next-message.next-message-error.next-toast .next-message-content{color:#666}.next-message.next-message-error.next-toast .next-message-symbol{color:#ff3000}.next-message.next-message-error.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-notice.next-inline{background-color:#e3f2fd;border-color:#e3f2fd;box-shadow:none;border-style:solid}.next-message.next-message-notice.next-inline .next-message-title{color:#333}.next-message.next-message-notice.next-inline .next-message-content{color:#666}.next-message.next-message-notice.next-inline .next-message-symbol{color:#4494f9}.next-message.next-message-notice.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-notice.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-notice.next-addon .next-message-title{color:#333}.next-message.next-message-notice.next-addon .next-message-content{color:#666}.next-message.next-message-notice.next-addon .next-message-symbol{color:#4494f9}.next-message.next-message-notice.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-notice.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-notice.next-toast .next-message-title{color:#333}.next-message.next-message-notice.next-toast .next-message-content{color:#666}.next-message.next-message-notice.next-toast .next-message-symbol{color:#4494f9}.next-message.next-message-notice.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-help.next-inline{background-color:#e3fff8;border-color:#e3fff8;box-shadow:none;border-style:solid}.next-message.next-message-help.next-inline .next-message-title{color:#333}.next-message.next-message-help.next-inline .next-message-content{color:#666}.next-message.next-message-help.next-inline .next-message-symbol{color:#01c1b2}.next-message.next-message-help.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-help.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-help.next-addon .next-message-title{color:#333}.next-message.next-message-help.next-addon .next-message-content{color:#666}.next-message.next-message-help.next-addon .next-message-symbol{color:#01c1b2}.next-message.next-message-help.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-help.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-help.next-toast .next-message-title{color:#333}.next-message.next-message-help.next-toast .next-message-content{color:#666}.next-message.next-message-help.next-toast .next-message-symbol{color:#01c1b2}.next-message.next-message-help.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-loading.next-inline{background-color:#fff;border-color:#fff;box-shadow:none;border-style:solid}.next-message.next-message-loading.next-inline .next-message-title{color:#333}.next-message.next-message-loading.next-inline .next-message-content{color:#666}.next-message.next-message-loading.next-inline .next-message-symbol{color:#5584ff}.next-message.next-message-loading.next-inline .next-message-symbol-icon:before{content:"";animation:loadingCircle 1s linear infinite}.next-message.next-message-loading.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-loading.next-addon .next-message-title{color:#333}.next-message.next-message-loading.next-addon .next-message-content{color:#666}.next-message.next-message-loading.next-addon .next-message-symbol{color:#5584ff}.next-message.next-message-loading.next-addon .next-message-symbol-icon:before{content:"";animation:loadingCircle 1s linear infinite}.next-message.next-message-loading.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-loading.next-toast .next-message-title{color:#333}.next-message.next-message-loading.next-toast .next-message-content{color:#666}.next-message.next-message-loading.next-toast .next-message-symbol{color:#5584ff}.next-message.next-message-loading.next-toast .next-message-symbol-icon:before{content:"";animation:loadingCircle 1s linear infinite}.next-message.next-medium{border-width:1px;padding:12px}.next-message.next-medium .next-message-symbol{float:left;line-height:16px}.next-message.next-medium .next-message-symbol .next-icon-remote,.next-message.next-medium .next-message-symbol:before{width:16px;font-size:16px;line-height:inherit}.next-message.next-medium .next-message-title{padding:0 20px 0 24px;font-size:16px;line-height:16px}.next-message.next-medium .next-message-content{margin-top:8px;padding:0 20px 0 24px;font-size:12px;line-height:12px}.next-message.next-medium .next-message-symbol+.next-message-content{margin-top:0}.next-message.next-medium.next-only-content .next-message-content{line-height:16px}.next-message.next-medium .next-message-close{top:12px;right:12px}.next-message.next-medium.next-inline,.next-message.next-medium.next-toast{border-radius:3px}.next-message.next-large{border-width:2px;padding:16px;line-height:18px}.next-message.next-large .next-message-symbol{float:left;line-height:24px}.next-message.next-large .next-message-symbol .next-icon-remote,.next-message.next-large .next-message-symbol:before{width:24px;font-size:24px;line-height:inherit}.next-message.next-large .next-message-title{padding:0 20px 0 36px;font-size:20px;line-height:20px}.next-message.next-large .next-message-content{margin-top:8px;padding:0 20px 0 36px;font-size:12px;line-height:12px}.next-message.next-large .next-message-symbol+.next-message-content{margin-top:0}.next-message.next-large.next-only-content .next-message-content,.next-message.next-large.next-title-content .next-message-title{line-height:24px}.next-message.next-large .next-message-close{top:16px;right:16px}.next-message.next-large.next-inline,.next-message.next-large.next-toast{border-radius:3px}.next-message[dir=rtl] .next-message-symbol{float:right}.next-message[dir=rtl].next-medium .next-message-title{padding:0 24px 0 20px}.next-message[dir=rtl].next-medium .next-message-close{left:12px;right:auto}.next-message[dir=rtl].next-large .next-message-title{padding:0 36px 0 20px}.next-message[dir=rtl].next-large .next-message-close{left:16px;right:auto}.next-radio-button-large[dir=rtl]>label:first-child{margin-left:-1px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-left-radius:0;border-bottom-left-radius:0}.next-radio-button-large[dir=rtl]>label:last-child{margin-left:0;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-large[dir=rtl] .next-radio-label{height:38px;line-height:38px;font-size:16px}.next-radio-button-medium[dir=rtl]>label:first-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-medium[dir=rtl]>label:last-child{margin-left:0;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-small[dir=rtl]>label:first-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-small[dir=rtl]>label:last-child{margin-left:0;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-wrapper[dir=rtl] .next-radio-label{margin-left:0;margin-right:4px}.next-radio-group[dir=rtl] .next-radio-label{margin-right:4px;margin-left:16px}.next-radio-button[dir=rtl]>label .next-radio-label{margin:0}.next-radio-wrapper{outline:0}.next-radio-wrapper .next-radio{box-sizing:border-box;display:inline-block;vertical-align:middle;position:relative;line-height:1}.next-radio-wrapper .next-radio *,.next-radio-wrapper .next-radio :after,.next-radio-wrapper .next-radio :before{box-sizing:border-box}.next-radio-wrapper .next-radio input[type=radio]{opacity:0;position:absolute;vertical-align:middle;top:0;left:0;width:16px;height:16px;margin:0;cursor:pointer}.next-radio-wrapper .next-radio-inner{display:block;width:16px;height:16px;background:#fff;border-radius:50%;border:1px solid #c4c6cf;transition:all .1s linear;box-shadow:none}.next-radio-wrapper .next-radio-inner:after{transform:scale(0);position:absolute;border-radius:50%;top:50%;margin-top:-2px;left:50%;margin-left:-2px;background:#fff;content:"";transition:all .1s linear}.next-radio-wrapper.checked .next-radio-inner{border-color:#5584ff;background:#5584ff}.next-radio-wrapper.checked .next-radio-inner:after{width:4px;height:4px;font-weight:700;background:#fff;transform:scale(1)}.next-radio-wrapper.checked.hovered .next-radio-inner,.next-radio-wrapper.checked:hover .next-radio-inner{border-color:transparent}.next-radio-wrapper.disabled input[type=radio]{cursor:not-allowed}.next-radio-wrapper.disabled .next-radio-inner{border-color:#e6e7eb;background:#f7f8fa}.next-radio-wrapper.disabled .next-radio-inner:after{background:#ccc}.next-radio-wrapper.disabled .next-radio-inner.hovered,.next-radio-wrapper.disabled .next-radio-inner:hover{border-color:#e6e7eb}.next-radio-wrapper.disabled.checked .next-radio-inner{border-color:#e6e7eb;background:#f7f8fa}.next-radio-wrapper.disabled.checked .next-radio-inner:after{background:#ccc}.next-radio-wrapper.disabled .next-radio-label{color:#ccc}.next-radio-wrapper:not(.disabled).hovered .next-radio-inner,.next-radio-wrapper:not(.disabled):hover .next-radio-inner{border-color:#5584ff;background-color:#dee8ff}.next-radio-wrapper:not(.disabled).hovered .next-radio-label,.next-radio-wrapper:not(.disabled):hover .next-radio-label{cursor:pointer}.next-radio-wrapper.checked:not(.disabled).hovered .next-radio-inner,.next-radio-wrapper.checked:not(.disabled):hover .next-radio-inner{border-color:transparent;background:#3e71f7}.next-radio-wrapper.checked:not(.disabled).hovered .next-radio-inner:after,.next-radio-wrapper.checked:not(.disabled):hover .next-radio-inner:after{background:#fff}.next-radio-button .next-radio,.next-radio-button input[type=radio]{width:0;height:0}.next-radio-button>label{display:inline-block;box-sizing:border-box;position:relative;z-index:1;margin:0 0 0 -1px;border:1px solid #c4c6cf;background-color:#fff;transition:all .1s linear;vertical-align:middle}.next-radio-button>label .next-radio-label{display:block;color:#333;margin:0;transition:all .1s linear}.next-radio-button>label.hovered,.next-radio-button>label:hover{z-index:10;border-color:#a0a2ad;background-color:#f2f3f7}.next-radio-button>label.hovered .next-radio-label,.next-radio-button>label:hover .next-radio-label{color:#333}.next-radio-button>label.checked{z-index:11;border-color:#5584ff;background-color:#fff}.next-radio-button>label.checked .next-radio-label{color:#5584ff}.next-radio-button>label.disabled{z-index:0;cursor:not-allowed;border-color:#e6e7eb;background-color:#f7f8fa}.next-radio-button>label.disabled .next-radio-label{color:#ccc}.next-radio-button>label.checked.disabled{z-index:0;border-color:#e6e7eb;background-color:#f2f3f7}.next-radio-button>label.checked.disabled .next-radio-label{color:#ccc}.next-radio-button-large>label{padding:0 8px;height:40px;line-height:40px}.next-radio-button-large>label:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-large>label:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-large .next-radio-label{height:38px;line-height:38px;font-size:16px}.next-radio-button-medium>label{padding:0 8px;height:28px;line-height:28px}.next-radio-button-medium>label:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-medium>label:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-medium .next-radio-label{height:26px;line-height:26px;font-size:12px}.next-radio-button-small>label{padding:0 8px;height:20px;line-height:20px}.next-radio-button-small>label:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-small>label:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-small .next-radio-label{height:18px;line-height:18px;font-size:12px}.next-radio-single-input input[type=radio]{opacity:0;position:absolute;top:0;left:0;margin:0}.next-radio-group{display:inline-block}.next-radio-group .next-radio-label{color:#333;margin-right:16px}.next-radio-group.disabled .next-radio-label{color:#ccc}.next-radio-group-ver .next-radio-wrapper{display:block;margin-bottom:8px}.next-radio-label{margin:0 0 0 4px;font-size:12px;vertical-align:middle;line-height:1;color:#333}@-moz-document url-prefix(){.next-radio{margin-top:-1px}@supports (animation:calc(0s)){.next-radio{margin-top:-3px}}}.next-checkbox-wrapper[dir=rtl]{margin-right:8px;margin-left:0}.next-checkbox-wrapper[dir=rtl]:first-child{margin-right:0}.next-checkbox-wrapper[dir=rtl]>.next-checkbox-label{margin-right:4px;margin-left:0}.next-checkbox-wrapper,.next-checkbox-wrapper *,.next-checkbox-wrapper :after,.next-checkbox-wrapper :before{box-sizing:border-box}.next-checkbox-wrapper .next-checkbox{display:inline-block;position:relative;line-height:1;vertical-align:middle}.next-checkbox-wrapper input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:16px;height:16px;margin:0;cursor:pointer}.next-checkbox-wrapper .next-checkbox-inner{display:block;width:16px;height:16px;background:#fff;border-radius:3px;border:1px solid #c4c6cf;transition:all .1s linear;text-align:left;box-shadow:none}.next-checkbox-wrapper .next-checkbox-inner>.next-icon{transform:scale(0);position:absolute;top:0;opacity:0;line-height:16px;transition:all .1s linear;color:#fff;left:4px;margin-left:0}.next-checkbox-wrapper .next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper .next-checkbox-inner>.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-checkbox-wrapper .next-checkbox-inner>.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-checkbox-wrapper .next-checkbox-inner>.next-icon:before{width:16px;font-size:16px}}.next-checkbox-wrapper .next-checkbox-inner>.next-icon:before{vertical-align:top;margin-top:0}.next-checkbox-wrapper .next-checkbox-inner>.next-checkbox-select-icon:before{content:""}.next-checkbox-wrapper .next-checkbox-inner>.next-checkbox-semi-select-icon:before{content:""}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner{border-color:transparent;background-color:#5584ff}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner:hover,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner:hover{border-color:transparent}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon{opacity:1;transform:scale(1);margin-left:0}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:16px;font-size:16px}}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner{border-color:transparent;background-color:#5584ff}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner:hover,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner:hover{border-color:transparent}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon{opacity:1;transform:scaleX(1);margin-left:0}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:16px;font-size:16px}}.next-checkbox-wrapper.focused>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper.hovered>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper:not(.disabled):hover>.next-checkbox>.next-checkbox-inner{border-color:#5584ff;background-color:#dee8ff}.next-checkbox-wrapper.focused .next-checkbox-label,.next-checkbox-wrapper.hovered .next-checkbox-label,.next-checkbox-wrapper:not(.disabled):hover .next-checkbox-label{cursor:pointer}.next-checkbox-wrapper.checked:not(.disabled).hovered>.next-checkbox .next-checkbox-inner,.next-checkbox-wrapper.checked:not(.disabled):hover>.next-checkbox .next-checkbox-inner,.next-checkbox-wrapper.indeterminate:not(.disabled).hovered>.next-checkbox .next-checkbox-inner,.next-checkbox-wrapper.indeterminate:not(.disabled):hover>.next-checkbox .next-checkbox-inner{border-color:transparent;background-color:#3e71f7}.next-checkbox-wrapper.checked:not(.disabled).hovered>.next-checkbox .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.checked:not(.disabled):hover>.next-checkbox .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate:not(.disabled).hovered>.next-checkbox .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate:not(.disabled):hover>.next-checkbox .next-checkbox-inner>.next-icon{color:#fff;opacity:1}.next-checkbox-wrapper.disabled input[type=checkbox]{cursor:not-allowed}.next-checkbox-wrapper.disabled.checked .next-checkbox-inner,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner,.next-checkbox-wrapper.disabled .next-checkbox-inner{border-color:#e6e7eb;background:#f7f8fa}.next-checkbox-wrapper.disabled.checked .next-checkbox-inner.hovered,.next-checkbox-wrapper.disabled.checked .next-checkbox-inner:hover,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner.hovered,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner:hover{border-color:#e6e7eb}.next-checkbox-wrapper.disabled.checked .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner>.next-icon{color:#ccc;opacity:1}.next-checkbox-wrapper.disabled .next-checkbox-label{color:#333}.next-checkbox-group .next-checkbox-wrapper{display:inline-block;margin-left:8px}.next-checkbox-group .next-checkbox-wrapper:first-child{margin-left:0}.next-checkbox-group-ver .next-checkbox-wrapper{display:block;margin-left:0;margin-right:0;margin-bottom:8px}.next-checkbox-label{font-size:12px;color:#333;vertical-align:middle;margin:0 0 0 4px;line-height:1}.next-menu[dir=rtl] .next-menu-item-helper{float:left}.next-menu[dir=rtl] .next-menu-item .next-checkbox,.next-menu[dir=rtl] .next-menu-item .next-radio{margin-left:4px;margin-right:0}.next-menu[dir=rtl] .next-menu-hoz-right{float:left}.next-menu[dir=rtl] .next-menu-hoz-icon-arrow.next-icon{left:6px;right:auto}.next-menu[dir=rtl] .next-menu-icon-selected.next-icon{margin-left:0;margin-right:-16px}.next-menu[dir=rtl] .next-menu-icon-selected.next-icon .next-icon-remote,.next-menu[dir=rtl] .next-menu-icon-selected.next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-menu[dir=rtl] .next-menu-icon-selected.next-icon.next-menu-icon-right{right:auto;left:4px}.next-menu[dir=rtl] .next-menu-icon-arrow.next-icon{left:10px;right:auto}.next-menu{position:relative;min-width:100px;padding:8px 0;margin:0;list-style:none;border:1px solid #dcdee3;border-radius:3px;box-shadow:none;background:#fff;line-height:32px;font-size:12px;animation-duration:.3s;animation-timing-function:ease}.next-menu,.next-menu *,.next-menu :after,.next-menu :before{box-sizing:border-box}.next-menu:focus,.next-menu :focus{outline:0}.next-menu-embeddable,.next-menu-embeddable .next-menu-item.next-disabled,.next-menu-embeddable .next-menu-item.next-disabled .next-menu-item-text>a{background:transparent;border:none}.next-menu-embeddable .next-menu-item-inner{height:100%}.next-menu-content{position:relative}.next-menu-content,.next-menu-sub-menu{padding:0;margin:0;list-style:none}.next-menu-sub-menu.next-expand-enter{overflow:hidden}.next-menu-sub-menu.next-expand-enter-active{transition:height .3s ease}.next-menu-sub-menu.next-expand-leave{overflow:hidden}.next-menu-sub-menu.next-expand-leave-active{transition:height .3s ease}.next-menu-item{position:relative;padding:0 20px;transition:background .1s linear;color:#333;cursor:pointer}.next-menu-item-helper{float:right;color:#999;font-style:normal;font-size:12px}.next-menu-item .next-checkbox,.next-menu-item .next-radio{margin-right:4px}.next-menu-item.next-selected{color:#333;background-color:#fff}.next-menu-item.next-selected .next-menu-icon-arrow{color:#666}.next-menu-item.next-selected .next-menu-icon-selected{color:#5584ff}.next-menu-item.next-disabled,.next-menu-item.next-disabled .next-menu-item-text>a{color:#ccc;background-color:#fff;cursor:not-allowed}.next-menu-item.next-disabled .next-menu-icon-arrow,.next-menu-item.next-disabled .next-menu-icon-selected,.next-menu-item.next-disabled .next-menu-item-text>a .next-menu-icon-arrow,.next-menu-item.next-disabled .next-menu-item-text>a .next-menu-icon-selected{color:#ccc}.next-menu-item:not(.next-disabled).next-focused,.next-menu-item:not(.next-disabled).next-selected.next-focused,.next-menu-item:not(.next-disabled).next-selected.next-focused:hover,.next-menu-item:not(.next-disabled).next-selected:focus,.next-menu-item:not(.next-disabled).next-selected:focus:hover,.next-menu-item:not(.next-disabled).next-selected:hover,.next-menu-item:not(.next-disabled):hover{color:#333;background-color:#f2f3f7}.next-menu-item:not(.next-disabled).next-focused .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected.next-focused .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected.next-focused:hover .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected:focus .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected:focus:hover .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected:hover .next-menu-icon-arrow,.next-menu-item:not(.next-disabled):hover .next-menu-icon-arrow{color:#333}.next-menu-item:not(.next-disabled).next-focused .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected.next-focused .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected.next-focused:hover .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected:focus .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected:focus:hover .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected:hover .next-menu-icon-selected,.next-menu-item:not(.next-disabled):hover .next-menu-icon-selected{color:#5584ff}.next-menu-item-inner{height:32px;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.next-menu-item-text{vertical-align:middle}.next-menu-item-text>a{display:inline-block;text-decoration:none;color:#333}.next-menu-item-text>a:before{position:absolute;background-color:transparent;top:0;left:0;bottom:0;right:0;content:""}.next-menu.next-hoz{padding:0}.next-menu.next-hoz.next-menu-nowrap{overflow:hidden;white-space:nowrap}.next-menu.next-hoz.next-menu-nowrap .next-menu-more{text-align:center}.next-menu.next-hoz .next-menu-content>.next-menu-item,.next-menu.next-hoz>.next-menu-item,.next-menu.next-hoz>.next-menu-sub-menu-wrapper{display:inline-block;vertical-align:top}.next-menu.next-hoz .next-menu-content,.next-menu.next-hoz .next-menu-footer,.next-menu.next-hoz .next-menu-header{display:inline-block}.next-menu-hoz-right{float:right}.next-menu-group-label{padding:0 12px;color:#999}.next-menu-divider{margin:8px 12px;border-bottom:1px solid #e6e7eb}.next-menu .next-menu-icon-selected{position:absolute;top:0;margin-left:-16px}.next-menu .next-menu-icon-selected .next-icon-remote,.next-menu .next-menu-icon-selected:before{width:12px;font-size:12px;line-height:inherit}.next-menu .next-menu-icon-selected.next-menu-icon-right{right:4px}.next-menu .next-menu-symbol-icon-selected:before{content:""}.next-menu .next-menu-icon-arrow.next-icon{position:absolute;top:0;right:10px;color:#666;transition:all .1s linear}.next-menu .next-menu-icon-arrow.next-icon .next-icon-remote,.next-menu .next-menu-icon-arrow.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-icon-arrow.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-icon-arrow.next-icon:before{width:16px;font-size:16px}}.next-menu .next-menu-icon-arrow-down:before{content:""}.next-menu .next-menu-icon-arrow-down.next-open{transform:rotate(180deg)}.next-menu .next-menu-icon-arrow-down.next-open .next-icon-remote,.next-menu .next-menu-icon-arrow-down.next-open:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-icon-arrow-down.next-open{transform:scale(.5) rotate(180deg);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-icon-arrow-down.next-open:before{width:16px;font-size:16px}}.next-menu .next-menu-symbol-popupfold:before{content:""}.next-menu .next-menu-icon-arrow-right.next-open{transform:rotate(-90deg)}.next-menu .next-menu-icon-arrow-right.next-open .next-icon-remote,.next-menu .next-menu-icon-arrow-right.next-open:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-icon-arrow-right.next-open{transform:scale(.5) rotate(-90deg);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-icon-arrow-right.next-open:before{width:16px;font-size:16px}}.next-menu .next-menu-hoz-icon-arrow.next-icon{position:absolute;top:0;right:6px;color:#666;transition:all .1s linear}.next-menu .next-menu-hoz-icon-arrow.next-icon .next-icon-remote,.next-menu .next-menu-hoz-icon-arrow.next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-menu .next-menu-hoz-icon-arrow.next-icon:before{content:""}.next-menu-unfold-icon:before{content:""}.next-menu .next-menu-hoz-icon-arrow.next-open{transform:rotate(180deg)}.next-menu .next-menu-hoz-icon-arrow.next-open .next-icon-remote,.next-menu .next-menu-hoz-icon-arrow.next-open:before{width:12px;font-size:12px;line-height:inherit}.next-menu.next-context{line-height:24px}.next-menu.next-context .next-menu-item-inner{height:24px}.next-btn,.next-btn *,.next-btn :after,.next-btn :before{box-sizing:border-box}.next-btn::-moz-focus-inner{border:0;padding:0}.next-btn,.next-btn:active,.next-btn:focus,.next-btn:hover{outline:0}@keyframes loadingCircle{0%{transform-origin:50% 50%;transform:rotate(0deg)}to{transform-origin:50% 50%;transform:rotate(1turn)}}.next-btn{position:relative;display:inline-block;box-shadow:none;text-decoration:none;text-align:center;text-transform:none;white-space:nowrap;vertical-align:middle;user-select:none;transition:all .1s linear;line-height:1;cursor:pointer}.next-btn:after{text-align:center;position:absolute;opacity:0;visibility:hidden;transition:opacity .1s linear}.next-btn:before{content:"";height:100%;width:0}.next-btn .next-icon,.next-btn:before{display:inline-block;vertical-align:middle}.next-btn .next-icon{font-size:0}.next-btn>.next-btn-helper,.next-btn>div,.next-btn>span{display:inline-block;vertical-align:middle}.next-btn>.next-btn-helper{text-decoration:inherit}.next-btn.hover,.next-btn:hover{box-shadow:none}.next-btn.next-small{border-radius:3px;padding:0 8px;height:20px;font-size:12px;border-width:1px}.next-btn.next-small>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn.next-small>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-small>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn.next-small>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn.next-small>.next-btn-icon.next-icon-alone:before,.next-btn.next-small>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-small>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small.next-btn-loading{padding-left:24px}.next-btn.next-small.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:8px;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn.next-small.next-btn-loading>.next-icon{display:none}.next-btn.next-small>.next-btn-custom-loading-icon{opacity:0;width:0}.next-btn.next-small>.next-btn-custom-loading-icon.show{width:12px;margin-right:4px;opacity:1;transition:all .1s linear}.next-btn.next-medium{border-radius:3px;padding:0 12px;height:28px;font-size:12px;border-width:1px}.next-btn.next-medium>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn.next-medium>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-medium>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn.next-medium>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn.next-medium>.next-btn-icon.next-icon-alone:before,.next-btn.next-medium>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-medium>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium.next-btn-loading{padding-left:28px}.next-btn.next-medium.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:12px;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn.next-medium.next-btn-loading>.next-icon{display:none}.next-btn.next-medium>.next-btn-custom-loading-icon{opacity:0;width:0}.next-btn.next-medium>.next-btn-custom-loading-icon.show{width:12px;margin-right:4px;opacity:1;transition:all .1s linear}.next-btn.next-large{border-radius:3px;padding:0 16px;height:40px;font-size:16px;border-width:1px}.next-btn.next-large>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn.next-large>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-large>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn.next-large>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn.next-large>.next-btn-icon.next-icon-alone:before,.next-btn.next-large>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-large>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large.next-btn-loading{padding-left:36px}.next-btn.next-large.next-btn-loading:after{width:16px;height:16px;font-size:16px;line-height:16px;left:16px;top:50%;text-align:center;margin-top:-8px;margin-right:4px}.next-btn.next-large.next-btn-loading>.next-icon{display:none}.next-btn.next-large>.next-btn-custom-loading-icon{opacity:0;width:0}.next-btn.next-large>.next-btn-custom-loading-icon.show{width:16px;margin-right:4px;opacity:1;transition:all .1s linear}.next-btn.next-btn-normal{border-style:solid;background-color:#fff;border-color:#c4c6cf}.next-btn.next-btn-normal,.next-btn.next-btn-normal.visited,.next-btn.next-btn-normal:link,.next-btn.next-btn-normal:visited{color:#333}.next-btn.next-btn-normal.active,.next-btn.next-btn-normal.hover,.next-btn.next-btn-normal:active,.next-btn.next-btn-normal:focus,.next-btn.next-btn-normal:hover{color:#333;background-color:#f2f3f7;border-color:#a0a2ad;text-decoration:none}.next-btn.next-btn-primary{border-style:solid;background-color:#5584ff;border-color:transparent}.next-btn.next-btn-primary,.next-btn.next-btn-primary.visited,.next-btn.next-btn-primary:link,.next-btn.next-btn-primary:visited{color:#fff}.next-btn.next-btn-primary.active,.next-btn.next-btn-primary.hover,.next-btn.next-btn-primary:active,.next-btn.next-btn-primary:focus,.next-btn.next-btn-primary:hover{color:#fff;background-color:#3e71f7;border-color:transparent;text-decoration:none}.next-btn.next-btn-secondary{border-style:solid;background-color:#fff;border-color:#5584ff}.next-btn.next-btn-secondary,.next-btn.next-btn-secondary.visited,.next-btn.next-btn-secondary:link,.next-btn.next-btn-secondary:visited{color:#5584ff}.next-btn.next-btn-secondary.active,.next-btn.next-btn-secondary.hover,.next-btn.next-btn-secondary:active,.next-btn.next-btn-secondary:focus,.next-btn.next-btn-secondary:hover{color:#fff;background-color:#3e71f7;border-color:#3e71f7;text-decoration:none}.next-btn.disabled,.next-btn[disabled]{cursor:not-allowed;background-color:#f7f8fa;border-color:#e6e7eb}.next-btn.disabled,.next-btn.disabled.visited,.next-btn.disabled:link,.next-btn.disabled:visited,.next-btn[disabled],.next-btn[disabled].visited,.next-btn[disabled]:link,.next-btn[disabled]:visited{color:#ccc}.next-btn.disabled.active,.next-btn.disabled.hover,.next-btn.disabled:active,.next-btn.disabled:focus,.next-btn.disabled:hover,.next-btn[disabled].active,.next-btn[disabled].hover,.next-btn[disabled]:active,.next-btn[disabled]:focus,.next-btn[disabled]:hover{color:#ccc;background-color:#f7f8fa;border-color:#e6e7eb;text-decoration:none}.next-btn-warning{border-style:solid}.next-btn-warning.next-btn-primary{background-color:#ff3000;border-color:#ff3000}.next-btn-warning.next-btn-primary,.next-btn-warning.next-btn-primary.visited,.next-btn-warning.next-btn-primary:link,.next-btn-warning.next-btn-primary:visited{color:#fff}.next-btn-warning.next-btn-primary.active,.next-btn-warning.next-btn-primary.hover,.next-btn-warning.next-btn-primary:active,.next-btn-warning.next-btn-primary:focus,.next-btn-warning.next-btn-primary:hover{color:#fff;background-color:#e72b00;border-color:#e72b00;text-decoration:none}.next-btn-warning.next-btn-primary.disabled,.next-btn-warning.next-btn-primary[disabled]{background-color:#f7f8fa;border-color:#dcdee3}.next-btn-warning.next-btn-primary.disabled,.next-btn-warning.next-btn-primary.disabled.visited,.next-btn-warning.next-btn-primary.disabled:link,.next-btn-warning.next-btn-primary.disabled:visited,.next-btn-warning.next-btn-primary[disabled],.next-btn-warning.next-btn-primary[disabled].visited,.next-btn-warning.next-btn-primary[disabled]:link,.next-btn-warning.next-btn-primary[disabled]:visited{color:#ccc}.next-btn-warning.next-btn-primary.disabled.active,.next-btn-warning.next-btn-primary.disabled.hover,.next-btn-warning.next-btn-primary.disabled:active,.next-btn-warning.next-btn-primary.disabled:focus,.next-btn-warning.next-btn-primary.disabled:hover,.next-btn-warning.next-btn-primary[disabled].active,.next-btn-warning.next-btn-primary[disabled].hover,.next-btn-warning.next-btn-primary[disabled]:active,.next-btn-warning.next-btn-primary[disabled]:focus,.next-btn-warning.next-btn-primary[disabled]:hover{color:#ccc;background-color:#f7f8fa;border-color:#dcdee3;text-decoration:none}.next-btn-warning.next-btn-normal{background-color:#fff;border-color:#ff3000}.next-btn-warning.next-btn-normal,.next-btn-warning.next-btn-normal.visited,.next-btn-warning.next-btn-normal:link,.next-btn-warning.next-btn-normal:visited{color:#ff3000}.next-btn-warning.next-btn-normal.active,.next-btn-warning.next-btn-normal.hover,.next-btn-warning.next-btn-normal:active,.next-btn-warning.next-btn-normal:focus,.next-btn-warning.next-btn-normal:hover{color:#fff;background-color:#e72b00;border-color:#e72b00;text-decoration:none}.next-btn-warning.next-btn-normal.disabled,.next-btn-warning.next-btn-normal[disabled]{background-color:#f7f8fa;border-color:#e6e7eb}.next-btn-warning.next-btn-normal.disabled,.next-btn-warning.next-btn-normal.disabled.visited,.next-btn-warning.next-btn-normal.disabled:link,.next-btn-warning.next-btn-normal.disabled:visited,.next-btn-warning.next-btn-normal[disabled],.next-btn-warning.next-btn-normal[disabled].visited,.next-btn-warning.next-btn-normal[disabled]:link,.next-btn-warning.next-btn-normal[disabled]:visited{color:#ccc}.next-btn-warning.next-btn-normal.disabled.active,.next-btn-warning.next-btn-normal.disabled.hover,.next-btn-warning.next-btn-normal.disabled:active,.next-btn-warning.next-btn-normal.disabled:focus,.next-btn-warning.next-btn-normal.disabled:hover,.next-btn-warning.next-btn-normal[disabled].active,.next-btn-warning.next-btn-normal[disabled].hover,.next-btn-warning.next-btn-normal[disabled]:active,.next-btn-warning.next-btn-normal[disabled]:focus,.next-btn-warning.next-btn-normal[disabled]:hover{color:#ccc;background-color:#f7f8fa;border-color:#e6e7eb;text-decoration:none}.next-btn-text{border-radius:0}.next-btn-text,.next-btn-text.hover,.next-btn-text:hover{box-shadow:none}.next-btn-text.next-btn-primary{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-primary,.next-btn-text.next-btn-primary.visited,.next-btn-text.next-btn-primary:link,.next-btn-text.next-btn-primary:visited{color:#5584ff}.next-btn-text.next-btn-primary.active,.next-btn-text.next-btn-primary.hover,.next-btn-text.next-btn-primary:active,.next-btn-text.next-btn-primary:focus,.next-btn-text.next-btn-primary:hover{color:#3e71f7;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-btn-secondary{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-secondary,.next-btn-text.next-btn-secondary.visited,.next-btn-text.next-btn-secondary:link,.next-btn-text.next-btn-secondary:visited{color:#666}.next-btn-text.next-btn-secondary.active,.next-btn-text.next-btn-secondary.hover,.next-btn-text.next-btn-secondary:active,.next-btn-text.next-btn-secondary:focus,.next-btn-text.next-btn-secondary:hover{color:#5584ff;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-btn-normal{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-normal,.next-btn-text.next-btn-normal.visited,.next-btn-text.next-btn-normal:link,.next-btn-text.next-btn-normal:visited{color:#333}.next-btn-text.next-btn-normal.active,.next-btn-text.next-btn-normal.hover,.next-btn-text.next-btn-normal:active,.next-btn-text.next-btn-normal:focus,.next-btn-text.next-btn-normal:hover{color:#5584ff;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-large{border-radius:0;padding:0;height:24px;font-size:14px;border-width:0}.next-btn-text.next-large>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn-text.next-large>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text.next-large>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text.next-large>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn-text.next-large>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn-text.next-large>.next-btn-icon.next-icon-alone:before,.next-btn-text.next-large>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text.next-large>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text.next-large.next-btn-loading{padding-left:20px}.next-btn-text.next-large.next-btn-loading:after{width:16px;height:16px;font-size:16px;line-height:16px;left:0;top:50%;text-align:center;margin-top:-8px;margin-right:4px}.next-btn-text.next-large.next-btn-loading>.next-icon{display:none}.next-btn-text.next-large>.next-btn-custom-loading-icon{opacity:0;width:0}.next-btn-text.next-large>.next-btn-custom-loading-icon.show{width:16px;margin-right:4px;opacity:1;transition:all .1s linear}.next-btn-text.next-medium{border-radius:0;padding:0;height:20px;font-size:12px;border-width:0}.next-btn-text.next-medium>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn-text.next-medium>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text.next-medium>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-medium>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn-text.next-medium>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn-text.next-medium>.next-btn-icon.next-icon-alone:before,.next-btn-text.next-medium>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text.next-medium>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-medium.next-btn-loading{padding-left:16px}.next-btn-text.next-medium.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:0;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn-text.next-medium.next-btn-loading>.next-icon{display:none}.next-btn-text.next-medium>.next-btn-custom-loading-icon{opacity:0;width:0}.next-btn-text.next-medium>.next-btn-custom-loading-icon.show{width:12px;margin-right:4px;opacity:1;transition:all .1s linear}.next-btn-text.next-small{border-radius:0;padding:0;height:16px;font-size:12px;border-width:0}.next-btn-text.next-small>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn-text.next-small>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text.next-small>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-small>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn-text.next-small>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn-text.next-small>.next-btn-icon.next-icon-alone:before,.next-btn-text.next-small>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text.next-small>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-small.next-btn-loading{padding-left:16px}.next-btn-text.next-small.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:0;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn-text.next-small.next-btn-loading>.next-icon{display:none}.next-btn-text.next-small>.next-btn-custom-loading-icon{opacity:0;width:0}.next-btn-text.next-small>.next-btn-custom-loading-icon.show{width:12px;margin-right:4px;opacity:1;transition:all .1s linear}.next-btn-text.disabled,.next-btn-text[disabled]{background-color:transparent;border-color:transparent}.next-btn-text.disabled,.next-btn-text.disabled.visited,.next-btn-text.disabled:link,.next-btn-text.disabled:visited,.next-btn-text[disabled],.next-btn-text[disabled].visited,.next-btn-text[disabled]:link,.next-btn-text[disabled]:visited{color:#ccc}.next-btn-text.disabled.active,.next-btn-text.disabled.hover,.next-btn-text.disabled:active,.next-btn-text.disabled:focus,.next-btn-text.disabled:hover,.next-btn-text[disabled].active,.next-btn-text[disabled].hover,.next-btn-text[disabled]:active,.next-btn-text[disabled]:focus,.next-btn-text[disabled]:hover{color:#ccc;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-btn-loading{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-loading,.next-btn-text.next-btn-loading.visited,.next-btn-text.next-btn-loading:link,.next-btn-text.next-btn-loading:visited{color:#333}.next-btn-text.next-btn-loading.active,.next-btn-text.next-btn-loading.hover,.next-btn-text.next-btn-loading:active,.next-btn-text.next-btn-loading:focus,.next-btn-text.next-btn-loading:hover{color:#333;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-loading{pointer-events:none}.next-btn-loading:after{font-family:NextIcon;content:"";opacity:1;visibility:visible;animation:loadingCircle 2s linear infinite}.next-btn-custom-loading{pointer-events:none}.next-btn-ghost{box-shadow:none;border-style:solid}.next-btn-ghost.next-btn-dark{background-color:transparent;border-color:#fff}.next-btn-ghost.next-btn-dark,.next-btn-ghost.next-btn-dark.visited,.next-btn-ghost.next-btn-dark:link,.next-btn-ghost.next-btn-dark:visited{color:#fff}.next-btn-ghost.next-btn-dark.active,.next-btn-ghost.next-btn-dark.hover,.next-btn-ghost.next-btn-dark:active,.next-btn-ghost.next-btn-dark:focus,.next-btn-ghost.next-btn-dark:hover{color:#fff;background-color:hsla(0,0%,100%,.8);border-color:#fff;text-decoration:none}.next-btn-ghost.next-btn-dark.disabled,.next-btn-ghost.next-btn-dark[disabled]{background-color:transparent;border-color:hsla(0,0%,100%,.4)}.next-btn-ghost.next-btn-dark.disabled,.next-btn-ghost.next-btn-dark.disabled.visited,.next-btn-ghost.next-btn-dark.disabled:link,.next-btn-ghost.next-btn-dark.disabled:visited,.next-btn-ghost.next-btn-dark[disabled],.next-btn-ghost.next-btn-dark[disabled].visited,.next-btn-ghost.next-btn-dark[disabled]:link,.next-btn-ghost.next-btn-dark[disabled]:visited{color:hsla(0,0%,100%,.4)}.next-btn-ghost.next-btn-dark.disabled.active,.next-btn-ghost.next-btn-dark.disabled.hover,.next-btn-ghost.next-btn-dark.disabled:active,.next-btn-ghost.next-btn-dark.disabled:focus,.next-btn-ghost.next-btn-dark.disabled:hover,.next-btn-ghost.next-btn-dark[disabled].active,.next-btn-ghost.next-btn-dark[disabled].hover,.next-btn-ghost.next-btn-dark[disabled]:active,.next-btn-ghost.next-btn-dark[disabled]:focus,.next-btn-ghost.next-btn-dark[disabled]:hover{color:hsla(0,0%,100%,.4);background-color:transparent;border-color:hsla(0,0%,100%,.4);text-decoration:none}.next-btn-ghost.next-btn-light{background-color:transparent;border-color:#333}.next-btn-ghost.next-btn-light,.next-btn-ghost.next-btn-light.visited,.next-btn-ghost.next-btn-light:link,.next-btn-ghost.next-btn-light:visited{color:#333}.next-btn-ghost.next-btn-light.active,.next-btn-ghost.next-btn-light.hover,.next-btn-ghost.next-btn-light:active,.next-btn-ghost.next-btn-light:focus,.next-btn-ghost.next-btn-light:hover{color:#999;background-color:rgba(0,0,0,.92);border-color:#333;text-decoration:none}.next-btn-ghost.next-btn-light.disabled,.next-btn-ghost.next-btn-light[disabled]{background-color:transparent;border-color:rgba(0,0,0,.1)}.next-btn-ghost.next-btn-light.disabled,.next-btn-ghost.next-btn-light.disabled.visited,.next-btn-ghost.next-btn-light.disabled:link,.next-btn-ghost.next-btn-light.disabled:visited,.next-btn-ghost.next-btn-light[disabled],.next-btn-ghost.next-btn-light[disabled].visited,.next-btn-ghost.next-btn-light[disabled]:link,.next-btn-ghost.next-btn-light[disabled]:visited{color:rgba(0,0,0,.1)}.next-btn-ghost.next-btn-light.disabled.active,.next-btn-ghost.next-btn-light.disabled.hover,.next-btn-ghost.next-btn-light.disabled:active,.next-btn-ghost.next-btn-light.disabled:focus,.next-btn-ghost.next-btn-light.disabled:hover,.next-btn-ghost.next-btn-light[disabled].active,.next-btn-ghost.next-btn-light[disabled].hover,.next-btn-ghost.next-btn-light[disabled]:active,.next-btn-ghost.next-btn-light[disabled]:focus,.next-btn-ghost.next-btn-light[disabled]:hover{color:rgba(0,0,0,.1);background-color:transparent;border-color:rgba(0,0,0,.1);text-decoration:none}.next-btn-group{position:relative;display:inline-block;vertical-align:middle}.next-btn-group>.next-btn{position:relative;float:left;box-shadow:none}.next-btn-group>.next-btn.active,.next-btn-group>.next-btn:active,.next-btn-group>.next-btn:focus,.next-btn-group>.next-btn:hover{z-index:1}.next-btn-group>.next-btn.disabled,.next-btn-group>.next-btn[disabled]{z-index:0}.next-btn-group .next-btn.next-btn{margin:0 0 0 -1px}.next-btn-group .next-btn:not(:first-child):not(:last-child){border-radius:0}.next-btn-group>.next-btn:first-child{margin:0}.next-btn-group>.next-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.next-btn-group>.next-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.next-btn-group>.next-btn-primary:not(:first-child){border-left-color:hsla(0,0%,100%,.2)}.next-btn-group>.next-btn-primary:not(:first-child):hover{border-left-color:transparent}.next-btn-group>.next-btn-primary:not(:first-child).disabled,.next-btn-group>.next-btn-primary:not(:first-child)[disabled]{border-left-color:#e6e7eb}.next-btn-group[dir=rtl]>.next-btn{float:right}.next-btn-group[dir=rtl] .next-btn.next-btn{margin:0 -1px 0 0}.next-btn-group[dir=rtl]>.next-btn:first-child:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.next-btn-group[dir=rtl]>.next-btn:last-child:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0}.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child){border-right-color:hsla(0,0%,100%,.2)}.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child):hover{border-right-color:transparent}.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child).disabled,.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child)[disabled]{border-right-color:#e6e7eb}.next-btn.next-small[dir=rtl]{border-radius:3px}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small[dir=rtl].next-btn-loading{padding-left:8px;padding-right:24px}.next-btn.next-small[dir=rtl].next-btn-loading:after{right:8px;top:50%;margin-right:0;margin-left:4px}.next-btn.next-medium[dir=rtl]{border-radius:3px}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium[dir=rtl].next-btn-loading{padding-left:12px;padding-right:28px}.next-btn.next-medium[dir=rtl].next-btn-loading:after{right:12px;top:50%;margin-right:0;margin-left:4px}.next-btn.next-large[dir=rtl]{border-radius:3px}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large[dir=rtl].next-btn-loading{padding-left:16px;padding-right:36px}.next-btn.next-large[dir=rtl].next-btn-loading:after{right:16px;top:50%;margin-right:0;margin-left:4px}.next-btn-text[dir=rtl].next-large{border-radius:0}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text[dir=rtl].next-large.next-btn-loading{padding-left:0;padding-right:20px}.next-btn-text[dir=rtl].next-large.next-btn-loading:after{right:0;top:50%;margin-right:0;margin-left:4px}.next-btn-text[dir=rtl].next-medium{border-radius:0}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-medium.next-btn-loading{padding-left:0;padding-right:16px}.next-btn-text[dir=rtl].next-medium.next-btn-loading:after{right:0;top:50%;margin-right:0;margin-left:4px}.next-btn-text[dir=rtl].next-small{border-radius:0}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-small.next-btn-loading{padding-left:0;padding-right:16px}.next-btn-text[dir=rtl].next-small.next-btn-loading:after{right:0;top:50%;margin-right:0;margin-left:4px}.next-dialog[dir=rtl],.next-dialog[dir=rtl] .next-dialog-footer.next-align-left{text-align:right}.next-dialog[dir=rtl] .next-dialog-footer.next-align-center{text-align:center}.next-dialog[dir=rtl] .next-dialog-footer.next-align-right{text-align:left}.next-dialog[dir=rtl] .next-dialog-btn+.next-dialog-btn{margin-right:4px;margin-left:0}.next-dialog[dir=rtl] .next-dialog-close{left:12px;right:auto}.next-dialog{position:fixed;z-index:1001;background:#fff;border:1px solid #dcdee3;border-radius:3px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-align:left;overflow:hidden;animation-duration:.3s;animation-timing-function:ease-in-out;max-width:90%}.next-dialog,.next-dialog *,.next-dialog :after,.next-dialog :before{box-sizing:border-box}.next-dialog-header{padding:12px 20px;border-bottom:0 solid transparent;font-size:16px;background:transparent;color:#333}.next-dialog-body{padding:20px;font-size:12px;color:#666}.next-dialog-footer{padding:12px 20px;border-top:0 solid transparent;background:transparent}.next-dialog-footer.next-align-left{text-align:left}.next-dialog-footer.next-align-center{text-align:center}.next-dialog-footer.next-align-right{text-align:right}.next-dialog-footer-fixed-height{position:absolute;width:100%;bottom:0}.next-dialog-btn+.next-dialog-btn{margin-left:4px}.next-dialog-close{position:absolute;top:12px;right:12px;width:16px;cursor:pointer}.next-dialog-close,.next-dialog-close:link,.next-dialog-close:visited{height:16px;color:#999}.next-dialog-close:hover{background:transparent;color:#333}.next-dialog-close .next-dialog-close-icon.next-icon{position:absolute;top:50%;left:50%;margin-top:-6px;margin-left:-6px;width:12px;height:12px;line-height:12px}.next-dialog-close .next-dialog-close-icon.next-icon:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-dialog-container{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1001;padding:40px;overflow:auto;text-align:center;box-sizing:border-box}.next-dialog-container:before{display:inline-block;vertical-align:middle;width:0;height:100%;content:""}.next-dialog-container .next-dialog{display:inline-block;position:relative;vertical-align:middle}.next-dialog-quick .next-dialog-body{padding:20px}.next-dialog .next-dialog-message.next-message{min-width:300px;padding:0}.next-input{vertical-align:middle;display:inline-table;border-collapse:separate;font-size:0;line-height:1;width:200px;border-spacing:0;transition:all .1s linear;border:1px solid #c4c6cf;background-color:#fff}.next-input,.next-input *,.next-input :after,.next-input :before{box-sizing:border-box}.next-input input{height:100%}.next-input input[type=reset],.next-input input[type=submit]{-webkit-appearance:button;cursor:pointer}.next-input input::-moz-focus-inner{border:0;padding:0}.next-input input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #fff inset}.next-input textarea{resize:none}.next-input input,.next-input textarea{width:100%;border:none;outline:none;padding:0;margin:0;font-weight:400;vertical-align:middle;background-color:transparent;color:#333}.next-input input::-ms-clear,.next-input textarea::-ms-clear{display:none}.next-input.next-small{height:20px;border-radius:3px}.next-input.next-small .next-input-label{padding-left:8px;font-size:12px}.next-input.next-small .next-input-inner{font-size:12px}.next-input.next-small .next-input-control{padding-right:4px}.next-input.next-small input{height:18px;line-height:18px \0;padding:0 4px;font-size:12px}.next-input.next-small input::placeholder{font-size:12px}.next-input.next-small .next-input-text-field{padding:0 4px;font-size:12px;height:18px;line-height:18px}.next-input.next-small .next-icon .next-icon-remote,.next-input.next-small .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-input.next-small .next-input-control{border-radius:0 3px 3px 0}.next-input.next-medium{height:28px;border-radius:3px}.next-input.next-medium .next-input-label{padding-left:8px;font-size:12px}.next-input.next-medium .next-input-inner{font-size:12px}.next-input.next-medium .next-input-control{padding-right:8px}.next-input.next-medium input{height:26px;line-height:26px \0;padding:0 8px;font-size:12px}.next-input.next-medium input::placeholder{font-size:12px}.next-input.next-medium .next-input-text-field{padding:0 8px;font-size:12px;height:26px;line-height:26px}.next-input.next-medium .next-icon .next-icon-remote,.next-input.next-medium .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-input.next-medium .next-input-control{border-radius:0 3px 3px 0}.next-input.next-large{height:40px;border-radius:3px}.next-input.next-large .next-input-label{padding-left:12px;font-size:16px}.next-input.next-large .next-input-inner{font-size:16px}.next-input.next-large .next-input-control{padding-right:8px}.next-input.next-large input{height:38px;line-height:38px \0;padding:0 12px;font-size:16px}.next-input.next-large input::placeholder{font-size:16px}.next-input.next-large .next-input-text-field{padding:0 12px;font-size:16px;height:38px;line-height:38px}.next-input.next-large .next-icon .next-icon-remote,.next-input.next-large .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-input.next-large .next-input-control{border-radius:0 3px 3px 0}.next-input.next-input-textarea{height:auto;border-radius:3px;font-size:0}.next-input.next-input-textarea textarea{color:#333;padding:4px 8px;font-size:12px;border-radius:3px}.next-input.next-input-textarea.next-small textarea{font-size:12px}.next-input.next-input-textarea.next-large textarea{font-size:16px}.next-input.next-input-textarea .next-input-control{display:block;width:auto;border-radius:3px}.next-input.next-input-textarea .next-input-len{padding:0 8px 4px;display:block;text-align:right;width:auto}.next-input-hint-wrap{color:#999;position:relative}.next-input-hint-wrap .next-input-clear{opacity:0;z-index:1;position:absolute}.next-input-hint-wrap .next-input-hint{opacity:1}.next-input .next-icon-eye-close:hover,.next-input .next-icon-eye:hover,.next-input .next-input-clear-icon:hover{cursor:pointer;color:#666}.next-input.next-focus,.next-input:hover{border-color:#a0a2ad;background-color:#fff}.next-input.next-focus .next-input-clear,.next-input:hover .next-input-clear{opacity:1}.next-input.next-focus .next-input-clear+.next-input-hint,.next-input:hover .next-input-clear+.next-input-hint{opacity:0}.next-input .next-input-clear:focus{opacity:1}.next-input .next-input-clear:focus+.next-input-hint{opacity:0}.next-input.next-focus{border-color:#5584ff;background-color:#fff;box-shadow:0 0 0 0 rgba(85,132,255,.2)}.next-input.next-warning{border-color:#ff9300;background-color:#fff}.next-input.next-warning.next-focus,.next-input.next-warning:hover{border-color:#ff9300}.next-input.next-warning.next-focus{box-shadow:0 0 0 0 rgba(255,147,0,.2)}.next-input.next-error{border-color:#ff3000;background-color:#fff}.next-input.next-error.next-focus,.next-input.next-error:hover{border-color:#ff3000}.next-input.next-error.next-focus{box-shadow:0 0 0 0 rgba(255,48,0,.2)}.next-input.next-hidden{display:none}.next-input.next-noborder{border:none}.next-input-control .next-input-len{font-size:12px;line-height:12px;color:#999;display:table-cell;width:1px;vertical-align:bottom}.next-input-control .next-input-len.next-error{color:#ff3000}.next-input-control .next-input-len.next-warning{color:#ff9300}.next-input-control>*{display:table-cell;width:1%;top:0}.next-input-control>:not(:last-child){padding-right:4px}.next-input-control .next-icon{transition:all .1s linear;color:#999}.next-input-control .next-input-warning-icon{color:#ff9300}.next-input-control .next-input-warning-icon:before{content:""}.next-input-control .next-input-success-icon{color:#46bc15}.next-input-control .next-input-success-icon:before{content:""}.next-input-control .next-input-loading-icon{color:#4494f9}.next-input-control .next-input-loading-icon:before{content:"";animation:loadingCircle 1s linear infinite}.next-input-control .next-input-clear-icon:before{content:""}.next-input-label{color:#666}.next-input input::-moz-placeholder,.next-input textarea::-moz-placeholder{color:#999;opacity:1}.next-input input:-ms-input-placeholder,.next-input textarea:-ms-input-placeholder{color:#999}.next-input input::-webkit-input-placeholder,.next-input textarea::-webkit-input-placeholder{color:#999}.next-input.next-disabled{color:#ccc;cursor:not-allowed}.next-input.next-disabled,.next-input.next-disabled:hover{border-color:#e6e7eb;background-color:#f7f8fa}.next-input.next-disabled input,.next-input.next-disabled textarea{color:#ccc}.next-input.next-disabled input::-moz-placeholder,.next-input.next-disabled textarea::-moz-placeholder{color:#ccc;opacity:1}.next-input.next-disabled input:-ms-input-placeholder,.next-input.next-disabled textarea:-ms-input-placeholder{color:#ccc}.next-input.next-disabled input::-webkit-input-placeholder,.next-input.next-disabled textarea::-webkit-input-placeholder{color:#ccc}.next-input.next-disabled .next-input-hint-wrap,.next-input.next-disabled .next-input-label,.next-input.next-disabled .next-input-len{color:#ccc}.next-input.next-disabled .next-input-hint-wrap .next-input-clear{opacity:0}.next-input.next-disabled .next-input-hint-wrap .next-input-hint{opacity:1}.next-input.next-disabled .next-input-hint-wrap .next-input-clear-icon:hover{cursor:not-allowed;color:#ccc}.next-input.next-disabled .next-icon{color:#ccc}.next-input-control,.next-input-inner,.next-input-label{display:table-cell;width:1px;vertical-align:middle;line-height:1;background-color:transparent;white-space:nowrap}.next-input-group{display:inline-table;border-collapse:separate;border-spacing:0;line-height:0;width:100%}.next-input-group,.next-input-group *,.next-input-group :after,.next-input-group :before{box-sizing:border-box}.next-input-group-auto-width{width:100%;border-radius:0!important}.next-input-group>.next-input{border-radius:0}.next-input-group>.next-input.next-focus{position:relative;z-index:1}.next-input-group>.next-input:first-child.next-large,.next-input-group>.next-input:first-child.next-medium,.next-input-group>.next-input:first-child.next-small{border-top-left-radius:3px!important;border-bottom-left-radius:3px!important}.next-input-group>.next-input:last-child.next-large,.next-input-group>.next-input:last-child.next-medium,.next-input-group>.next-input:last-child.next-small{border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.next-input-group-addon{width:1px;display:table-cell;vertical-align:middle;white-space:nowrap}.next-input-group-addon:first-child,.next-input-group-addon:first-child>*{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group-addon:first-child>*{margin-right:-1px}.next-input-group-addon:first-child>.next-focus{position:relative;z-index:1}.next-input-group-addon:first-child>*>.next-input{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group-addon:first-child>*>.next-input.next-focus{position:relative;z-index:1}.next-input-group-addon:last-child,.next-input-group-addon:last-child>*{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group-addon:last-child>*{margin-left:-1px}.next-input-group-addon:last-child>*>.next-input{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group-text{color:#999;background-color:#f2f3f7;text-align:center;border:1px solid #c4c6cf;padding:0 8px}.next-input-group-text:first-child{border-right-width:0}.next-input-group-text:last-child{border-left-width:0}.next-input-group-text.next-disabled{color:#ccc;cursor:not-allowed}.next-input-group-text.next-disabled,.next-input-group-text.next-disabled:hover{border-color:#e6e7eb;background-color:#f7f8fa}.next-input-group-text.next-medium,.next-input-group-text.next-small{font-size:12px;border-radius:3px}.next-input-group-text.next-large{font-size:16px;border-radius:3px}.next-input[dir=rtl].next-small .next-input-label{padding-left:0;padding-right:8px}.next-input[dir=rtl].next-small .next-input-control{padding-right:0;padding-left:4px}.next-input[dir=rtl].next-medium .next-input-label{padding-left:0;padding-right:8px}.next-input[dir=rtl].next-medium .next-input-control{padding-right:0;padding-left:8px}.next-input[dir=rtl].next-large .next-input-label{padding-left:0;padding-right:12px}.next-input[dir=rtl].next-large .next-input-control{padding-right:0;padding-left:8px}.next-input[dir=rtl].next-input-textarea .next-input-len{text-align:left}.next-input[dir=rtl] .next-input-control>:not(:last-child){padding-left:4px;padding-right:0}.next-input-group[dir=rtl]>.next-input:first-child.next-large,.next-input-group[dir=rtl]>.next-input:first-child.next-medium,.next-input-group[dir=rtl]>.next-input:first-child.next-small{border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.next-input-group[dir=rtl]>.next-input:last-child.next-large,.next-input-group[dir=rtl]>.next-input:last-child.next-medium,.next-input-group[dir=rtl]>.next-input:last-child.next-small{border-top-left-radius:3px!important;border-bottom-left-radius:3px!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:first-child,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:first-child.next-large,.next-input-group[dir=rtl] .next-input-group-addon:first-child.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:first-child.next-small,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input.next-small,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input.next-small{border-bottom-right-radius:3px!important;border-top-right-radius:3px!important}.next-input-group[dir=rtl] .next-input-group-addon:first-child>*{margin-left:-1px;border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:last-child,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:last-child.next-large,.next-input-group[dir=rtl] .next-input-group-addon:last-child.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:last-child.next-small,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input.next-small,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input.next-small{border-bottom-left-radius:3px!important;border-top-left-radius:3px!important}.next-input-group[dir=rtl] .next-input-group-addon:last-child>*{margin-right:-1px;border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group[dir=rtl] .next-input-group-text:first-child{border-right-width:1px;border-left:0}.next-input-group[dir=rtl] .next-input-group-text:last-child{border-left-width:1px;border-right:0}.next-row{display:flex}.next-row,.next-row *,.next-row :after,.next-row :before{box-sizing:border-box}.next-row.next-row-wrap{flex-wrap:wrap}@media (min-width:320px){.next-row.next-row-fixed{width:320px}}@media (min-width:480px){.next-row.next-row-fixed{width:480px}}@media (min-width:720px){.next-row.next-row-fixed{width:720px}}@media (min-width:990px){.next-row.next-row-fixed{width:990px}}@media (min-width:1200px){.next-row.next-row-fixed{width:1200px}}@media (min-width:1500px){.next-row.next-row-fixed{width:1500px}}.next-row.next-row-fixed-xxs{width:320px}.next-row.next-row-fixed-xs{width:480px}.next-row.next-row-fixed-s{width:720px}.next-row.next-row-fixed-m{width:990px}.next-row.next-row-fixed-l{width:1200px}.next-row.next-row-fixed-xl{width:1500px}.next-row.next-row-justify-start{justify-content:flex-start}.next-row.next-row-justify-end{justify-content:flex-end}.next-row.next-row-justify-center{justify-content:center}.next-row.next-row-justify-space-between{justify-content:space-between}.next-row.next-row-justify-space-around{justify-content:space-around}.next-row.next-row-align-top{align-items:flex-start}.next-row.next-row-align-bottom{align-items:flex-end}.next-row.next-row-align-center{align-items:center}.next-row.next-row-align-baseline{align-items:baseline}.next-row.next-row-align-stretch{align-items:stretch}.next-col{flex:1}.next-col.next-col-top{align-self:flex-start}.next-col.next-col-bottom{align-self:flex-end}.next-col.next-col-center{align-self:center}@media (min-width:0\0) and (min-resolution:0.001dpcm){.next-row{display:table;width:100%}.next-col{display:table-cell;vertical-align:top}}.next-col-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-24{flex:0 0 100%;width:100%;max-width:100%}@media (min-width:320px){.next-col-xxs-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-xxs-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-xxs-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-xxs-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-xxs-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-xxs-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-xxs-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-xxs-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-xxs-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-xxs-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-xxs-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-xxs-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-xxs-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-xxs-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-xxs-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-xxs-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-xxs-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-xxs-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-xxs-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-xxs-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-xxs-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-xxs-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-xxs-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-xxs-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:480px){.next-col-xs-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-xs-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-xs-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-xs-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-xs-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-xs-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-xs-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-xs-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-xs-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-xs-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-xs-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-xs-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-xs-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-xs-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-xs-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-xs-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-xs-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-xs-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-xs-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-xs-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-xs-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-xs-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-xs-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-xs-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:720px){.next-col-s-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-s-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-s-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-s-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-s-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-s-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-s-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-s-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-s-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-s-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-s-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-s-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-s-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-s-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-s-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-s-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-s-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-s-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-s-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-s-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-s-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-s-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-s-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-s-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:990px){.next-col-m-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-m-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-m-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-m-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-m-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-m-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-m-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-m-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-m-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-m-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-m-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-m-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-m-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-m-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-m-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-m-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-m-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-m-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-m-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-m-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-m-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-m-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-m-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-m-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1200px){.next-col-l-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-l-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-l-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-l-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-l-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-l-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-l-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-l-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-l-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-l-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-l-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-l-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-l-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-l-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-l-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-l-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-l-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-l-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-l-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-l-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-l-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-l-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-l-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-l-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1500px){.next-col-xl-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-xl-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-xl-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-xl-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-xl-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-xl-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-xl-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-xl-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-xl-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-xl-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-xl-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-xl-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-xl-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-xl-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-xl-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-xl-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-xl-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-xl-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-xl-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-xl-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-xl-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-xl-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-xl-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-xl-24{flex:0 0 100%;width:100%;max-width:100%}}.next-col-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-5p5{flex:0 0 100%;width:100%;max-width:100%}@media (min-width:320px){.next-col-xxs-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-xxs-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-xxs-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-xxs-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-xxs-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:480px){.next-col-xs-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-xs-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-xs-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-xs-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-xs-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:720px){.next-col-s-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-s-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-s-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-s-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-s-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:990px){.next-col-m-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-m-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-m-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-m-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-m-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1200px){.next-col-l-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-l-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-l-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-l-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-l-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1500px){.next-col-xl-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-xl-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-xl-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-xl-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-xl-5p5{flex:0 0 100%;width:100%;max-width:100%}}.next-col-fixed-1{flex:0 0 20px;width:20px;max-width:20px}.next-col-fixed-2{flex:0 0 40px;width:40px;max-width:40px}.next-col-fixed-3{flex:0 0 60px;width:60px;max-width:60px}.next-col-fixed-4{flex:0 0 80px;width:80px;max-width:80px}.next-col-fixed-5{flex:0 0 100px;width:100px;max-width:100px}.next-col-fixed-6{flex:0 0 120px;width:120px;max-width:120px}.next-col-fixed-7{flex:0 0 140px;width:140px;max-width:140px}.next-col-fixed-8{flex:0 0 160px;width:160px;max-width:160px}.next-col-fixed-9{flex:0 0 180px;width:180px;max-width:180px}.next-col-fixed-10{flex:0 0 200px;width:200px;max-width:200px}.next-col-fixed-11{flex:0 0 220px;width:220px;max-width:220px}.next-col-fixed-12{flex:0 0 240px;width:240px;max-width:240px}.next-col-fixed-13{flex:0 0 260px;width:260px;max-width:260px}.next-col-fixed-14{flex:0 0 280px;width:280px;max-width:280px}.next-col-fixed-15{flex:0 0 300px;width:300px;max-width:300px}.next-col-fixed-16{flex:0 0 320px;width:320px;max-width:320px}.next-col-fixed-17{flex:0 0 340px;width:340px;max-width:340px}.next-col-fixed-18{flex:0 0 360px;width:360px;max-width:360px}.next-col-fixed-19{flex:0 0 380px;width:380px;max-width:380px}.next-col-fixed-20{flex:0 0 400px;width:400px;max-width:400px}.next-col-fixed-21{flex:0 0 420px;width:420px;max-width:420px}.next-col-fixed-22{flex:0 0 440px;width:440px;max-width:440px}.next-col-fixed-23{flex:0 0 460px;width:460px;max-width:460px}.next-col-fixed-24{flex:0 0 480px;width:480px;max-width:480px}.next-col-fixed-25{flex:0 0 500px;width:500px;max-width:500px}.next-col-fixed-26{flex:0 0 520px;width:520px;max-width:520px}.next-col-fixed-27{flex:0 0 540px;width:540px;max-width:540px}.next-col-fixed-28{flex:0 0 560px;width:560px;max-width:560px}.next-col-fixed-29{flex:0 0 580px;width:580px;max-width:580px}.next-col-fixed-30{flex:0 0 600px;width:600px;max-width:600px}.next-col-offset-1{margin-left:4.16667%}.next-col-offset-2{margin-left:8.33333%}.next-col-offset-3{margin-left:12.5%}.next-col-offset-4{margin-left:16.66667%}.next-col-offset-5{margin-left:20.83333%}.next-col-offset-6{margin-left:25%}.next-col-offset-7{margin-left:29.16667%}.next-col-offset-8{margin-left:33.33333%}.next-col-offset-9{margin-left:37.5%}.next-col-offset-10{margin-left:41.66667%}.next-col-offset-11{margin-left:45.83333%}.next-col-offset-12{margin-left:50%}.next-col-offset-13{margin-left:54.16667%}.next-col-offset-14{margin-left:58.33333%}.next-col-offset-15{margin-left:62.5%}.next-col-offset-16{margin-left:66.66667%}.next-col-offset-17{margin-left:70.83333%}.next-col-offset-18{margin-left:75%}.next-col-offset-19{margin-left:79.16667%}.next-col-offset-20{margin-left:83.33333%}.next-col-offset-21{margin-left:87.5%}.next-col-offset-22{margin-left:91.66667%}.next-col-offset-23{margin-left:95.83333%}.next-col-offset-24{margin-left:100%}@media (min-width:320px){.next-col-xxs-offset-1{margin-left:4.16667%}.next-col-xxs-offset-2{margin-left:8.33333%}.next-col-xxs-offset-3{margin-left:12.5%}.next-col-xxs-offset-4{margin-left:16.66667%}.next-col-xxs-offset-5{margin-left:20.83333%}.next-col-xxs-offset-6{margin-left:25%}.next-col-xxs-offset-7{margin-left:29.16667%}.next-col-xxs-offset-8{margin-left:33.33333%}.next-col-xxs-offset-9{margin-left:37.5%}.next-col-xxs-offset-10{margin-left:41.66667%}.next-col-xxs-offset-11{margin-left:45.83333%}.next-col-xxs-offset-12{margin-left:50%}.next-col-xxs-offset-13{margin-left:54.16667%}.next-col-xxs-offset-14{margin-left:58.33333%}.next-col-xxs-offset-15{margin-left:62.5%}.next-col-xxs-offset-16{margin-left:66.66667%}.next-col-xxs-offset-17{margin-left:70.83333%}.next-col-xxs-offset-18{margin-left:75%}.next-col-xxs-offset-19{margin-left:79.16667%}.next-col-xxs-offset-20{margin-left:83.33333%}.next-col-xxs-offset-21{margin-left:87.5%}.next-col-xxs-offset-22{margin-left:91.66667%}.next-col-xxs-offset-23{margin-left:95.83333%}.next-col-xxs-offset-24{margin-left:100%}}@media (min-width:480px){.next-col-xs-offset-1{margin-left:4.16667%}.next-col-xs-offset-2{margin-left:8.33333%}.next-col-xs-offset-3{margin-left:12.5%}.next-col-xs-offset-4{margin-left:16.66667%}.next-col-xs-offset-5{margin-left:20.83333%}.next-col-xs-offset-6{margin-left:25%}.next-col-xs-offset-7{margin-left:29.16667%}.next-col-xs-offset-8{margin-left:33.33333%}.next-col-xs-offset-9{margin-left:37.5%}.next-col-xs-offset-10{margin-left:41.66667%}.next-col-xs-offset-11{margin-left:45.83333%}.next-col-xs-offset-12{margin-left:50%}.next-col-xs-offset-13{margin-left:54.16667%}.next-col-xs-offset-14{margin-left:58.33333%}.next-col-xs-offset-15{margin-left:62.5%}.next-col-xs-offset-16{margin-left:66.66667%}.next-col-xs-offset-17{margin-left:70.83333%}.next-col-xs-offset-18{margin-left:75%}.next-col-xs-offset-19{margin-left:79.16667%}.next-col-xs-offset-20{margin-left:83.33333%}.next-col-xs-offset-21{margin-left:87.5%}.next-col-xs-offset-22{margin-left:91.66667%}.next-col-xs-offset-23{margin-left:95.83333%}.next-col-xs-offset-24{margin-left:100%}}@media (min-width:720px){.next-col-s-offset-1{margin-left:4.16667%}.next-col-s-offset-2{margin-left:8.33333%}.next-col-s-offset-3{margin-left:12.5%}.next-col-s-offset-4{margin-left:16.66667%}.next-col-s-offset-5{margin-left:20.83333%}.next-col-s-offset-6{margin-left:25%}.next-col-s-offset-7{margin-left:29.16667%}.next-col-s-offset-8{margin-left:33.33333%}.next-col-s-offset-9{margin-left:37.5%}.next-col-s-offset-10{margin-left:41.66667%}.next-col-s-offset-11{margin-left:45.83333%}.next-col-s-offset-12{margin-left:50%}.next-col-s-offset-13{margin-left:54.16667%}.next-col-s-offset-14{margin-left:58.33333%}.next-col-s-offset-15{margin-left:62.5%}.next-col-s-offset-16{margin-left:66.66667%}.next-col-s-offset-17{margin-left:70.83333%}.next-col-s-offset-18{margin-left:75%}.next-col-s-offset-19{margin-left:79.16667%}.next-col-s-offset-20{margin-left:83.33333%}.next-col-s-offset-21{margin-left:87.5%}.next-col-s-offset-22{margin-left:91.66667%}.next-col-s-offset-23{margin-left:95.83333%}.next-col-s-offset-24{margin-left:100%}}@media (min-width:990px){.next-col-m-offset-1{margin-left:4.16667%}.next-col-m-offset-2{margin-left:8.33333%}.next-col-m-offset-3{margin-left:12.5%}.next-col-m-offset-4{margin-left:16.66667%}.next-col-m-offset-5{margin-left:20.83333%}.next-col-m-offset-6{margin-left:25%}.next-col-m-offset-7{margin-left:29.16667%}.next-col-m-offset-8{margin-left:33.33333%}.next-col-m-offset-9{margin-left:37.5%}.next-col-m-offset-10{margin-left:41.66667%}.next-col-m-offset-11{margin-left:45.83333%}.next-col-m-offset-12{margin-left:50%}.next-col-m-offset-13{margin-left:54.16667%}.next-col-m-offset-14{margin-left:58.33333%}.next-col-m-offset-15{margin-left:62.5%}.next-col-m-offset-16{margin-left:66.66667%}.next-col-m-offset-17{margin-left:70.83333%}.next-col-m-offset-18{margin-left:75%}.next-col-m-offset-19{margin-left:79.16667%}.next-col-m-offset-20{margin-left:83.33333%}.next-col-m-offset-21{margin-left:87.5%}.next-col-m-offset-22{margin-left:91.66667%}.next-col-m-offset-23{margin-left:95.83333%}.next-col-m-offset-24{margin-left:100%}}@media (min-width:1200px){.next-col-l-offset-1{margin-left:4.16667%}.next-col-l-offset-2{margin-left:8.33333%}.next-col-l-offset-3{margin-left:12.5%}.next-col-l-offset-4{margin-left:16.66667%}.next-col-l-offset-5{margin-left:20.83333%}.next-col-l-offset-6{margin-left:25%}.next-col-l-offset-7{margin-left:29.16667%}.next-col-l-offset-8{margin-left:33.33333%}.next-col-l-offset-9{margin-left:37.5%}.next-col-l-offset-10{margin-left:41.66667%}.next-col-l-offset-11{margin-left:45.83333%}.next-col-l-offset-12{margin-left:50%}.next-col-l-offset-13{margin-left:54.16667%}.next-col-l-offset-14{margin-left:58.33333%}.next-col-l-offset-15{margin-left:62.5%}.next-col-l-offset-16{margin-left:66.66667%}.next-col-l-offset-17{margin-left:70.83333%}.next-col-l-offset-18{margin-left:75%}.next-col-l-offset-19{margin-left:79.16667%}.next-col-l-offset-20{margin-left:83.33333%}.next-col-l-offset-21{margin-left:87.5%}.next-col-l-offset-22{margin-left:91.66667%}.next-col-l-offset-23{margin-left:95.83333%}.next-col-l-offset-24{margin-left:100%}}@media (min-width:1500px){.next-col-xl-offset-1{margin-left:4.16667%}.next-col-xl-offset-2{margin-left:8.33333%}.next-col-xl-offset-3{margin-left:12.5%}.next-col-xl-offset-4{margin-left:16.66667%}.next-col-xl-offset-5{margin-left:20.83333%}.next-col-xl-offset-6{margin-left:25%}.next-col-xl-offset-7{margin-left:29.16667%}.next-col-xl-offset-8{margin-left:33.33333%}.next-col-xl-offset-9{margin-left:37.5%}.next-col-xl-offset-10{margin-left:41.66667%}.next-col-xl-offset-11{margin-left:45.83333%}.next-col-xl-offset-12{margin-left:50%}.next-col-xl-offset-13{margin-left:54.16667%}.next-col-xl-offset-14{margin-left:58.33333%}.next-col-xl-offset-15{margin-left:62.5%}.next-col-xl-offset-16{margin-left:66.66667%}.next-col-xl-offset-17{margin-left:70.83333%}.next-col-xl-offset-18{margin-left:75%}.next-col-xl-offset-19{margin-left:79.16667%}.next-col-xl-offset-20{margin-left:83.33333%}.next-col-xl-offset-21{margin-left:87.5%}.next-col-xl-offset-22{margin-left:91.66667%}.next-col-xl-offset-23{margin-left:95.83333%}.next-col-xl-offset-24{margin-left:100%}}.next-col-offset-fixed-1{margin-left:20px}.next-col-offset-fixed-2{margin-left:40px}.next-col-offset-fixed-3{margin-left:60px}.next-col-offset-fixed-4{margin-left:80px}.next-col-offset-fixed-5{margin-left:100px}.next-col-offset-fixed-6{margin-left:120px}.next-col-offset-fixed-7{margin-left:140px}.next-col-offset-fixed-8{margin-left:160px}.next-col-offset-fixed-9{margin-left:180px}.next-col-offset-fixed-10{margin-left:200px}.next-col-offset-fixed-11{margin-left:220px}.next-col-offset-fixed-12{margin-left:240px}.next-col-offset-fixed-13{margin-left:260px}.next-col-offset-fixed-14{margin-left:280px}.next-col-offset-fixed-15{margin-left:300px}.next-col-offset-fixed-16{margin-left:320px}.next-col-offset-fixed-17{margin-left:340px}.next-col-offset-fixed-18{margin-left:360px}.next-col-offset-fixed-19{margin-left:380px}.next-col-offset-fixed-20{margin-left:400px}.next-col-offset-fixed-21{margin-left:420px}.next-col-offset-fixed-22{margin-left:440px}.next-col-offset-fixed-23{margin-left:460px}.next-col-offset-fixed-24{margin-left:480px}.next-col-offset-fixed-25{margin-left:500px}.next-col-offset-fixed-26{margin-left:520px}.next-col-offset-fixed-27{margin-left:540px}.next-col-offset-fixed-28{margin-left:560px}.next-col-offset-fixed-29{margin-left:580px}.next-col-offset-fixed-30{margin-left:600px}.next-col-offset-fixed-xxs-1{margin-left:20px}.next-col-offset-fixed-xxs-2{margin-left:40px}.next-col-offset-fixed-xxs-3{margin-left:60px}.next-col-offset-fixed-xxs-4{margin-left:80px}.next-col-offset-fixed-xxs-5{margin-left:100px}.next-col-offset-fixed-xxs-6{margin-left:120px}.next-col-offset-fixed-xxs-7{margin-left:140px}.next-col-offset-fixed-xxs-8{margin-left:160px}.next-col-offset-fixed-xxs-9{margin-left:180px}.next-col-offset-fixed-xxs-10{margin-left:200px}.next-col-offset-fixed-xxs-11{margin-left:220px}.next-col-offset-fixed-xxs-12{margin-left:240px}.next-col-offset-fixed-xxs-13{margin-left:260px}.next-col-offset-fixed-xxs-14{margin-left:280px}.next-col-offset-fixed-xxs-15{margin-left:300px}.next-col-offset-fixed-xxs-16{margin-left:320px}.next-col-offset-fixed-xxs-17{margin-left:340px}.next-col-offset-fixed-xxs-18{margin-left:360px}.next-col-offset-fixed-xxs-19{margin-left:380px}.next-col-offset-fixed-xxs-20{margin-left:400px}.next-col-offset-fixed-xxs-21{margin-left:420px}.next-col-offset-fixed-xxs-22{margin-left:440px}.next-col-offset-fixed-xxs-23{margin-left:460px}.next-col-offset-fixed-xxs-24{margin-left:480px}.next-col-offset-fixed-xxs-25{margin-left:500px}.next-col-offset-fixed-xxs-26{margin-left:520px}.next-col-offset-fixed-xxs-27{margin-left:540px}.next-col-offset-fixed-xxs-28{margin-left:560px}.next-col-offset-fixed-xxs-29{margin-left:580px}.next-col-offset-fixed-xxs-30{margin-left:600px}.next-col-offset-fixed-xs-1{margin-left:20px}.next-col-offset-fixed-xs-2{margin-left:40px}.next-col-offset-fixed-xs-3{margin-left:60px}.next-col-offset-fixed-xs-4{margin-left:80px}.next-col-offset-fixed-xs-5{margin-left:100px}.next-col-offset-fixed-xs-6{margin-left:120px}.next-col-offset-fixed-xs-7{margin-left:140px}.next-col-offset-fixed-xs-8{margin-left:160px}.next-col-offset-fixed-xs-9{margin-left:180px}.next-col-offset-fixed-xs-10{margin-left:200px}.next-col-offset-fixed-xs-11{margin-left:220px}.next-col-offset-fixed-xs-12{margin-left:240px}.next-col-offset-fixed-xs-13{margin-left:260px}.next-col-offset-fixed-xs-14{margin-left:280px}.next-col-offset-fixed-xs-15{margin-left:300px}.next-col-offset-fixed-xs-16{margin-left:320px}.next-col-offset-fixed-xs-17{margin-left:340px}.next-col-offset-fixed-xs-18{margin-left:360px}.next-col-offset-fixed-xs-19{margin-left:380px}.next-col-offset-fixed-xs-20{margin-left:400px}.next-col-offset-fixed-xs-21{margin-left:420px}.next-col-offset-fixed-xs-22{margin-left:440px}.next-col-offset-fixed-xs-23{margin-left:460px}.next-col-offset-fixed-xs-24{margin-left:480px}.next-col-offset-fixed-xs-25{margin-left:500px}.next-col-offset-fixed-xs-26{margin-left:520px}.next-col-offset-fixed-xs-27{margin-left:540px}.next-col-offset-fixed-xs-28{margin-left:560px}.next-col-offset-fixed-xs-29{margin-left:580px}.next-col-offset-fixed-xs-30{margin-left:600px}.next-col-offset-fixed-s-1{margin-left:20px}.next-col-offset-fixed-s-2{margin-left:40px}.next-col-offset-fixed-s-3{margin-left:60px}.next-col-offset-fixed-s-4{margin-left:80px}.next-col-offset-fixed-s-5{margin-left:100px}.next-col-offset-fixed-s-6{margin-left:120px}.next-col-offset-fixed-s-7{margin-left:140px}.next-col-offset-fixed-s-8{margin-left:160px}.next-col-offset-fixed-s-9{margin-left:180px}.next-col-offset-fixed-s-10{margin-left:200px}.next-col-offset-fixed-s-11{margin-left:220px}.next-col-offset-fixed-s-12{margin-left:240px}.next-col-offset-fixed-s-13{margin-left:260px}.next-col-offset-fixed-s-14{margin-left:280px}.next-col-offset-fixed-s-15{margin-left:300px}.next-col-offset-fixed-s-16{margin-left:320px}.next-col-offset-fixed-s-17{margin-left:340px}.next-col-offset-fixed-s-18{margin-left:360px}.next-col-offset-fixed-s-19{margin-left:380px}.next-col-offset-fixed-s-20{margin-left:400px}.next-col-offset-fixed-s-21{margin-left:420px}.next-col-offset-fixed-s-22{margin-left:440px}.next-col-offset-fixed-s-23{margin-left:460px}.next-col-offset-fixed-s-24{margin-left:480px}.next-col-offset-fixed-s-25{margin-left:500px}.next-col-offset-fixed-s-26{margin-left:520px}.next-col-offset-fixed-s-27{margin-left:540px}.next-col-offset-fixed-s-28{margin-left:560px}.next-col-offset-fixed-s-29{margin-left:580px}.next-col-offset-fixed-s-30{margin-left:600px}.next-col-offset-fixed-m-1{margin-left:20px}.next-col-offset-fixed-m-2{margin-left:40px}.next-col-offset-fixed-m-3{margin-left:60px}.next-col-offset-fixed-m-4{margin-left:80px}.next-col-offset-fixed-m-5{margin-left:100px}.next-col-offset-fixed-m-6{margin-left:120px}.next-col-offset-fixed-m-7{margin-left:140px}.next-col-offset-fixed-m-8{margin-left:160px}.next-col-offset-fixed-m-9{margin-left:180px}.next-col-offset-fixed-m-10{margin-left:200px}.next-col-offset-fixed-m-11{margin-left:220px}.next-col-offset-fixed-m-12{margin-left:240px}.next-col-offset-fixed-m-13{margin-left:260px}.next-col-offset-fixed-m-14{margin-left:280px}.next-col-offset-fixed-m-15{margin-left:300px}.next-col-offset-fixed-m-16{margin-left:320px}.next-col-offset-fixed-m-17{margin-left:340px}.next-col-offset-fixed-m-18{margin-left:360px}.next-col-offset-fixed-m-19{margin-left:380px}.next-col-offset-fixed-m-20{margin-left:400px}.next-col-offset-fixed-m-21{margin-left:420px}.next-col-offset-fixed-m-22{margin-left:440px}.next-col-offset-fixed-m-23{margin-left:460px}.next-col-offset-fixed-m-24{margin-left:480px}.next-col-offset-fixed-m-25{margin-left:500px}.next-col-offset-fixed-m-26{margin-left:520px}.next-col-offset-fixed-m-27{margin-left:540px}.next-col-offset-fixed-m-28{margin-left:560px}.next-col-offset-fixed-m-29{margin-left:580px}.next-col-offset-fixed-m-30{margin-left:600px}.next-col-offset-fixed-l-1{margin-left:20px}.next-col-offset-fixed-l-2{margin-left:40px}.next-col-offset-fixed-l-3{margin-left:60px}.next-col-offset-fixed-l-4{margin-left:80px}.next-col-offset-fixed-l-5{margin-left:100px}.next-col-offset-fixed-l-6{margin-left:120px}.next-col-offset-fixed-l-7{margin-left:140px}.next-col-offset-fixed-l-8{margin-left:160px}.next-col-offset-fixed-l-9{margin-left:180px}.next-col-offset-fixed-l-10{margin-left:200px}.next-col-offset-fixed-l-11{margin-left:220px}.next-col-offset-fixed-l-12{margin-left:240px}.next-col-offset-fixed-l-13{margin-left:260px}.next-col-offset-fixed-l-14{margin-left:280px}.next-col-offset-fixed-l-15{margin-left:300px}.next-col-offset-fixed-l-16{margin-left:320px}.next-col-offset-fixed-l-17{margin-left:340px}.next-col-offset-fixed-l-18{margin-left:360px}.next-col-offset-fixed-l-19{margin-left:380px}.next-col-offset-fixed-l-20{margin-left:400px}.next-col-offset-fixed-l-21{margin-left:420px}.next-col-offset-fixed-l-22{margin-left:440px}.next-col-offset-fixed-l-23{margin-left:460px}.next-col-offset-fixed-l-24{margin-left:480px}.next-col-offset-fixed-l-25{margin-left:500px}.next-col-offset-fixed-l-26{margin-left:520px}.next-col-offset-fixed-l-27{margin-left:540px}.next-col-offset-fixed-l-28{margin-left:560px}.next-col-offset-fixed-l-29{margin-left:580px}.next-col-offset-fixed-l-30{margin-left:600px}.next-col-offset-fixed-xl-1{margin-left:20px}.next-col-offset-fixed-xl-2{margin-left:40px}.next-col-offset-fixed-xl-3{margin-left:60px}.next-col-offset-fixed-xl-4{margin-left:80px}.next-col-offset-fixed-xl-5{margin-left:100px}.next-col-offset-fixed-xl-6{margin-left:120px}.next-col-offset-fixed-xl-7{margin-left:140px}.next-col-offset-fixed-xl-8{margin-left:160px}.next-col-offset-fixed-xl-9{margin-left:180px}.next-col-offset-fixed-xl-10{margin-left:200px}.next-col-offset-fixed-xl-11{margin-left:220px}.next-col-offset-fixed-xl-12{margin-left:240px}.next-col-offset-fixed-xl-13{margin-left:260px}.next-col-offset-fixed-xl-14{margin-left:280px}.next-col-offset-fixed-xl-15{margin-left:300px}.next-col-offset-fixed-xl-16{margin-left:320px}.next-col-offset-fixed-xl-17{margin-left:340px}.next-col-offset-fixed-xl-18{margin-left:360px}.next-col-offset-fixed-xl-19{margin-left:380px}.next-col-offset-fixed-xl-20{margin-left:400px}.next-col-offset-fixed-xl-21{margin-left:420px}.next-col-offset-fixed-xl-22{margin-left:440px}.next-col-offset-fixed-xl-23{margin-left:460px}.next-col-offset-fixed-xl-24{margin-left:480px}.next-col-offset-fixed-xl-25{margin-left:500px}.next-col-offset-fixed-xl-26{margin-left:520px}.next-col-offset-fixed-xl-27{margin-left:540px}.next-col-offset-fixed-xl-28{margin-left:560px}.next-col-offset-fixed-xl-29{margin-left:580px}.next-col-offset-fixed-xl-30{margin-left:600px}.next-col.next-col-hidden{display:none}@media (min-width:320px) and (max-width:479px){.next-col.next-col-xxs-hidden{display:none}}@media (min-width:480px) and (max-width:719px){.next-col.next-col-xs-hidden{display:none}}@media (min-width:720px) and (max-width:989px){.next-col.next-col-s-hidden{display:none}}@media (min-width:990px) and (max-width:1199px){.next-col.next-col-m-hidden{display:none}}@media (min-width:1200px) and (max-width:1499px){.next-col.next-col-l-hidden{display:none}}@media (min-width:1500px){.next-col.next-col-xl-hidden{display:none}}.next-row.next-row-hidden{display:none}@media (min-width:320px) and (max-width:479px){.next-row.next-row-xxs-hidden{display:none}}@media (min-width:480px) and (max-width:719px){.next-row.next-row-xs-hidden{display:none}}@media (min-width:720px) and (max-width:989px){.next-row.next-row-s-hidden{display:none}}@media (min-width:990px) and (max-width:1199px){.next-row.next-row-m-hidden{display:none}}@media (min-width:1200px) and (max-width:1499px){.next-row.next-row-l-hidden{display:none}}@media (min-width:1500px){.next-row.next-row-xl-hidden{display:none}}.next-col-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}@media (min-width:320px){.next-col-xxs-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-xxs-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-xxs-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-xxs-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-xxs-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-xxs-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-xxs-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-xxs-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-xxs-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-xxs-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-xxs-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-xxs-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-xxs-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-xxs-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-xxs-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-xxs-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-xxs-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-xxs-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-xxs-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-xxs-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-xxs-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-xxs-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-xxs-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-xxs-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:480px){.next-col-xs-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-xs-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-xs-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-xs-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-xs-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-xs-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-xs-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-xs-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-xs-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-xs-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-xs-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-xs-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-xs-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-xs-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-xs-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-xs-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-xs-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-xs-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-xs-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-xs-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-xs-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-xs-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-xs-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-xs-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:720px){.next-col-s-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-s-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-s-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-s-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-s-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-s-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-s-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-s-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-s-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-s-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-s-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-s-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-s-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-s-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-s-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-s-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-s-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-s-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-s-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-s-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-s-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-s-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-s-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-s-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:990px){.next-col-m-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-m-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-m-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-m-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-m-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-m-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-m-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-m-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-m-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-m-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-m-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-m-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-m-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-m-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-m-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-m-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-m-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-m-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-m-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-m-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-m-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-m-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-m-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-m-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:1200px){.next-col-l-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-l-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-l-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-l-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-l-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-l-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-l-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-l-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-l-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-l-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-l-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-l-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-l-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-l-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-l-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-l-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-l-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-l-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-l-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-l-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-l-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-l-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-l-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-l-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:1500px){.next-col-xl-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-xl-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-xl-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-xl-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-xl-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-xl-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-xl-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-xl-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-xl-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-xl-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-xl-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-xl-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-xl-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-xl-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-xl-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-xl-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-xl-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-xl-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-xl-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-xl-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-xl-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-xl-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-xl-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-xl-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}.next-col-offset-fixed-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-xxs-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-xxs-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-xxs-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-xxs-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-xxs-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-xxs-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-xxs-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-xxs-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-xxs-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-xxs-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-xxs-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-xxs-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-xxs-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-xxs-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-xxs-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-xxs-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-xxs-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-xxs-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-xxs-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-xxs-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-xxs-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-xxs-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-xxs-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-xxs-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-xxs-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-xxs-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-xxs-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-xxs-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-xxs-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-xxs-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-xs-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-xs-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-xs-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-xs-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-xs-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-xs-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-xs-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-xs-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-xs-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-xs-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-xs-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-xs-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-xs-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-xs-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-xs-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-xs-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-xs-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-xs-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-xs-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-xs-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-xs-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-xs-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-xs-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-xs-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-xs-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-xs-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-xs-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-xs-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-xs-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-xs-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-s-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-s-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-s-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-s-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-s-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-s-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-s-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-s-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-s-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-s-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-s-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-s-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-s-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-s-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-s-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-s-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-s-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-s-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-s-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-s-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-s-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-s-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-s-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-s-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-s-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-s-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-s-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-s-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-s-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-s-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-m-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-m-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-m-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-m-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-m-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-m-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-m-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-m-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-m-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-m-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-m-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-m-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-m-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-m-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-m-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-m-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-m-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-m-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-m-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-m-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-m-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-m-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-m-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-m-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-m-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-m-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-m-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-m-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-m-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-m-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-l-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-l-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-l-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-l-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-l-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-l-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-l-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-l-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-l-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-l-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-l-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-l-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-l-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-l-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-l-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-l-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-l-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-l-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-l-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-l-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-l-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-l-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-l-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-l-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-l-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-l-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-l-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-l-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-l-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-l-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-xl-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-xl-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-xl-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-xl-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-xl-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-xl-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-xl-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-xl-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-xl-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-xl-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-xl-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-xl-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-xl-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-xl-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-xl-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-xl-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-xl-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-xl-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-xl-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-xl-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-xl-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-xl-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-xl-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-xl-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-xl-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-xl-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-xl-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-xl-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-xl-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-xl-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-responsive-grid{box-sizing:border-box;display:grid}.next-form,.next-form *,.next-form :after,.next-form :before,.next-responsive-grid *,.next-responsive-grid :after,.next-responsive-grid :before{box-sizing:border-box}.next-form-responsive-grid .next-form-item-control{flex:1}.next-form-responsive-grid .next-form-item{margin-bottom:0}.next-form-responsive-grid .next-form-item.next-left{display:flex}.next-form-responsive-grid.next-small .next-responsive-grid{gap:16px}.next-form-responsive-grid.next-small .next-form-item.next-left .next-form-item-label{line-height:1.4;margin-top:4px;margin-bottom:4px}.next-form-responsive-grid.next-medium .next-responsive-grid{gap:20px}.next-form-responsive-grid.next-medium .next-form-item.next-left .next-form-item-label{line-height:1.4;margin-top:8px;margin-bottom:8px}.next-form-responsive-grid.next-large .next-responsive-grid{gap:24px}.next-form-responsive-grid.next-large .next-form-item.next-left .next-form-item-label{line-height:1.4;margin-top:12px;margin-bottom:12px}.next-form-item{margin-bottom:16px}.next-form-item.has-error .next-form-item-help{color:#ff3000}.next-form-item.has-warning .next-form-item-help{color:#ff9300}.next-form-item .next-form-item-label,.next-form-item .next-form-text-align,.next-form-item p{line-height:28px}.next-form-item .next-form-text-align,.next-form-item p{margin:0}.next-form-item .next-checkbox-group,.next-form-item .next-checkbox-wrapper,.next-form-item .next-radio-group,.next-form-item .next-radio-wrapper,.next-form-item .next-rating{line-height:24px}.next-form-item .next-form-preview{font-size:12px;line-height:28px}.next-form-item .next-form-preview.next-input-textarea>p{font-size:12px;text-align:justify;min-height:16.8px;line-height:1.4;margin-top:5.6px}.next-form-item .next-form-item-label{font-size:12px}.next-form-item.next-large{margin-bottom:20px}.next-form-item.next-large .next-form-item-label,.next-form-item.next-large .next-form-text-align,.next-form-item.next-large p{line-height:40px}.next-form-item.next-large .next-checkbox-group,.next-form-item.next-large .next-checkbox-wrapper,.next-form-item.next-large .next-radio-group,.next-form-item.next-large .next-radio-wrapper,.next-form-item.next-large .next-rating{line-height:39px}.next-form-item.next-large .next-form-preview{font-size:16px;line-height:40px}.next-form-item.next-large .next-form-preview.next-input-textarea>p{font-size:16px;text-align:justify;min-height:22.4px;line-height:1.4;margin-top:8.8px}.next-form-item.next-large .next-switch{margin-top:7px}.next-form-item.next-large .next-form-item-label{font-size:16px}.next-form-item.next-small{margin-bottom:12px}.next-form-item.next-small .next-checkbox-group,.next-form-item.next-small .next-checkbox-wrapper,.next-form-item.next-small .next-form-item-label,.next-form-item.next-small .next-form-text-align,.next-form-item.next-small .next-radio-group,.next-form-item.next-small .next-radio-wrapper,.next-form-item.next-small .next-rating,.next-form-item.next-small p{line-height:20px}.next-form-item.next-small .next-form-preview{font-size:12px;line-height:20px}.next-form-item.next-small .next-form-preview.next-input-textarea>p{font-size:12px;text-align:justify;min-height:16.8px;line-height:1.4;margin-top:1.6px}.next-form-item.next-small .next-form-item-label{font-size:12px}.next-form-item.next-top>.next-form-item-label{margin-bottom:2px}.next-form-item.next-inset .next-form-item-label{padding-right:0;padding-left:0;line-height:inherit}.next-form-item-control .next-form-text-align{margin:0}.next-form-item-control>.next-input,.next-form-item-control>.next-input-group,.next-form-item-fullwidth .next-form-item-control>.next-date-picker,.next-form-item-fullwidth .next-form-item-control>.next-input,.next-form-item-fullwidth .next-form-item-control>.next-input-group,.next-form-item-fullwidth .next-form-item-control>.next-month-picker,.next-form-item-fullwidth .next-form-item-control>.next-range-picker,.next-form-item-fullwidth .next-form-item-control>.next-select,.next-form-item-fullwidth .next-form-item-control>.next-time-picker,.next-form-item-fullwidth .next-form-item-control>.next-year-picker{width:100%}.next-form-item-label{display:inline-block;vertical-align:top;color:#666;text-align:right;padding-right:12px}.next-form-item-label label[required]:before{margin-right:4px;content:"*";color:#ff3000}.next-form-item-label.next-left{text-align:left}.next-form-item-label.next-left>label[required]:before{display:none}.next-form-item-label.next-left>label[required]:after{margin-left:4px;content:"*";color:#ff3000}.next-form-item-help{margin-top:4px;font-size:12px;line-height:1.5;color:#999}.next-form.next-inline .next-form-item{display:inline-block;vertical-align:top}.next-form.next-inline .next-form-item.next-left .next-form-item-control{display:inline-block;vertical-align:top;line-height:0}.next-form.next-inline .next-form-item:not(:last-child){margin-right:20px}.next-form.next-inline .next-form-item.next-large:not(:last-child){margin-right:24px}.next-form.next-inline .next-form-item.next-small:not(:last-child){margin-right:16px}@media screen and (min-width:0\0) and (min-resolution:0.001dpcm){.next-form-item.next-left>.next-form-item-label,.next-form.next-inline .next-form-item.next-left .next-form-item-control{display:table-cell}}.next-form[dir=rtl] .next-form-item-label{text-align:left;padding-left:12px;padding-right:0}.next-form[dir=rtl].next-inline .next-form-item:not(:last-child){margin-left:20px;margin-right:0}.next-form[dir=rtl].next-inline .next-form-item.next-large:not(:last-child){margin-left:24px;margin-right:0}.next-form[dir=rtl].next-inline .next-form-item.next-small:not(:last-child){margin-left:16px;margin-right:0}.filter-panel{text-align:right;padding:10px 0}.users-pagination{float:right;margin-top:20px}.header-container-primary{background:#252a2f}.header-container-normal{background-color:#fff;box-shadow:0 2px 10px 0 rgba(0,0,0,.08)}.header-container .header-body{width:100%;margin:0 auto;height:66px;line-height:66px}.header-container .header-body .logo{margin-left:40px;width:96px;vertical-align:sub}.header-container .header-body .header-menu{float:right}.header-container .header-body .header-menu .header-menu-toggle{display:none;width:19px;margin-right:40px;margin-top:18px;cursor:pointer}.header-container .header-body ul{padding:0;margin:0}.header-container .header-body li{display:inline-block;margin-right:40px}.header-container .header-body .menu-item{font-family:Avenir-Heavy;font-size:14px}.header-container .header-body .menu-item-primary a{color:#fff;opacity:.6;font-family:Avenir-Medium}.header-container .header-body .menu-item-primary-active a,.header-container .header-body .menu-item-primary:hover a{opacity:1}.header-container .header-body .menu-item-normal a{color:#333;opacity:.6;font-family:Avenir-Medium}.header-container .header-body .menu-item-normal-active a,.header-container .header-body .menu-item-normal:hover a{opacity:1}.header-container .header-body .language-switch{float:right;display:inline-block;box-sizing:border-box;width:24px;height:24px;line-height:20px;margin-top:21px;margin-right:40px;text-align:center;border-radius:2px;cursor:pointer;font-family:PingFangSC-Medium;font-size:14px;opacity:.6}.header-container .header-body .logout{float:right;color:#fff;opacity:.6;font-family:Avenir-Medium;margin-right:40px}.header-container .header-body .language-switch:hover{opacity:1}.header-container .header-body .language-switch-primary{border:1px solid #fff;color:#fff}.header-container .header-body .language-switch-normal{border:1px solid #333;color:#333}@media screen and (max-width:640px){.header-container .header-body .logo{margin-left:20px}.header-container .header-body .language-switch{margin-right:20px}.header-container .header-body .header-menu ul{display:none}.header-container .header-body .header-menu .header-menu-toggle{display:inline-block;margin-right:20px}.header-container .header-body .header-menu-open ul{background-color:#f8f8f8;display:inline-block;position:absolute;right:0;top:66px;z-index:100}.header-container .header-body .header-menu-open li{width:200px;display:list-item;padding-left:30px;list-style:none;line-height:40px;margin-right:0}.header-container .header-body .header-menu-open li a{color:#333;display:inline-block;width:100%}.header-container .header-body .header-menu-open li:hover{background:#2e3034}.header-container .header-body .header-menu-open li:hover a{color:#fff;opactiy:1}.header-container .header-body .header-menu-open .menu-item-normal-active,.header-container .header-body .header-menu-open .menu-item-primary-active{background:#2e3034}.header-container .header-body .header-menu-open .menu-item-normal-active a,.header-container .header-body .header-menu-open .menu-item-primary-active a{color:#fff;opactiy:1}}.bone{width:24px;height:2px;position:relative}.bone:before{left:0}.bone:after,.bone:before{position:absolute;content:"";width:6px;height:6px;border-radius:50%;top:-2px}.bone:after{right:0}.bone-dark,.bone-dark:after,.bone-dark:before{background-color:#1161f6}.bone-light,.bone-light:after,.bone-light:before{background-color:#fff;opacity:.8}.footer-container{background:#f8f8f8}.footer-container .footer-body{max-width:1280px;margin:0 auto;padding:40px 40px 0}@media screen and (max-width:640px){.footer-container .footer-body{padding-left:20px;padding-right:20px}}.footer-container .footer-body img{display:block;width:125px;height:26px;margin-bottom:40px}.footer-container .footer-body .cols-container .col{display:inline-block;box-sizing:border-box;vertical-align:top}.footer-container .footer-body .cols-container .col-12{width:50%;padding-right:125px}.footer-container .footer-body .cols-container .col-6{width:25%}.footer-container .footer-body .cols-container h3{font-family:Avenir-Heavy;font-size:18px;color:#333;line-height:18px;margin-bottom:20px}.footer-container .footer-body .cols-container p{font-family:Avenir-Medium;font-size:12px;color:#999;line-height:18px}.footer-container .footer-body .cols-container dl{font-family:Avenir-Heavy;line-height:18px}.footer-container .footer-body .cols-container dt{font-weight:700;font-size:18px;color:#333;margin-bottom:20px}.footer-container .footer-body .cols-container dd{padding:0;margin:0}.footer-container .footer-body .cols-container dd a{text-decoration:none;display:block;font-size:14px;color:#999;margin:10px 0}.footer-container .footer-body .cols-container dd a:hover{color:#2e3034}.footer-container .footer-body .copyright{margin-top:44px;border-top:1px solid #ccc;min-height:60px;line-height:20px;text-align:center;font-family:Avenir-Medium;font-size:12px;color:#999;display:flex;align-items:center}.footer-container .footer-body .copyright span{display:inline-block;margin:0 auto}@media screen and (max-width:640px){.footer-container .footer-body .cols-container .col{width:100%;text-align:center;padding:0}}.button{box-sizing:border-box;display:inline-block;height:48px;line-height:48px;min-width:140px;font-family:Avenir-Heavy;font-size:16px;color:#fff;text-align:center;border-radius:4px;text-decoration:none}.button-primary{background:#4190ff}.button-normal{background:transparent;border:1px solid #fff}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2:before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{color:#0366d6;text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom:1px solid #dfe2e5}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{clear:both}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{font-size:11px;border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eaecef}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body code{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.markdown-body pre code{display:block;overflow-x:auto;padding:.5em;background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-link,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212}.hljs-addition,.hljs-deletion{display:inline-block;width:100%}.hljs-deletion{background-color:#600}*{padding:0;margin:0}a{text-decoration:none}h1,h2,h3,h4,h5,h6{font-weight:400}.home-page .top-section{height:720px}.home-page .top-section .vertical-middle{width:100%}.home-page .top-section .product-logo{margin:0 auto}.home-page .top-section .button-area,.home-page .top-section .product-desc{text-align:center}.home-page .top-section .button-area .button:first-child{margin-right:20px}.home-page .top-section .version-note{text-align:center;margin:22px 0 10px}.home-page .top-section .version-note a{text-decoration:none;display:inline-block;font-family:Avenir-Heavy;font-size:14px;color:#fff;text-align:center;background:#46484b;border-radius:2px;line-height:24px;padding:0 6px;margin-right:10px}.home-page .top-section .release-date{font-family:Avenir-Medium;font-size:12px;color:#999;text-align:center}.home-page .function-section{max-width:832px;margin:0 auto;box-sizing:border-box;padding:82px 0}.home-page .function-section h3{font-family:Avenir-Heavy;font-size:36px;text-align:center;font-weight:400}.home-page .function-section .bone{margin:0 auto 45px}.home-page .function-section .func-item{margin-bottom:30px;position:relative}.home-page .function-section .func-item .col{display:inline-flex;align-items:center;vertical-align:middle;margin:0 auto;width:50%;max-width:750px;min-height:325px}.home-page .function-section .func-item .col img{width:325px}.home-page .function-section .func-item .col h4{font-weight:400;font-family:Avenir-Heavy;font-size:24px;color:#333;margin-bottom:20px}.home-page .function-section .func-item .col p{opacity:.8;font-family:Avenir-Medium;font-size:18px;color:#999;margin:0}.home-page .function-section .func-item .img{display:inline-block;text-align:center}@media screen and (max-width:830px){.home-page .function-section .func-item{text-align:center}.home-page .function-section .func-item .col{width:100%}.home-page .function-section .func-item .img{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);opacity:.1}}.home-page .feature-section{background:#2e3034}.home-page .feature-section .feature-section-body{max-width:1280px;margin:0 auto;position:relative;padding:80px 40px;color:#fff}.home-page .feature-section .feature-section-body h3{font-family:Avenir-Heavy;font-size:36px;text-align:center;margin:0;font-weight:400}.home-page .feature-section .feature-section-body .bone{margin:0 auto 45px}.home-page .feature-section .feature-section-body .feature-list{list-style:none;padding:0;margin:0}.home-page .feature-section .feature-section-body .feature-list .feature-list-item{vertical-align:top;display:inline-block;margin-bottom:48px;width:50%}.home-page .feature-section .feature-section-body .feature-list .feature-list-item ul{list-style:disc;padding-left:14px}.home-page .feature-section .feature-section-body .feature-list .feature-list-item ul li{font-family:Avenir-Medium;font-size:14px;color:#999}.home-page .feature-section .feature-section-body .feature-list .feature-list-item img{vertical-align:top;width:34px;margin-right:20px}.home-page .feature-section .feature-section-body .feature-list .feature-list-item div{display:inline-block;width:80%}.home-page .feature-section .feature-section-body .feature-list .feature-list-item div h4{font-family:Avenir-Heavy;font-size:20px;margin:5px 0 20px}.home-page .feature-section .feature-section-body .feature-list .feature-list-item div p{font-family:Avenir-Medium;font-size:14px;line-height:20px;color:#999}@media screen and (max-width:768px){.home-page .feature-section .feature-section-body .feature-list .feature-list-item{width:100%}}@media screen and (max-width:640px){.home-page .feature-section-body{padding-left:20px;padding-right:20px}}.product-nav-list li.selected a{background-color:#f4f6f8}.main-container{height:calc(100vh - 66px)}.main-container .left-panel,.main-container .right-panel{float:left;height:100%}.main-container .left-panel{width:180px;background-color:#eaedf1}.main-container .right-panel{width:calc(100% - 180px);padding:10px;overflow:scroll}.main-container .nav-title{margin:0;text-align:center;font-size:14px;font-weight:700;line-height:70px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background-color:#d9dee4}.main-container .nav-title span{margin-left:5px}.main-container .nav-menu{padding:0;background:transparent;border:0;line-height:40px}.main-container .nav-menu .first-menu>.next-menu-item-inner,.main-container .nav-menu div.next-menu-item{color:#333}.main-container .nav-menu .next-menu-item-inner{height:40px;color:#666}.main-container .nav-menu .current-path{background-color:#f2f3f7}.main-container .go-back{text-align:center;color:#546478;font-size:20px;font-weight:700;padding:10px 0;margin-top:14px;cursor:pointer}.next-card,.next-card:after,.next-card:before{box-sizing:border-box}.next-card[dir=rtl] .next-card-extra{left:0;right:auto}.next-card[dir=rtl] .next-card-title:before{right:0;left:auto}.next-card[dir=rtl] .next-card-subtitle{float:left;padding-right:8px;padding-left:0}.next-card[dir=rtl] .next-card-head-show-bullet .next-card-title{padding-left:0;padding-right:8px}.next-card,.next-card *,.next-card :after,.next-card :before{box-sizing:border-box}.next-card{min-width:100px;border:1px solid #dcdee3;border-radius:3px;box-shadow:none;background:#fff;overflow:hidden}.next-card-head{background:#fff;padding-left:16px;padding-right:16px}.next-card-head-show-bullet .next-card-title{padding-left:8px}.next-card-head-show-bullet .next-card-title:before{content:"";display:inline-block;height:16px;width:3px;background:#5584ff;position:absolute;left:0;top:calc(50% - 8px)}.next-card-head-main{position:relative;margin-top:8px;margin-bottom:0;height:40px;line-height:40px}.next-card-title{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:80%;height:100%;color:#333;font-size:16px;font-weight:400}.next-card-subtitle{font-size:12px;color:#666;padding-left:8px}.next-card-extra{position:absolute;right:0;top:0;height:100%;font-size:12px;color:#5584ff}.next-card-body{padding-bottom:12px;padding-left:16px;padding-right:16px}.next-card-show-divider .next-card-head-main{border-bottom:1px solid #e6e7eb}.next-card-show-divider .next-card-body{padding-top:12px}.next-card-hide-divider .next-card-body{padding-top:0}.next-card—free{padding:0}.next-card-content{overflow:hidden;transition:all .3s ease;position:relative}.next-card-footer .next-icon{transition:all .1s linear}.next-card-footer .next-icon.expand{transform-origin:50% 47%;transform:rotate(180deg)}.next-card-header{background:#fff;padding:0 16px;margin-bottom:12px;margin-top:12px}.next-card-media,.next-card-media>*{display:block;background-size:cover;background-repeat:no-repeat;background-position:50%;object-fit:cover;width:100%}.next-card-header-titles{overflow:hidden}.next-card-header-extra{float:right;text-align:right}.next-card-header-extra .next--btn{margin-left:12px;vertical-align:middle}.next-card-header-title{color:#333;font-size:16px;font-weight:400;line-height:1.5}.next-card-header-subtitle{font-size:12px;color:#666}.next-card-actions{display:block;padding:12px 16px}.next-card-actions .next-btn:not(:last-child){margin-right:12px;vertical-align:middle}.next-card-divider{border-style:none;width:100%;margin:0;position:relative}.next-card-divider:before{content:"";display:block;border-bottom:1px solid #e6e7eb}.next-card-divider--inset{padding:0 16px}.next-card-content-container{margin-top:12px;padding-bottom:12px;padding-left:16px;padding-right:16px;font-size:12px;line-height:1.5;color:#666}@keyframes slashStar{0%{opacity:1}to{opacity:0}}.home-page .top-section{position:relative;height:100vh}.home-page .top-section .login-panel{position:absolute;right:40px;width:480px;height:540px;top:90px;border:0}.home-page .top-section .login-panel input,.home-page .top-section .login-panel input::-webkit-input-placeholder{font-size:16px}.home-page .top-section .login-panel .login-header{width:100%;line-height:45px;font-size:32px;margin-top:58px;text-align:center}.home-page .top-section .login-panel .login-form{width:360px;margin:80px auto auto}.home-page .top-section .login-panel .login-form input{height:60px}.home-page .top-section .login-panel .login-form button{width:100%;height:60px;font-size:16px;background:#4190ff 100%;color:#fff;border:0}.home-page .top-section .animation{position:absolute;width:6px;height:6px;border-radius:50%;background-color:#1be1f6}.home-page .top-section .animation1{left:15%;top:70%;animation:slashStar 2s ease-in-out .3s infinite}.home-page .top-section .animation2{left:34%;top:35%;animation:slashStar 2s ease-in-out 1.2s infinite}.home-page .top-section .animation3{left:53%;top:20%;animation:slashStar 2s ease-in-out .5s infinite}.home-page .top-section .animation4{left:72%;top:64%;animation:slashStar 2s ease-in-out .8s infinite}.home-page .top-section .animation5{left:87%;top:30%;animation:slashStar 2s ease-in-out 1.5s infinite}.home-page .top-section .vertical-middle{position:absolute;left:0;top:50%;margin-top:-47px;transform:translateY(-50%)}.home-page .top-section .product-area{width:600px;margin-left:40px}.home-page .top-section .product-logo{display:block;width:257px;height:50px;margin:0}.home-page .top-section .product-desc{opacity:.8;font-family:Avenir-Medium;font-size:24px;color:#fff;max-width:780px;margin:12px auto 30px;text-align:left}.next-table{position:relative}.next-table,.next-table *,.next-table :after,.next-table :before{box-sizing:border-box}.next-table.next-table-layout-fixed table{table-layout:fixed}.next-table.next-table-layout-auto table{table-layout:auto}.next-table.next-table-small .next-table-prerow .next-table-cell-wrapper,.next-table.next-table-small td .next-table-cell-wrapper,.next-table.next-table-small th .next-table-cell-wrapper{padding:8px}.next-table table{border-collapse:collapse;border-spacing:0;width:100%;background:#fff}.next-table table tr:first-child td{border-top-width:0}.next-table th{padding:0;background:#ebecf0;color:#333;text-align:left;font-weight:400;border:1px solid #dcdee3}.next-table th .next-table-cell-wrapper{padding:12px 16px;overflow:hidden;text-overflow:ellipsis;word-break:break-all}.next-table th.next-table-prerow .next-table-cell-wrapper{padding:12px 16px}.next-table-affix{z-index:1;overflow:hidden}.next-table-header-resizable{position:relative}.next-table-header-resizable .next-table-resize-handler{position:absolute;right:0;top:0;bottom:0;width:3px;background:transparent;cursor:ew-resize}.next-table td{padding:0;border:1px solid #dcdee3}.next-table td .next-table-cell-wrapper{padding:12px 16px;overflow:hidden;text-overflow:ellipsis;word-break:break-all}.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow,.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow,.next-table td .next-table-cell-wrapper .next-table-tree-placeholder{margin-right:8px;outline:0;cursor:pointer}.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow .next-icon-remote,.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow:before{width:12px;font-size:12px;line-height:inherit}.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow:before{content:""}.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow .next-icon-remote,.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow:before{width:12px;font-size:12px;line-height:inherit}.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow:before{content:""}.next-table td.next-table-prerow .next-table-cell-wrapper{padding:12px 16px}.next-table .next-table-expanded .next-table-cell-wrapper,.next-table .next-table-selection .next-table-cell-wrapper{overflow:visible}.next-table.no-header table tr:first-child td{border-top-width:1px}.next-table.only-bottom-border{border-width:0}.next-table.only-bottom-border .next-table-expanded-row td,.next-table.only-bottom-border .next-table-expanded-row th,.next-table.only-bottom-border td,.next-table.only-bottom-border th{border-width:0 0 1px}.next-table.only-bottom-border table tr td:first-child,.next-table.only-bottom-border table tr th:first-child{border-left-width:0}.next-table-loading{display:block}.next-table.zebra tr:nth-child(odd) td{background:#fff}.next-table.zebra tr:nth-child(2n) td{background:#f7f8fa}.next-table.zebra .next-table-cell.hovered,.next-table.zebra .next-table-row.hovered td,.next-table.zebra .next-table-row.selected td{background:#f2f3f7;color:#333}.next-table-empty{color:#a0a2ad;padding:32px 0;text-align:center}.next-table-expanded-row td{border-width:0}.next-table-expanded-row td:first-child{border-left-width:1px}.next-table-expanded-row td:last-child{border-right-width:1px}.next-table-expanded-row:last-child td{border-bottom-width:1px}.next-table-expanded-row .next-table .last td{border-bottom-width:0}.next-table-filter-footer{margin:10px 10px 0}.next-table-filter-footer button{margin-right:5px}.next-table-row{transition:all .1s linear;background:#fff;color:#333}.next-table-row.hidden{display:none}.next-table-cell.hovered,.next-table-row.hovered,.next-table-row.selected{background:#f2f3f7;color:#333}.next-table-tree-placeholder{display:inline-block;width:12px}.last .next-table-expanded-row td{border-bottom-width:1px}.next-table-body,.next-table-header{overflow:auto;font-size:12px}.next-table-header{margin-bottom:-20px;padding-bottom:20px;overflow:-moz-scrollbars-none;-ms-overflow-style:none;scrollbar-width:none}.next-table-header::-webkit-scrollbar{display:none}.next-table-body{font-size:12px;position:relative}.next-table-fixed{border:1px solid #dcdee3}.next-table-fixed table{table-layout:fixed}.next-table-fixed .next-table-header{background:#ebecf0}.next-table-fixed table tr td:first-child,.next-table-fixed table tr th:first-child{border-left-width:0}.next-table-fixed .next-table-header th{border-top-width:0}.next-table-fixed .next-table-header tr th:last-child{border-right-width:0}.next-table-fixed .next-table-body td{border-top-width:0}.next-table-fixed .next-table-body tr:last-child td{border-bottom-width:0}.next-table-fixed .next-table-body tr td:last-child{border-right-width:0}.next-table-fixed.next-table-group table tr td:first-child,.next-table-fixed.next-table-group table tr th:first-child{border-left-width:1px}.next-table-fixed.next-table-group .next-table-header th{border-top-width:1px}.next-table-fixed.next-table-group .next-table-header tr th:last-child{border-right-width:1px}.next-table-fixed.next-table-group .next-table-body td{border-top-width:1px}.next-table-fixed.next-table-group .next-table-body tr:last-child td{border-bottom-width:1px}.next-table-fixed.next-table-group .next-table-body tr td:last-child{border-right-width:1px}.next-table-lock .next-table-body{overflow-x:auto;overflow-y:visible}.next-table-group{border-width:0}.next-table-group .next-table-body{margin-top:8px}.next-table-group .next-table-body table{margin-bottom:8px}.next-table-group .next-table-body table tr:first-child td{border-top-width:1px}.next-table-group .next-table-group-footer td,.next-table-group .next-table-group-header td{background:#ebecf0;color:#333}.next-table-group .next-table-row.hovered,.next-table-group .next-table-row.selected{background:#fff;color:#333}.next-table-lock{position:relative}.next-table-lock table{table-layout:fixed}.next-table-header-inner{overflow:unset}.next-table-wrap-empty .next-table-lock-left td,.next-table-wrap-empty .next-table-lock-right td{border:none}.next-table-wrap-empty .next-table-lock-left .next-table-empty,.next-table-wrap-empty .next-table-lock-right .next-table-empty{display:none}.next-table-wrap-empty>.next-table-inner>.next-table-body>table{table-layout:auto}.next-table-lock-left,.next-table-lock-right{position:absolute;left:0;top:0;z-index:1;border:0;transition:box-shadow .3s ease;overflow:hidden}.next-table-lock-left table,.next-table-lock-right table{width:auto}.next-table-lock-left .next-table-body,.next-table-lock-right .next-table-body{overflow-y:scroll;overflow-x:hidden;margin-right:-20px;padding-right:0}.next-table-lock-right{right:0;left:auto}.next-table-lock-right table tr td:first-child,.next-table-lock-right table tr th:first-child{border-left-width:1px}.next-table-lock-right.shadow{box-shadow:-2px 0 3px rgba(0,0,0,.12)}.next-table-lock-left.shadow{box-shadow:2px 0 3px rgba(0,0,0,.12)}.next-table-filter{line-height:1}.next-table-sort{position:relative;width:16px;display:inline-block;line-height:1}.next-table-sort:focus{outline:0}.next-table-sort>a:before{content:" ";display:inline-block;vertical-align:middle}.next-table-sort .next-icon{position:absolute;left:-2px;color:#333}.next-table-sort .next-icon .next-icon-remote,.next-table-sort .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-table-sort .current .next-icon{color:#5584ff}.next-table-sort .next-icon-ascending{left:2px}.next-table-filter{cursor:pointer;width:20px;display:inline-block}.next-table-filter:focus{outline:0}.next-table-filter .next-icon{color:#333}.next-table-filter .next-icon .next-icon-remote,.next-table-filter .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-table-header-icon{margin-left:8px}.next-table-expanded-ctrl{cursor:pointer}.next-table-expanded-ctrl:focus{outline:0}.next-table-expanded-ctrl.disabled{color:#999}.next-table-expanded-ctrl .next-table-expand-unfold .next-icon-remote,.next-table-expanded-ctrl .next-table-expand-unfold:before{width:12px;font-size:12px;line-height:inherit}.next-table-expanded-ctrl .next-table-expand-unfold:before{content:""}.next-table-expanded-ctrl .next-table-expand-fold .next-icon-remote,.next-table-expanded-ctrl .next-table-expand-fold:before{width:12px;font-size:12px;line-height:inherit}.next-table-expanded-ctrl .next-table-expand-fold:before{content:""}.next-table[dir=rtl] th{text-align:right}.next-table[dir=rtl] .next-table-header-resizable .next-table-resize-handler{right:auto;left:0}.next-table[dir=rtl] td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow,.next-table[dir=rtl] td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow,.next-table[dir=rtl] td .next-table-cell-wrapper .next-table-tree-placeholder{margin-left:3px;margin-right:0;float:right}.next-table[dir=rtl] .next-table-expanded-row td:first-child{border-left-width:0;border-right-width:1px}.next-table[dir=rtl] .next-table-expanded-row td:last-child{border-left-width:1px;border-right-width:0}.next-table[dir=rtl].only-bottom-border .next-table-expanded-row td,.next-table[dir=rtl].only-bottom-border .next-table-expanded-row th{border-width:0 0 1px}.next-table[dir=rtl] .next-table-filter-footer button{margin-left:5px;margin-right:0}.next-table[dir=rtl] .next-table-lock-left,.next-table[dir=rtl] .next-table-lock-right{left:auto;right:0}.next-table[dir=rtl] .next-table-lock-right{right:auto;left:0}.next-table[dir=rtl] .next-table-lock-right table tr td:first-child,.next-table[dir=rtl] .next-table-lock-right table tr th:first-child{border-right-width:1px}.next-table[dir=rtl] .next-table-lock-right.shadow{box-shadow:2px 0 3px rgba(0,0,0,.12)}.next-table[dir=rtl] .next-table-lock-left.shadow{box-shadow:-2px 0 3px rgba(0,0,0,.12)}.next-table[dir=rtl] .next-table-sort .next-icon{right:0;left:auto}.next-table[dir=rtl] .next-table-sort .next-icon-ascending{right:4px;left:auto}.next-table[dir=rtl] .next-table-filter{margin-right:5px;margin-left:0}.next-table-fixed[dir=rtl] table tr td:first-child,.next-table-fixed[dir=rtl] table tr th:first-child{border-left-width:1px;border-right-width:0}.next-table-fixed[dir=rtl] .next-table-body tr td:last-child,.next-table-fixed[dir=rtl] .next-table-header tr th:last-child{border-left-width:1px}.next-balloon{position:absolute;max-width:300px;border-style:solid;border-radius:3px;font-size:12px;font-weight:400;animation-duration:.3s;animation-timing-function:ease-in-out;word-wrap:break-all;word-wrap:break-word;z-index:0}.next-balloon,.next-balloon *,.next-balloon :after,.next-balloon :before{box-sizing:border-box}.next-balloon:focus,.next-balloon :focus{outline:0}.next-balloon-primary{color:#333;border-color:#4494f9;background-color:#e3f2fd;box-shadow:0 1px 3px 0 rgba(0,0,0,.12);border-width:1px}.next-balloon-primary .next-balloon-close{position:absolute;top:12px;right:12px;font-size:12px;cursor:pointer;color:#999}.next-balloon-primary .next-balloon-close .next-icon{width:12px;height:12px;line-height:12px}.next-balloon-primary .next-balloon-close .next-icon:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-balloon-primary .next-balloon-close :hover{color:#333}.next-balloon-primary:after{position:absolute;width:12px;height:12px;content:"";transform:rotate(45deg);box-sizing:content-box!important;border:1px solid #4494f9;background-color:#e3f2fd;z-index:-1}.next-balloon-primary.next-balloon-top:after{top:-7px;left:calc(50% + -7px);border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-right:after{top:calc(50% + -7px);right:-7px;border-left:none;border-bottom:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-bottom:after{bottom:-7px;left:calc(50% + -7px);border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-left:after{top:calc(50% + -7px);left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-left-top:after{top:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-left-bottom:after{bottom:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-right-top:after{top:12px;right:-7px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-right-bottom:after{right:-7px;bottom:12px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-top-left:after{top:-7px;left:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-top-right:after{top:-7px;right:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-bottom-left:after{bottom:-7px;left:12px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-bottom-right:after{right:12px;bottom:-7px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal{color:#333;border-color:#dcdee3;background-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-width:1px}.next-balloon-normal .next-balloon-close{position:absolute;top:12px;right:12px;font-size:12px;cursor:pointer;color:#999}.next-balloon-normal .next-balloon-close .next-icon{width:12px;height:12px;line-height:12px}.next-balloon-normal .next-balloon-close .next-icon:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-balloon-normal .next-balloon-close :hover{color:#666}.next-balloon-normal:after{position:absolute;width:12px;height:12px;content:"";transform:rotate(45deg);box-sizing:content-box!important;border:1px solid #dcdee3;background-color:#fff;z-index:-1}.next-balloon-normal.next-balloon-top:after{top:-7px;left:calc(50% + -7px);border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-right:after{top:calc(50% + -7px);right:-7px;border-left:none;border-bottom:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-bottom:after{bottom:-7px;left:calc(50% + -7px);border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-left:after{top:calc(50% + -7px);left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-left-top:after{top:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-left-bottom:after{bottom:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-right-top:after{top:12px;right:-7px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-right-bottom:after{right:-7px;bottom:12px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-top-left:after{top:-7px;left:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-top-right:after{top:-7px;right:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-bottom-left:after{bottom:-7px;left:12px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-bottom-right:after{right:12px;bottom:-7px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon.visible{display:block}.next-balloon.hidden{display:none}.next-balloon-medium{padding:16px}.next-balloon-closable{padding:16px 40px 16px 16px}.next-balloon-tooltip{box-sizing:border-box;position:absolute;max-width:300px;border-radius:3px;font-size:12px;font-weight:400;z-index:0;word-wrap:break-all;word-wrap:break-word;color:#333;background-color:#f2f3f7;box-shadow:none;border:1px solid #dcdee3}.next-balloon-tooltip *,.next-balloon-tooltip :after,.next-balloon-tooltip :before{box-sizing:border-box}.next-balloon-tooltip:after{position:absolute;width:12px;height:12px;content:"";transform:rotate(45deg);box-sizing:content-box!important;border:1px solid #dcdee3;background-color:#f2f3f7;z-index:-1}.next-balloon-tooltip-top:after{top:-7px;left:calc(50% + -7px);border-right:none;border-bottom:none}.next-balloon-tooltip-right:after{top:calc(50% + -7px);right:-7px;border-left:none;border-bottom:none}.next-balloon-tooltip-bottom:after{bottom:-7px;left:calc(50% + -7px);border-top:none;border-left:none}.next-balloon-tooltip-left:after{top:calc(50% + -7px);left:-7px;border-top:none;border-right:none}.next-balloon-tooltip-left-top:after{top:12px;left:-7px;border-top:none;border-right:none}.next-balloon-tooltip-left-bottom:after{bottom:12px;left:-7px;border-top:none;border-right:none}.next-balloon-tooltip-right-top:after{top:12px;right:-7px;border-bottom:none;border-left:none}.next-balloon-tooltip-right-bottom:after{right:-7px;bottom:12px;border-bottom:none;border-left:none}.next-balloon-tooltip-top-left:after{top:-7px;left:12px;border-right:none;border-bottom:none}.next-balloon-tooltip-top-right:after{top:-7px;right:12px;border-right:none;border-bottom:none}.next-balloon-tooltip-bottom-left:after{bottom:-7px;left:12px;border-top:none;border-left:none}.next-balloon-tooltip-bottom-right:after{right:12px;bottom:-7px;border-top:none;border-left:none}.next-balloon-tooltip.visible{display:block}.next-balloon-tooltip.hidden{display:none}.next-balloon-tooltip-medium{padding:8px}.next-balloon[dir=rtl].next-balloon-primary .next-balloon-close{left:12px;right:auto}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-right:after{left:-7px;right:auto;border-right:none;border-top:none;border-left:inherit;border-bottom:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-left-bottom:after,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-left-top:after,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-left:after{right:-7px;left:auto;border-left:none;border-bottom:none;border-right:inherit;border-top:inherit;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-right-bottom:after,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-right-top:after{left:-7px;right:auto;border-right:none;border-top:none;border-bottom:inherit;border-left:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-top-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-top-right:after{right:auto;left:12px}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-bottom-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-normal .next-balloon-close,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-bottom-right:after{left:12px;right:auto}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-right:after{left:-7px;right:auto;border-right:none;border-top:none;border-left:inherit;border-bottom:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-left-bottom:after,.next-balloon[dir=rtl].next-balloon-normal.next-balloon-left-top:after,.next-balloon[dir=rtl].next-balloon-normal.next-balloon-left:after{right:-7px;left:auto;border-left:none;border-bottom:none;border-right:inherit;border-top:inherit;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-right-bottom:after,.next-balloon[dir=rtl].next-balloon-normal.next-balloon-right-top:after{left:-7px;right:auto;border-right:none;border-top:none;border-bottom:inherit;border-left:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-top-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-top-right:after{right:auto;left:12px}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-bottom-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-bottom-right:after{left:12px;right:auto}.next-balloon[dir=rtl].next-balloon-closable{padding:16px 16px 16px 40px}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-right:after{left:-7px;right:auto;border-top:none;border-right:none;border-left:inherit;border-bottom:inherit}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-left-bottom:after,.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-left-top:after,.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-left:after{right:-7px;left:auto;border-top:inherit;border-right:inherit;border-left:none;border-bottom:none}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-right-bottom:after,.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-right-top:after{left:-7px;right:auto;border-top:none;border-right:none;border-left:inherit;border-bottom:inherit}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-top-left:after{right:12px;left:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-top-right:after{left:12px;right:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-bottom-left:after{right:12px;left:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-bottom-right:after{left:12px;right:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-medium{padding:8px}@keyframes fadeInRightForTag{0%{opacity:0;transform:rotate(45deg) translateX(20px)}to{opacity:1;transform:rotate(45deg) translateX(0)}}.next-tag>.next-tag-body{overflow:hidden;text-overflow:ellipsis}.next-tag-checkable.next-tag-level-secondary{color:#333;border-color:transparent;background-color:transparent}.next-tag-checkable.next-tag-level-secondary:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-secondary:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-secondary:not(.disabled):not([disabled]):hover{color:#5584ff}.next-tag-default.next-tag-level-primary{color:#666;border-color:#ebecf0;background-color:#ebecf0}.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]).hover,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):focus,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):hover{color:#333;border-color:#e2e4e8;background-color:#e2e4e8}.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-default.next-tag-level-primary,.next-tag-default.next-tag-level-primary[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-default.next-tag-level-primary>.next-tag-close-btn,.next-tag-default.next-tag-level-primary[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-default.next-tag-level-primary>.next-tag-close-btn{color:#666}.next-tag-closable.next-tag-level-primary{color:#666;border-color:#ebecf0;background-color:#ebecf0}.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]).hover,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):focus,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):hover{color:#333;border-color:#e2e4e8;background-color:#e2e4e8}.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-closable.next-tag-level-primary,.next-tag-closable.next-tag-level-primary[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-closable.next-tag-level-primary>.next-tag-close-btn,.next-tag-closable.next-tag-level-primary[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-closable.next-tag-level-primary>.next-tag-close-btn{color:#666}.next-tag-checkable.next-tag-level-primary{color:#666;border-color:#ebecf0;background-color:#ebecf0}.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):hover{color:#333;border-color:#e2e4e8;background-color:#e2e4e8}.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-checkable.next-tag-level-primary,.next-tag-checkable.next-tag-level-primary[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-checkable.next-tag-level-primary>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-checkable.next-tag-level-primary>.next-tag-close-btn{color:#666}.next-tag-checkable.next-tag-level-primary.checked{color:#fff;border-color:#5584ff;background-color:#5584ff}.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):hover{color:#fff;border-color:#3e71f7;background-color:#3e71f7}.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#fff}.disabled.next-tag-checkable.next-tag-level-primary.checked,.next-tag-checkable.next-tag-level-primary.checked[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-checkable.next-tag-level-primary.checked>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked[disabled]>.next-tag-close-btn{color:#fff}.next-tag-default.next-tag-level-normal{color:#666;border-color:#c4c6cf;background-color:transparent}.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]).hover,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):focus,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):hover{color:#333;border-color:#a0a2ad;background-color:transparent}.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-default.next-tag-level-normal,.next-tag-default.next-tag-level-normal[disabled]{color:#ccc;border-color:#e6e7eb;background-color:#f7f8fa}.disabled.next-tag-default.next-tag-level-normal>.next-tag-close-btn,.next-tag-default.next-tag-level-normal[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-default.next-tag-level-normal>.next-tag-close-btn{color:#666}.next-tag-closable.next-tag-level-normal{color:#666;border-color:#c4c6cf;background-color:transparent}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover{color:#333;border-color:#a0a2ad;background-color:transparent}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-closable.next-tag-level-normal,.next-tag-closable.next-tag-level-normal[disabled]{color:#ccc;border-color:#e6e7eb;background-color:transparent}.disabled.next-tag-closable.next-tag-level-normal>.next-tag-close-btn,.next-tag-closable.next-tag-level-normal[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-closable.next-tag-level-normal>.next-tag-close-btn{color:#666}.next-tag-checkable.next-tag-level-normal.checked{color:#5584ff;border-color:#5584ff;background-color:transparent}.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):hover{color:#3e71f7;border-color:#3e71f7;background-color:transparent}.next-tag-checkable.next-tag-level-secondary.checked{color:#5584ff;border-color:#5584ff;background-color:transparent}.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):hover{color:#3e71f7;border-color:#3e71f7;background-color:transparent}.next-tag-checkable.next-tag-level-secondary.checked:before{position:absolute;content:"";-webkit-font-smoothing:antialiased;background-color:#5584ff;transform:rotate(45deg)}.next-tag-checkable.next-tag-level-secondary.checked:after{position:absolute;font-family:NextIcon;-webkit-font-smoothing:antialiased;content:"";transform:scale(.6);color:#fff}.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]).hover:before,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):focus:before,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):hover:before{background-color:#3e71f7}.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]).hover:after,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):focus:after,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):hover:after{color:#fff}.next-tag-checkable.next-tag-level-secondary.checked:disabled:before,.next-tag-checkable.next-tag-level-secondary.checked[disabled]:before{background-color:#e6e7eb}.next-tag-checkable.next-tag-level-secondary.checked:disabled:after,.next-tag-checkable.next-tag-level-secondary.checked[disabled]:after{color:#fff}.next-tag-checkable.next-tag-level-normal{color:#666;border-color:#c4c6cf;background-color:transparent}.next-tag-checkable.next-tag-level-normal:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-normal:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-normal:not(.disabled):not([disabled]):hover{color:#333;border-color:#c4c6cf;background-color:transparent}.disabled.next-tag-checkable.next-tag-level-normal,.next-tag-checkable.next-tag-level-normal[disabled]{color:#ccc;border-color:#e6e7eb;background-color:#f7f8fa}.next-tag-checkable.next-tag-level-normal.checked:before{position:absolute;content:"";-webkit-font-smoothing:antialiased;background-color:#5584ff;transform:rotate(45deg)}.next-tag-checkable.next-tag-level-normal.checked:after{position:absolute;font-family:NextIcon;-webkit-font-smoothing:antialiased;content:"";transform:scale(.6);color:#fff}.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]).hover:before,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):focus:before,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):hover:before{background-color:#3e71f7}.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]).hover:after,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):focus:after,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):hover:after{color:#fff}.next-tag-checkable.next-tag-level-normal.checked:disabled:before,.next-tag-checkable.next-tag-level-normal.checked[disabled]:before{background-color:#e6e7eb}.next-tag-checkable.next-tag-level-normal.checked:disabled:after,.next-tag-checkable.next-tag-level-normal.checked[disabled]:after{color:#fff}.next-tag-closable.next-tag-level-normal:before{position:absolute;content:"";-webkit-font-smoothing:antialiased;background-color:#c4c6cf;transform:rotate(45deg)}.next-tag-closable.next-tag-level-normal:after{position:absolute;font-family:NextIcon;-webkit-font-smoothing:antialiased;content:"";transform:scale(.6);color:#fff}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover:before,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus:before,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover:before{background-color:#a0a2ad}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover:after,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus:after,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover:after{color:#fff}.next-tag-closable.next-tag-level-normal:disabled:before,.next-tag-closable.next-tag-level-normal[disabled]:before{background-color:#e6e7eb}.next-tag-closable.next-tag-level-normal:disabled:after,.next-tag-closable.next-tag-level-normal[disabled]:after{color:#fff}.next-tag-group .next-tag-large,.next-tag-group .next-tag-medium{margin-right:8px;margin-bottom:8px}.next-tag-group .next-tag-small{margin-right:4px;margin-bottom:4px}.next-tag{display:inline-block;max-width:100%;vertical-align:middle;border-width:1px;border-radius:3px;box-shadow:none;border-style:solid;overflow:hidden;white-space:nowrap;transition:all .1s linear;font-size:0;outline:0}.next-tag,.next-tag *,.next-tag :after,.next-tag :before{box-sizing:border-box}.next-tag>.next-tag-body{position:relative;display:inline-block;height:100%;text-align:center;vertical-align:middle;max-width:100%;cursor:default}.next-tag>.next-tag-body>a{text-decoration:none;color:inherit}.next-tag>.next-tag-body>a:before{content:" ";position:absolute;display:block;top:0;left:0;right:0;bottom:0}.next-tag>.next-tag-body .next-icon{line-height:1;vertical-align:middle}.next-tag>.next-tag-body .next-icon:before{font-size:inherit}.next-tag.next-tag-body-pointer{cursor:pointer}.next-tag.disabled,.next-tag[disabled]{cursor:not-allowed;pointer-events:none}.next-tag-blue{background-color:#4494f9;border-color:#4494f9;color:#fff}.next-tag-blue-inverse{background-color:rgba(68,148,249,.25);border-color:#4494f9;color:#4494f9}.next-tag-green{background-color:#46bc15;border-color:#46bc15;color:#fff}.next-tag-green-inverse{background-color:rgba(70,188,21,.25);border-color:#46bc15;color:#46bc15}.next-tag-orange{background-color:#ff9300;border-color:#ff9300;color:#fff}.next-tag-orange-inverse{background-color:rgba(255,147,0,.25);border-color:#ff9300;color:#ff9300}.next-tag-red{background-color:#ff3000;border-color:#ff3000;color:#fff}.next-tag-red-inverse{background-color:rgba(255,48,0,.25);border-color:#ff3000;color:#ff3000}.next-tag-turquoise{background-color:#01c1b2;border-color:#01c1b2;color:#fff}.next-tag-turquoise-inverse{background-color:rgba(1,193,178,.25);border-color:#01c1b2;color:#01c1b2}.next-tag-yellow{background-color:#fccc12;border-color:#fccc12;color:#fff}.next-tag-yellow-inverse{background-color:rgba(252,204,18,.25);border-color:#fccc12;color:#fccc12}.next-tag-large{height:40px;padding:0;line-height:38px;font-size:0}.next-tag-large>.next-tag-body{font-size:16px;padding:0 16px;min-width:48px}.next-tag-large.next-tag-closable>.next-tag-body{padding:0 0 0 16px;max-width:calc(100% - 40px)}.next-tag-large[dir=rtl].next-tag-closable>.next-tag-body{padding:0 16px 0 0}.next-tag-large.next-tag-closable>.next-tag-close-btn{margin-left:12px;padding-right:16px}.next-tag-large.next-tag-closable>.next-tag-close-btn .next-icon .next-icon-remote,.next-tag-large.next-tag-closable>.next-tag-close-btn .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-tag-large[dir=rtl]>.next-tag-close-btn{margin-right:12px;margin-left:0;padding-right:0;padding-left:16px}.next-tag-medium{height:28px;padding:0;line-height:26px;font-size:0}.next-tag-medium>.next-tag-body{font-size:14px;padding:0 12px;min-width:40px}.next-tag-medium.next-tag-closable>.next-tag-body{padding:0 0 0 12px;max-width:calc(100% - 28px)}.next-tag-medium[dir=rtl].next-tag-closable>.next-tag-body{padding:0 12px 0 0}.next-tag-medium.next-tag-closable>.next-tag-close-btn{margin-left:8px;padding-right:12px}.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon .next-icon-remote,.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon:before{width:16px;font-size:16px}}.next-tag-medium[dir=rtl]>.next-tag-close-btn{margin-right:8px;margin-left:0;padding-right:0;padding-left:12px}.next-tag-small{height:20px;padding:0;line-height:18px;font-size:0}.next-tag-small>.next-tag-body{font-size:12px;padding:0 8px;min-width:28px}.next-tag-small.next-tag-closable>.next-tag-body{padding:0 0 0 8px;max-width:calc(100% - 24px)}.next-tag-small[dir=rtl].next-tag-closable>.next-tag-body{padding:0 8px 0 0}.next-tag-small.next-tag-closable>.next-tag-close-btn{margin-left:8px;padding-right:8px}.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon .next-icon-remote,.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon:before{width:16px;font-size:16px}}.next-tag-small[dir=rtl]>.next-tag-close-btn{margin-right:8px;margin-left:0;padding-right:0;padding-left:8px}.next-tag-default{cursor:default}.next-tag-closable{position:relative}.next-tag-closable>.next-tag-close-btn{display:inline-block;vertical-align:middle;height:100%;text-align:center;cursor:pointer}.next-tag-checkable{cursor:pointer;position:relative;border-radius:3px}.next-tag-checkable.checked:before{animation:fadeInRightForTag .4s cubic-bezier(.78,.14,.15,.86)}.next-tag-checkable.checked:after{animation:zoomIn .4s cubic-bezier(.78,.14,.15,.86)}.next-tag-checkable.next-tag-small:not(.next-tag-level-primary):before{right:-10px;bottom:-10px;width:20px;height:20px}.next-tag-checkable.next-tag-small:not(.next-tag-level-primary):after{font-size:8px;line-height:8px;right:0;bottom:0}.next-tag-checkable.next-tag-medium:not(.next-tag-level-primary):before{right:-14px;bottom:-14px;width:28px;height:28px}.next-tag-checkable.next-tag-medium:not(.next-tag-level-primary):after{font-size:12px;line-height:12px;right:0;bottom:0}.next-tag-checkable.next-tag-large:not(.next-tag-level-primary):before{right:-18px;bottom:-18px;width:36px;height:36px}.next-tag-checkable.next-tag-large:not(.next-tag-level-primary):after{font-size:16px;line-height:16px;right:0;bottom:0}.next-tag-checkable.next-tag-level-secondary.disabled,.next-tag-checkable.next-tag-level-secondary[disabled]{color:#ccc;border-color:#e6e7eb;background-color:#f7f8fa}.next-tag-zoom-appear,.next-tag-zoom-enter{animation:fadeInLeft .4s cubic-bezier(.78,.14,.15,.86);animation-fill-mode:both}.next-tag-zoom-leave{animation:zoomOut .3s ease-in;animation-fill-mode:both}.next-select{display:inline-block;font-size:0;vertical-align:middle}.next-select,.next-select *,.next-select :after,.next-select :before{box-sizing:border-box}.next-select-trigger{min-width:100px;outline:0;transition:all .1s linear}.next-select-trigger .next-input-label{flex:0 0 auto;width:auto}.next-select-trigger .next-select-values{display:block;width:100%;flex:1 1 0;overflow:hidden}.next-select-trigger .next-select-values>em{font-style:inherit}.next-select-trigger .next-select-values input{padding-left:0;padding-right:0}.next-select-trigger .next-input-control{flex:0 0 auto;width:auto}.next-select-trigger .next-input-control>*{display:inline-block;width:auto}.next-select-trigger .next-input-control>.next-select-arrow{padding-right:0}.next-select-trigger .next-input.next-disabled em{color:#ccc}.next-select-trigger .next-input.next-disabled .next-select-arrow{cursor:not-allowed}.next-select-trigger .next-select-clear{display:none}.next-select-trigger.next-has-clear:hover .next-select-clear{display:inline-block}.next-select-trigger.next-has-clear:hover .next-select-arrow{display:none}.next-select .next-select-inner{display:inline-flex;align-items:center;width:100%;min-width:100px;outline:0;color:#333}.next-select .next-select-inner .next-tag{line-height:1;margin-right:4px;margin-bottom:3px;padding-left:4px;padding-right:4px}.next-select .next-select-inner .next-input-inner{width:auto}.next-select-trigger-search{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:100%;max-width:100%}.next-select-trigger-search>input,.next-select-trigger-search>span{display:block;font-size:inherit;font-family:inherit;letter-spacing:inherit;white-space:nowrap;overflow:hidden}.next-select-trigger-search input{position:absolute;background-color:transparent;width:100%;height:100%!important;z-index:1;left:0;border:0;outline:0;margin:0;padding:0;cursor:inherit}.next-select-trigger-search>span{position:relative;visibility:hidden;white-space:pre;max-width:100%;z-index:-1}.next-select-single.next-no-search{cursor:pointer}.next-select-single.next-has-search.next-active .next-select-values>em{display:none}.next-select-single.next-inactive .next-select-values>em+.next-select-trigger-search,.next-select-single.next-no-search .next-select-values>em+.next-select-trigger-search{width:1px;opacity:0;filter:alpha(opacity=0)}.next-select-single.next-inactive .next-select-trigger-search input,.next-select-single.next-no-search .next-select-trigger-search input{color:transparent}.next-select-single .next-select-values{display:inline-flex;align-items:center}.next-select-single .next-select-values>em{vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.next-select-multiple .next-select-compact{position:relative;white-space:nowrap}.next-select-multiple .next-select-compact .next-select-trigger-search{width:auto}.next-select-multiple .next-select-compact .next-select-tag-compact{position:absolute;top:0;right:0;z-index:1;padding:0 4px 0 16px;color:#333;background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff 10px)}.next-select-multiple .next-select-values,.next-select-tag .next-select-values{margin-bottom:-3px;height:auto!important}.next-select-multiple .next-select-trigger-search,.next-select-tag .next-select-trigger-search{margin-bottom:3px}.next-select-multiple .next-tag+.next-select-trigger-search,.next-select-tag .next-tag+.next-select-trigger-search{width:auto;min-width:1px}.next-select-multiple .next-input,.next-select-tag .next-input{height:auto;align-items:start}.next-select-multiple.next-small .next-select-values,.next-select-tag.next-small .next-select-values{min-height:18px;padding-top:2px;padding-bottom:2px;line-height:14px}.next-select-multiple.next-small .next-select-values-compact,.next-select-tag.next-small .next-select-values-compact{height:20px!important}.next-select-multiple.next-small .next-tag,.next-select-tag.next-small .next-tag{border:0;padding-top:0;padding-bottom:0;height:14px}.next-select-multiple.next-small .next-tag-body,.next-select-multiple.next-small .next-tag .next-tag-body,.next-select-multiple.next-small .next-tag .next-tag-close-btn,.next-select-tag.next-small .next-tag-body,.next-select-tag.next-small .next-tag .next-tag-body,.next-select-tag.next-small .next-tag .next-tag-close-btn{line-height:14px}.next-select-multiple.next-small .next-input-control,.next-select-multiple.next-small .next-input-label,.next-select-multiple.next-small .next-select-tag-compact,.next-select-tag.next-small .next-input-control,.next-select-tag.next-small .next-input-label,.next-select-tag.next-small .next-select-tag-compact{line-height:18px}.next-select-multiple.next-medium .next-select-values,.next-select-tag.next-medium .next-select-values{min-height:26px;padding-top:3px;padding-bottom:3px;line-height:20px}.next-select-multiple.next-medium .next-select-values-compact,.next-select-tag.next-medium .next-select-values-compact{height:28px!important}.next-select-multiple.next-medium .next-tag,.next-select-tag.next-medium .next-tag{padding-top:1px;padding-bottom:1px;height:20px}.next-select-multiple.next-medium .next-tag .next-tag-body,.next-select-multiple.next-medium .next-tag .next-tag-close-btn,.next-select-tag.next-medium .next-tag .next-tag-body,.next-select-tag.next-medium .next-tag .next-tag-close-btn{line-height:18px}.next-select-multiple.next-medium .next-input-control,.next-select-multiple.next-medium .next-input-label,.next-select-multiple.next-medium .next-select-tag-compact,.next-select-tag.next-medium .next-input-control,.next-select-tag.next-medium .next-input-label,.next-select-tag.next-medium .next-select-tag-compact{line-height:26px}.next-select-multiple.next-large .next-select-values,.next-select-tag.next-large .next-select-values{min-height:38px;padding-top:7px;padding-bottom:7px;line-height:24px}.next-select-multiple.next-large .next-select-values-compact,.next-select-tag.next-large .next-select-values-compact{height:40px!important}.next-select-multiple.next-large .next-tag,.next-select-tag.next-large .next-tag{padding-top:3px;padding-bottom:3px;height:24px}.next-select-multiple.next-large .next-tag .next-tag-body,.next-select-multiple.next-large .next-tag .next-tag-close-btn,.next-select-tag.next-large .next-tag .next-tag-body,.next-select-tag.next-large .next-tag .next-tag-close-btn{line-height:18px}.next-select-multiple.next-large .next-input-control,.next-select-multiple.next-large .next-input-label,.next-select-multiple.next-large .next-select-tag-compact,.next-select-tag.next-large .next-input-control,.next-select-tag.next-large .next-input-label,.next-select-tag.next-large .next-select-tag-compact{line-height:38px}.next-select.next-no-search .next-select-trigger-search input{color:transparent}.next-select-auto-complete{width:160px}.next-select-auto-complete .next-input{width:100%}.next-select-auto-complete .next-input .next-input-hint-wrap{padding-right:1px}.next-select-auto-complete .next-input .next-select-arrow{padding-left:0}.next-select.next-active .next-select-arrow .next-icon-arrow-down{transform:rotate(180deg)}.next-select .next-select-unfold-icon:before{content:""}.next-select-symbol-fold:before{content:""}.next-select-arrow{cursor:pointer;width:auto!important;text-align:center;transition:all .1s linear}.next-select-popup-wrap{animation-duration:.3s;animation-timing-function:ease}.next-select-menu-wrapper{max-height:260px;overflow:auto;border:1px solid #dcdee3;border-radius:3px;box-shadow:none}.next-select-menu-wrapper .next-select-menu{max-height:none;border:none}.next-select-menu{max-height:260px;overflow:auto}.next-select-menu .next-select-menu-empty-content{padding-left:8px;padding-right:8px;color:#999}.next-select-menu.next-select-auto-complete-menu.next-select-menu-empty{display:none}.next-select-menu .next-menu-item-text .next-icon{vertical-align:middle}.next-select-all{display:block;cursor:pointer;padding:0 8px;margin:0 12px 8px;border-bottom:1px solid #dcdee3}.next-select-all:hover{color:#3e71f7}.next-select-all .next-menu-icon-selected.next-icon{display:inline-block!important;top:auto;color:#5584ff}.next-select-highlight{color:#5584ff;font-size:12px}.next-select-in-ie.next-select-trigger .next-select-values{overflow:visible}.next-select-in-ie.next-select-trigger .next-input-control,.next-select-in-ie.next-select-trigger .next-input-label{width:1px}.next-select-in-ie.next-select-trigger .next-input-control>*{display:table-cell;width:1%}.next-select-in-ie.next-select-trigger .next-select-arrow{display:table-cell}.next-select-in-ie.next-select-trigger .next-select-clear{display:none}.next-select-in-ie.next-select-trigger.next-select-multiple .next-select-inner,.next-select-in-ie.next-select-trigger.next-select-tag .next-select-inner{vertical-align:top}.next-select-in-ie.next-select-trigger .next-select-inner,.next-select-in-ie.next-select-trigger.next-select-single .next-select-values{display:inline-table}.next-select-in-ie.next-select-trigger.next-select-single .next-input.next-small .next-select-values{line-height:20px}.next-select-in-ie.next-select-trigger.next-select-single .next-input.next-medium .next-select-values{line-height:28px}.next-select-in-ie.next-select-trigger.next-select-single .next-input.next-large .next-select-values{line-height:40px}.next-select-in-ie.next-select-trigger .next-select-trigger-search>span{max-width:100px}.next-select-in-ie.next-select-trigger.next-select-single.next-select-in-ie-fixwidth .next-select-values{position:relative}.next-select-in-ie.next-select-trigger.next-select-single.next-select-in-ie-fixwidth .next-select-values>em{position:absolute;display:inline-block;height:100%;line-height:1;vertical-align:middle;overflow:hidden;left:4px;right:0;top:30%}.next-select-in-ie.next-select-trigger.next-select-single.next-inactive .next-select-values>em+.next-select-trigger-search,.next-select-in-ie.next-select-trigger.next-select-single.next-no-search .next-select-values>em+.next-select-trigger-search{filter:alpha(opacity=0);font-size:0}.next-select-in-ie.next-select-trigger.next-no-search .next-select-trigger-search input,.next-select-in-ie.next-select-trigger.next-select-single.next-inactive .next-select-trigger-search input,.next-select-in-ie.next-select-trigger.next-select-single.next-no-search .next-select-trigger-search input{color:inherit}.next-select.next-select-multiple[dir=rtl] .next-select-compact .next-select-tag-compact{left:0;right:auto;padding:0 16px 0 4px;background:linear-gradient(270deg,hsla(0,0%,100%,0),#fff 10px)}.new-config-form{margin-top:36px}.more-item.hide{display:none}.next-tabs{width:100%}.next-tabs,.next-tabs *,.next-tabs :after,.next-tabs :before{box-sizing:border-box}.next-tabs-bar{outline:none}.next-tabs-bar-popup{overflow-y:auto;max-height:480px}.next-tabs-nav-container{position:relative}.next-tabs-nav-container:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-tabs-nav-wrap{overflow:hidden}.next-tabs-nav-scroll{overflow:hidden;white-space:nowrap}.next-tabs-scrollable .next-tabs-nav-scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.next-tabs-scrollable .next-tabs-nav-scroll::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;-webkit-appearance:none;opacity:0!important}.next-tabs-nav{display:inline-block;position:relative;transition:all .3s ease;list-style:none;padding:0;margin:0}.next-tabs-nav-appear,.next-tabs-nav-enter{animation:fadeInLeft .4s cubic-bezier(.78,.14,.15,.86);animation-fill-mode:both}.next-tabs-nav-leave{animation:fadeOutLeft .2s cubic-bezier(.78,.14,.15,.86);animation-fill-mode:both}.next-tabs-tab{display:inline-block;position:relative;transition:all .1s linear}.next-tabs-tab-inner{position:relative;cursor:pointer;text-decoration:none}.next-tabs-tab:before{content:"";position:absolute;transition:all .3s ease}.next-tabs-tab.active{font-weight:400}.next-tabs-tab .next-tabs-tab-close{color:#666}.next-tabs-tab .next-tabs-tab-close:hover{color:#333}.next-tabs-tab .next-tabs-tab-close:focus{outline:none}.next-tabs-tab.active .next-tabs-tab-close{color:#5584ff}.next-tabs-tab.disabled .next-tabs-tab-close{color:#dcdee3}.next-tabs-tab:focus{outline:none}.next-tabs-tabpane{visibility:hidden;opacity:0}.next-tabs-tabpane.active{visibility:visible;opacity:1;height:auto}.next-tabs-tabpane.hidden{overflow:hidden;height:0!important;margin:0!important;padding:0!important;border:0!important}.next-tabs-btn-down,.next-tabs-btn-next,.next-tabs-btn-prev{position:absolute;top:0;cursor:pointer;padding:0;border:0;outline:none;height:100%;background-color:transparent;border-color:transparent}.next-tabs-btn-down,.next-tabs-btn-down.visited,.next-tabs-btn-down:link,.next-tabs-btn-down:visited,.next-tabs-btn-next,.next-tabs-btn-next.visited,.next-tabs-btn-next:link,.next-tabs-btn-next:visited,.next-tabs-btn-prev,.next-tabs-btn-prev.visited,.next-tabs-btn-prev:link,.next-tabs-btn-prev:visited{color:#666}.next-tabs-btn-down.active,.next-tabs-btn-down.hover,.next-tabs-btn-down:active,.next-tabs-btn-down:focus,.next-tabs-btn-down:hover,.next-tabs-btn-next.active,.next-tabs-btn-next.hover,.next-tabs-btn-next:active,.next-tabs-btn-next:focus,.next-tabs-btn-next:hover,.next-tabs-btn-prev.active,.next-tabs-btn-prev.hover,.next-tabs-btn-prev:active,.next-tabs-btn-prev:focus,.next-tabs-btn-prev:hover{color:#333;background-color:transparent;border-color:transparent;text-decoration:none}.next-tabs-btn-down.disabled,.next-tabs-btn-next.disabled,.next-tabs-btn-prev.disabled{cursor:not-allowed;color:#dcdee3}.next-tabs-btn-next{right:8px}.next-tabs-btn-prev{right:32px}.next-tabs-btn-down{right:8px}.next-tabs .next-tab-icon-dropdown:before{content:""}.next-tabs .next-tab-icon-prev:before{content:""}.next-tabs .next-tab-icon-next:before{content:""}.next-tabs-content{overflow:hidden}.next-tabs-vertical>.next-tabs-bar .next-tabs-nav{width:100%}.next-tabs-vertical>.next-tabs-bar .next-tabs-tab{display:block}.next-tabs.next-medium .next-tabs-nav-container-scrolling{padding-right:60px}.next-tabs.next-medium .next-tabs-tab-inner{font-size:12px;padding:12px 16px}.next-tabs.next-medium .next-tabs-tab-inner .next-icon{line-height:1}.next-tabs.next-medium .next-tabs-tab-inner .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-tab-inner .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-tabs.next-medium .next-tabs-tab-inner .next-tabs-tab-close{padding-left:8px}.next-tabs.next-medium .next-tabs-tab-inner .next-tabs-tab-close .next-icon-remote,.next-tabs.next-medium .next-tabs-tab-inner .next-tabs-tab-close:before{width:12px;font-size:12px;line-height:inherit}.next-tabs.next-medium .next-tabs-btn-down .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-btn-down .next-icon:before,.next-tabs.next-medium .next-tabs-btn-next .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-btn-next .next-icon:before,.next-tabs.next-medium .next-tabs-btn-prev .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-btn-prev .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-tabs.next-small .next-tabs-nav-container-scrolling{padding-right:56px}.next-tabs.next-small .next-tabs-tab-inner{font-size:12px;padding:8px 12px}.next-tabs.next-small .next-tabs-tab-inner .next-icon{line-height:1}.next-tabs.next-small .next-tabs-tab-inner .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-tab-inner .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close{padding-left:8px}.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close .next-icon-remote,.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close:before{width:16px;font-size:16px}}.next-tabs.next-small .next-tabs-btn-down .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-btn-down .next-icon:before,.next-tabs.next-small .next-tabs-btn-next .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-btn-next .next-icon:before,.next-tabs.next-small .next-tabs-btn-prev .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-btn-prev .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-tabs-pure>.next-tabs-bar{border-bottom:1px solid #dcdee3;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container{margin-bottom:-1px;box-shadow:none}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab{color:#666;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab:hover{cursor:pointer;color:#333;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab.active{z-index:1;color:#5584ff;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#dcdee3;background:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab:before{border-radius:0;width:0;border-bottom:2px solid #5584ff;left:50%;bottom:0}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab.active:before{width:100%;left:0}.next-tabs-wrapped>.next-tabs-bar{background:transparent}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab{color:#666;background-color:#f2f3f7}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab:hover{cursor:pointer;color:#333;background-color:#ebecf0}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.active{z-index:1;color:#5584ff;background-color:#fff}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#ccc;background:#f7f8fa}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab .next-tabs-tab-close{color:#666}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab .next-tabs-tab-close:hover{color:#333}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab .next-tabs-tab-close:focus{outline:none}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.active .next-tabs-tab-close{color:#5584ff}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.disabled .next-tabs-tab-close{color:#dcdee3}.next-tabs-wrapped:after,.next-tabs-wrapped:before{content:"";display:table}.next-tabs-wrapped:after{clear:both}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar,.next-tabs-wrapped>.next-tabs-content{position:relative}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab{margin-right:4px;border-radius:3px 3px 0 0;border:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab.active{border-color:#dcdee3 #dcdee3 #fff}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;width:0;border-top:2px solid #5584ff;left:50%;top:-1px}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab.active:before{width:calc(100% - 6px);left:3px}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab.active{border-width:1px}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar:before{content:"";position:absolute;top:100%;width:100%;height:0;border-bottom:1px solid #dcdee3;transform:translateY(-1px);display:block}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar{position:relative}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab{margin-right:4px;border:1px solid #dcdee3;border-radius:0 0 3px 3px}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab.active{border-color:#fff #dcdee3 #dcdee3}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;width:0;border-bottom:2px solid #5584ff;left:50%;bottom:-1px}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab.active:before{width:calc(100% - 6px);left:3px}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-content{top:1px;border-bottom:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar{float:left}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab{float:none;margin-bottom:4px;border-radius:3px 0 0 3px;border:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab.active{border-color:#dcdee3 #fff #dcdee3 #dcdee3}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;height:0;border-left:2px solid #5584ff;top:50%;left:-1px}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab.active:before{height:calc(100% - 6px);top:3px}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab.active{border-width:1px}.next-tabs-wrapped.next-tabs-left>.next-tabs-content{right:1px;border-left:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar{float:right}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab{float:none;margin-bottom:4px;border-radius:0 3px 3px 0;border:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab.active{border-color:#dcdee3 #dcdee3 #dcdee3 #fff}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;height:0;border-right:2px solid #5584ff;top:50%;right:-1px}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab.active:before{height:calc(100% - 6px);top:3px}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab.active{border-width:1px}.next-tabs-wrapped.next-tabs-right>.next-tabs-content{right:-1px;border-right:1px solid #dcdee3}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab{transition:background-color .1s linear;border:1px solid #c4c6cf;border-right-color:transparent;margin-right:-1px;color:#333;background-color:#f2f3f7}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab:first-child{border-radius:3px 0 0 3px}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab:last-child{border-radius:0 3px 3px 0;border-right:1px solid #c4c6cf}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.active{border-right:1px solid;border-color:#5584ff}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.disabled{border-color:#e6e7eb}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab:hover{z-index:2;border-right:1px solid;border-color:#c4c6cf;cursor:pointer;color:#333;background-color:#ebecf0}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.active{z-index:1;color:#fff;background-color:#5584ff}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#ccc;background:#f7f8fa}.next-tabs-text>.next-tabs-bar .next-tabs-tab{color:#666;background-color:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab:hover{cursor:pointer;color:#333;background-color:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab.active{z-index:1;color:#5584ff;background-color:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#ccc;background:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab:not(:last-child):after{content:"";position:absolute;right:0;top:calc(50% - 4px);width:1px;height:8px;background-color:#dcdee3}.next-tabs-pure>.next-tabs-bar{position:relative}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-capsule>.next-tabs-bar{position:relative}.next-tabs-capsule>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-text>.next-tabs-bar{position:relative}.next-tabs-text>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs[dir=rtl].next-medium .next-tabs-nav-container-scrolling{padding-left:60px;padding-right:0}.next-tabs[dir=rtl].next-medium .next-tabs-tab-close{padding-right:8px;padding-left:0}.next-tabs[dir=rtl].next-small .next-tabs-nav-container-scrolling{padding-left:56px;padding-right:0}.next-tabs[dir=rtl].next-small .next-tabs-tab-close{padding-right:8px;padding-left:0}.next-tabs[dir=rtl].next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-nav-extra,.next-tabs[dir=rtl].next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-nav-extra,.next-tabs[dir=rtl]>.next-tabs-bar .next-tabs-nav-extra{right:auto;left:0}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab{border:1px solid #c4c6cf;border-left:0}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab:first-child{border-left:0;border-radius:0 3px 3px 0}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab:last-child{border-radius:3px 0 0 3px;border-left:1px solid #c4c6cf}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab.active{margin-left:-1px;margin-right:auto;border-left:1px solid;border-color:#5584ff}.next-tabs[dir=rtl] .next-tabs-btn-next{left:8px;right:auto}.next-tabs[dir=rtl] .next-tabs-btn-prev{left:32px;right:auto}.next-tabs[dir=rtl] .next-tabs-btn-down{left:8px;right:auto}.next-tabs-text[dir=rtl]>.next-tabs-bar .next-tabs-tab:not(:last-child):after{content:"";position:absolute;left:0;right:auto}.config-editor{padding:10px}.config-editor .func-title{overflow:hidden;height:50px;width:100%;font-weight:500;margin-bottom:9px;font-size:18px;line-height:36px;color:#73777a}.config-editor .form{display:table}.config-editor .form .next-form-item{display:table-row}.config-editor .form .next-form-item .next-form-item-label{white-space:nowrap;word-break:keep-all}.config-editor .form .next-form-item .next-form-item-control,.config-editor .form .next-form-item .next-select{width:100%}.config-editor .form .next-form-item .next-form-item-control,.config-editor .form .next-form-item .next-form-item-label{display:table-cell}.config-editor .form .next-form-item-control{padding-bottom:12px}.config-editor .form .next-checkbox-label{color:#73777a;font-weight:400}.config-editor .form .next-radio-label{color:#73777a}.config-editor .form .switch{color:#33cde5;cursor:pointer;user-select:none}.config-editor .form .help-label>*{display:inline-block}.config-editor .form .help-label>i{color:#1dc11d;margin:0 .25em}.config-editor .button-list{text-align:right}.config-editor .button-list button{margin-left:1em;font-size:14px}.next-pagination[dir=rtl] .next-pagination-total{margin-right:0;margin-left:16px}.next-pagination[dir=rtl] .next-pagination-jump-go{margin-left:0;margin-right:4px}.next-pagination[dir=rtl] .next-pagination-size-selector-title{margin-right:0;margin-left:4px}.next-pagination[dir=rtl] .next-pagination-size-selector-btn.next-btn-text+.next-pagination-size-selector-btn{border-left:none;border-right:1px solid #dcdee3}.next-pagination[dir=rtl] .next-pagination-pages+.next-pagination-size-selector,.next-pagination[dir=rtl] .next-pagination-size-selector+.next-pagination-pages{margin-left:0;margin-right:40px}.next-pagination[dir=rtl].next-start .next-pagination-pages{float:left}.next-pagination[dir=rtl].next-end .next-pagination-pages,.next-pagination[dir=rtl].next-start .next-pagination-size-selector{float:right}.next-pagination[dir=rtl].next-end .next-pagination-size-selector{float:left}.next-pagination[dir=rtl].next-small .next-pagination-list{margin:0 4px}.next-pagination[dir=rtl].next-small .next-pagination-total{line-height:20px;vertical-align:middle}.next-pagination[dir=rtl].next-small .next-pagination-item{padding:0 6px;border-width:1px;border-radius:3px}.next-pagination[dir=rtl].next-small .next-pagination-item+.next-pagination-item{margin:0 4px 0 0}.next-pagination[dir=rtl].next-small .next-pagination-ellipsis{height:20px;line-height:20px;margin-left:8px;margin-right:8px}.next-pagination[dir=rtl].next-small .next-pagination-ellipsis .next-icon-remote,.next-pagination[dir=rtl].next-small .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination[dir=rtl].next-small .next-pagination-display,.next-pagination[dir=rtl].next-small .next-pagination-display em,.next-pagination[dir=rtl].next-small .next-pagination-jump-text{font-size:12px}.next-pagination[dir=rtl].next-small .next-pagination-jump-input{width:28px}.next-pagination[dir=rtl].next-small .next-pagination-size-selector-title{height:20px;line-height:20px;font-size:12px;vertical-align:middle}.next-pagination[dir=rtl].next-small .next-pagination-size-selector-btn{padding:0 8px}.next-pagination[dir=rtl].next-small .next-pagination-item.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-small .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination[dir=rtl].next-small .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-small .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination[dir=rtl].next-medium .next-pagination-list{margin:0 4px}.next-pagination[dir=rtl].next-medium .next-pagination-total{line-height:28px;vertical-align:middle}.next-pagination[dir=rtl].next-medium .next-pagination-item{padding:0 10px;border-width:1px;border-radius:3px}.next-pagination[dir=rtl].next-medium .next-pagination-item+.next-pagination-item{margin:0 4px 0 0}.next-pagination[dir=rtl].next-medium .next-pagination-ellipsis{height:28px;line-height:28px;margin-left:8px;margin-right:8px}.next-pagination[dir=rtl].next-medium .next-pagination-ellipsis .next-icon-remote,.next-pagination[dir=rtl].next-medium .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination[dir=rtl].next-medium .next-pagination-display,.next-pagination[dir=rtl].next-medium .next-pagination-display em,.next-pagination[dir=rtl].next-medium .next-pagination-jump-text{font-size:12px}.next-pagination[dir=rtl].next-medium .next-pagination-jump-input{width:36px}.next-pagination[dir=rtl].next-medium .next-pagination-size-selector-title{height:28px;line-height:28px;font-size:12px;vertical-align:middle}.next-pagination[dir=rtl].next-medium .next-pagination-size-selector-btn{padding:0 12px}.next-pagination[dir=rtl].next-medium .next-pagination-item.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-medium .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination[dir=rtl].next-medium .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-medium .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination[dir=rtl].next-large .next-pagination-list{margin:0 8px}.next-pagination[dir=rtl].next-large .next-pagination-total{line-height:40px;vertical-align:middle}.next-pagination[dir=rtl].next-large .next-pagination-item{padding:0 15px;border-width:1px;border-radius:3px}.next-pagination[dir=rtl].next-large .next-pagination-item+.next-pagination-item{margin:0 8px 0 0}.next-pagination[dir=rtl].next-large .next-pagination-ellipsis{height:40px;line-height:40px;margin-left:8px;margin-right:8px}.next-pagination[dir=rtl].next-large .next-pagination-ellipsis .next-icon-remote,.next-pagination[dir=rtl].next-large .next-pagination-ellipsis:before{width:16px;font-size:16px;line-height:inherit}.next-pagination[dir=rtl].next-large .next-pagination-display,.next-pagination[dir=rtl].next-large .next-pagination-display em,.next-pagination[dir=rtl].next-large .next-pagination-jump-text{font-size:16px}.next-pagination[dir=rtl].next-large .next-pagination-jump-input{width:48px}.next-pagination[dir=rtl].next-large .next-pagination-size-selector-title{height:40px;line-height:40px;font-size:16px;vertical-align:middle}.next-pagination[dir=rtl].next-large .next-pagination-size-selector-btn{padding:0 16px}.next-pagination[dir=rtl].next-large .next-pagination-item.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-large .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination[dir=rtl].next-large .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-large .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination{font-size:0}.next-pagination,.next-pagination *,.next-pagination :after,.next-pagination :before{box-sizing:border-box}.next-pagination:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-pagination-total{display:inline-block;font-size:14px;margin-right:16px}.next-pagination-pages{display:inline-block}.next-pagination-list{display:inline-block;vertical-align:top}.next-pagination .next-pagination-item:not([disabled]){display:inline-block;border-style:solid;border-color:#c4c6cf;background:#fff;color:#333;box-shadow:none}.next-pagination .next-pagination-item.next-current{border-color:#5584ff;background:#5584ff;color:#fff;box-shadow:none}.next-pagination .next-pagination-item.next-current:focus,.next-pagination .next-pagination-item.next-current:hover{border-color:transparent;background:#3e71f7;color:#fff;box-shadow:none}.next-pagination-ellipsis{display:inline-block;color:#999;vertical-align:top}.next-pagination-display{display:inline-block;margin:0 16px;color:#333;vertical-align:middle}.next-pagination-display em{font-style:normal;color:#5584ff}.next-pagination-jump-text{display:inline-block;vertical-align:middle;color:#999}.next-pagination-jump-input{margin:0 4px;vertical-align:top}.next-pagination-jump-go{margin-left:4px;vertical-align:top}.next-pagination-size-selector{display:inline-block;position:relative}.next-pagination-size-selector-title{margin-right:4px;color:#999}.next-pagination-size-selector-filter{display:inline-block;vertical-align:middle}.next-pagination-size-selector-dropdown{vertical-align:top;min-width:64px}.next-pagination-size-selector-dropdown .next-select-inner,.next-pagination-size-selector-popup{min-width:64px}.next-pagination-size-selector-btn.next-btn-text{height:auto;line-height:normal;color:#666;border-radius:0}.next-pagination-size-selector-btn.next-btn-text.next-current{color:#5584ff}.next-pagination-size-selector-btn.next-btn-text+.next-pagination-size-selector-btn{border-left:1px solid #dcdee3}.next-pagination-pages+.next-pagination-size-selector,.next-pagination-size-selector+.next-pagination-pages{margin-left:40px}.next-pagination.next-hide{display:none}.next-pagination.next-start .next-pagination-pages{float:right}.next-pagination.next-end .next-pagination-pages,.next-pagination.next-start .next-pagination-size-selector{float:left}.next-pagination.next-end .next-pagination-size-selector{float:right}.next-pagination.next-small .next-pagination-list{margin:0 4px}.next-pagination.next-small .next-pagination-total{line-height:20px;vertical-align:middle}.next-pagination.next-small .next-pagination-item{padding:0 6px;border-width:1px;border-radius:3px}.next-pagination.next-small .next-pagination-item+.next-pagination-item{margin:0 0 0 4px}.next-pagination.next-small .next-pagination-ellipsis{height:20px;line-height:20px;margin-left:8px;margin-right:8px}.next-pagination.next-small .next-pagination-ellipsis .next-icon-remote,.next-pagination.next-small .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination.next-small .next-pagination-display,.next-pagination.next-small .next-pagination-display em,.next-pagination.next-small .next-pagination-jump-text{font-size:12px}.next-pagination.next-small .next-pagination-jump-input{width:28px}.next-pagination.next-small .next-pagination-size-selector-title{height:20px;line-height:20px;font-size:12px;vertical-align:middle}.next-pagination.next-small .next-pagination-size-selector-btn{padding:0 8px}.next-pagination.next-small .next-pagination-item.next-next:not([disabled]) i,.next-pagination.next-small .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination.next-small .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination.next-small .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination.next-small.next-arrow-only .next-pagination-item.next-next,.next-pagination.next-small.next-arrow-only .next-pagination-item.next-prev{width:20px;padding:0}.next-pagination.next-small.next-arrow-only .next-pagination-item.next-next .next-icon,.next-pagination.next-small.next-arrow-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-small.next-arrow-prev-only .next-pagination-item.next-prev{width:20px;padding:0}.next-pagination.next-small.next-arrow-prev-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-small.next-no-border .next-pagination-item.next-next,.next-pagination.next-small.next-no-border .next-pagination-item.next-prev{padding:0;border:none;background-color:transparent;box-shadow:none}.next-pagination.next-small.next-no-border .next-pagination-item.next-next .next-icon,.next-pagination.next-small.next-no-border .next-pagination-item.next-prev .next-icon{margin:0}.next-pagination.next-small.next-no-border .next-pagination-item.next-next:not([disabled]):hover i,.next-pagination.next-small.next-no-border .next-pagination-item.next-prev:not([disabled]):hover i{color:#5584ff}.next-pagination.next-small.next-no-border .next-pagination-display{margin:0 8px}.next-pagination.next-small.next-mini .next-pagination-item.next-prev{margin-right:4px}.next-pagination.next-small.next-mini .next-pagination-item.next-next{margin-left:4px}.next-pagination.next-medium .next-pagination-list{margin:0 4px}.next-pagination.next-medium .next-pagination-total{line-height:28px;vertical-align:middle}.next-pagination.next-medium .next-pagination-item{padding:0 10px;border-width:1px;border-radius:3px}.next-pagination.next-medium .next-pagination-item+.next-pagination-item{margin:0 0 0 4px}.next-pagination.next-medium .next-pagination-ellipsis{height:28px;line-height:28px;margin-left:8px;margin-right:8px}.next-pagination.next-medium .next-pagination-ellipsis .next-icon-remote,.next-pagination.next-medium .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination.next-medium .next-pagination-display,.next-pagination.next-medium .next-pagination-display em,.next-pagination.next-medium .next-pagination-jump-text{font-size:12px}.next-pagination.next-medium .next-pagination-jump-input{width:36px}.next-pagination.next-medium .next-pagination-size-selector-title{height:28px;line-height:28px;font-size:12px;vertical-align:middle}.next-pagination.next-medium .next-pagination-size-selector-btn{padding:0 12px}.next-pagination.next-medium .next-pagination-item.next-next:not([disabled]) i,.next-pagination.next-medium .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination.next-medium .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination.next-medium .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-next,.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-prev{width:28px;padding:0}.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-next .next-icon,.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-medium.next-arrow-prev-only .next-pagination-item.next-prev{width:28px;padding:0}.next-pagination.next-medium.next-arrow-prev-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-medium.next-no-border .next-pagination-item.next-next,.next-pagination.next-medium.next-no-border .next-pagination-item.next-prev{padding:0;border:none;background-color:transparent;box-shadow:none}.next-pagination.next-medium.next-no-border .next-pagination-item.next-next .next-icon,.next-pagination.next-medium.next-no-border .next-pagination-item.next-prev .next-icon{margin:0}.next-pagination.next-medium.next-no-border .next-pagination-item.next-next:not([disabled]):hover i,.next-pagination.next-medium.next-no-border .next-pagination-item.next-prev:not([disabled]):hover i{color:#5584ff}.next-pagination.next-medium.next-no-border .next-pagination-display{margin:0 12px}.next-pagination.next-medium.next-mini .next-pagination-item.next-prev{margin-right:4px}.next-pagination.next-medium.next-mini .next-pagination-item.next-next{margin-left:4px}.next-pagination.next-large .next-pagination-list{margin:0 8px}.next-pagination.next-large .next-pagination-total{line-height:40px;vertical-align:middle}.next-pagination.next-large .next-pagination-item{padding:0 15px;border-width:1px;border-radius:3px}.next-pagination.next-large .next-pagination-item+.next-pagination-item{margin:0 0 0 8px}.next-pagination.next-large .next-pagination-ellipsis{height:40px;line-height:40px;margin-left:8px;margin-right:8px}.next-pagination.next-large .next-pagination-ellipsis .next-icon-remote,.next-pagination.next-large .next-pagination-ellipsis:before{width:16px;font-size:16px;line-height:inherit}.next-pagination.next-large .next-pagination-display,.next-pagination.next-large .next-pagination-display em,.next-pagination.next-large .next-pagination-jump-text{font-size:16px}.next-pagination.next-large .next-pagination-jump-input{width:48px}.next-pagination.next-large .next-pagination-size-selector-title{height:40px;line-height:40px;font-size:16px;vertical-align:middle}.next-pagination.next-large .next-pagination-size-selector-btn{padding:0 16px}.next-pagination.next-large .next-pagination-item.next-next:not([disabled]) i,.next-pagination.next-large .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination.next-large .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination.next-large .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination.next-large.next-arrow-only .next-pagination-item.next-next,.next-pagination.next-large.next-arrow-only .next-pagination-item.next-prev{width:40px;padding:0}.next-pagination.next-large.next-arrow-only .next-pagination-item.next-next .next-icon,.next-pagination.next-large.next-arrow-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-large.next-arrow-prev-only .next-pagination-item.next-prev{width:40px;padding:0}.next-pagination.next-large.next-arrow-prev-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-large.next-no-border .next-pagination-item.next-next,.next-pagination.next-large.next-no-border .next-pagination-item.next-prev{padding:0;border:none;background-color:transparent;box-shadow:none}.next-pagination.next-large.next-no-border .next-pagination-item.next-next .next-icon,.next-pagination.next-large.next-no-border .next-pagination-item.next-prev .next-icon{margin:0}.next-pagination.next-large.next-no-border .next-pagination-item.next-next:not([disabled]):hover i,.next-pagination.next-large.next-no-border .next-pagination-item.next-prev:not([disabled]):hover i{color:#5584ff}.next-pagination.next-large.next-no-border .next-pagination-display{margin:0 16px}.next-pagination.next-large.next-mini .next-pagination-item.next-prev{margin-right:8px}.next-pagination.next-large.next-mini .next-pagination-item.next-next{margin-left:8px}.next-pagination-icon-prev:before{content:""}.next-pagination-icon-next:before{content:""}.next-pagination-icon-ellipsis:before{content:""}.next-progress-circle[dir=rtl] .next-progress-circle-container{transform:scaleX(-1)}.next-progress-line[dir=rtl] .next-progress-line-overlay{left:auto;right:0}.next-progress-line,.next-progress-line *,.next-progress-line :after,.next-progress-line :before{box-sizing:border-box}.next-progress-line{width:100%;display:inline-block;position:relative}.next-progress-line-container{display:inline-block;width:100%;vertical-align:middle}.next-progress-line-underlay{position:relative;width:100%;background-color:#ebecf0}.next-progress-line-overlay{position:absolute;left:0;top:0;transition:all .3s ease}.next-progress-line-overlay-normal{background-color:#5584ff}.next-progress-line-overlay-success{background-color:#46bc15}.next-progress-line-overlay-error,.next-progress-line-overlay-started{background-color:#ff3000}.next-progress-line-overlay-middle{background-color:#ff9300}.next-progress-line-overlay-finishing{background-color:#46bc15}.next-progress-line.next-small .next-progress-line-underlay{border-radius:20px;height:4px}.next-progress-line.next-small .next-progress-line-overlay{height:4px;border-radius:20px;top:50%;margin-top:-2px}.next-progress-line.next-small .next-progress-line-text{font-size:12px;line-height:4px}.next-progress-line.next-medium .next-progress-line-underlay{border-radius:20px;height:8px}.next-progress-line.next-medium .next-progress-line-overlay{height:8px;border-radius:20px;top:50%;margin-top:-4px}.next-progress-line.next-medium .next-progress-line-text{font-size:12px;line-height:8px}.next-progress-line.next-large .next-progress-line-underlay{border-radius:20px;height:12px}.next-progress-line.next-large .next-progress-line-overlay{height:12px;border-radius:20px;top:50%;margin-top:-6px}.next-progress-line.next-large .next-progress-line-text{font-size:12px;line-height:12px}.next-progress-line-show-info .next-progress-line-container{padding-right:60px;margin-right:-60px}.next-progress-line-show-info .next-progress-line-text{width:50px;text-align:left;margin-left:10px;vertical-align:middle;display:inline-block;color:#333}.next-progress-line-show-border .next-progress-line-underlay{border:1px solid #dcdee3}.next-progress-line-show-border.next-small .next-progress-line-underlay{border-radius:20px;height:6px}.next-progress-line-show-border.next-small .next-progress-line-overlay{height:4px;border-radius:20px;top:50%;margin-top:-2px}.next-progress-line-show-border.next-small .next-progress-line-text{font-size:12px;line-height:6px}.next-progress-line-show-border.next-medium .next-progress-line-underlay{border-radius:20px;height:10px}.next-progress-line-show-border.next-medium .next-progress-line-overlay{height:8px;border-radius:20px;top:50%;margin-top:-4px}.next-progress-line-show-border.next-medium .next-progress-line-text{font-size:12px;line-height:10px}.next-progress-line-show-border.next-large .next-progress-line-underlay{border-radius:20px;height:14px}.next-progress-line-show-border.next-large .next-progress-line-overlay{height:12px;border-radius:20px;top:50%;margin-top:-6px}.next-progress-line-show-border.next-large .next-progress-line-text{font-size:12px;line-height:14px}.next-progress-circle,.next-progress-circle *,.next-progress-circle :after,.next-progress-circle :before{box-sizing:border-box}.next-progress-circle{position:relative;display:inline-block}.next-progress-circle-underlay{stroke-width:8px;stroke:#ebecf0}.next-progress-circle-overlay{transition:all .3s ease;stroke-linecap:round;stroke-width:8px}.next-progress-circle-overlay-normal{stroke:#5584ff}.next-progress-circle-overlay-success{stroke:#46bc15}.next-progress-circle-overlay-error,.next-progress-circle-overlay-started{stroke:#ff3000}.next-progress-circle-overlay-middle{stroke:#ff9300}.next-progress-circle-overlay-finishing{stroke:#46bc15}.next-progress-circle.next-small{width:100px;height:100px;font-size:20px}.next-progress-circle.next-medium{width:116px;height:116px;font-size:24px}.next-progress-circle.next-large{width:132px;height:132px;font-size:36px}.next-progress-circle-text{display:block;position:absolute;width:100%;top:50%;left:0;text-align:center;line-height:1;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:transform .3s ease;color:#333}.next-upload-list[dir=rtl].next-upload-list-text .next-upload-list-item{padding:4px 8px 4px 36px}.next-upload-list[dir=rtl].next-upload-list-text .next-icon{left:12px;right:auto}.next-upload-list[dir=rtl].next-upload-list-image .next-icon-close{float:left;margin-left:4px;margin-right:0}.next-upload-list[dir=rtl].next-upload-list-image .next-upload-list-item-thumbnail{float:right;margin-left:8px;margin-right:0}.next-upload-list[dir=rtl].next-upload-list-image .next-upload-list-item-progress{margin-right:56px;margin-left:20px}.next-upload,.next-upload *,.next-upload :after,.next-upload :before{box-sizing:border-box}.next-upload-inner{outline:0;display:inline-block}.next-upload-inner.next-hidden{display:none}.next-upload-list{overflow:hidden}.next-upload-list,.next-upload-list *,.next-upload-list :after,.next-upload-list :before{box-sizing:border-box}.next-upload-list-item{position:relative}.next-upload-list-item.next-hidden{display:none}.next-upload-list-item-name{text-decoration:none}.next-upload.next-disabled{border-color:#e6e7eb!important;color:#ccc!important}.next-upload.next-disabled .next-icon-close{cursor:not-allowed!important}.next-upload.next-disabled .next-upload-inner *{color:#ccc!important;border-color:#e6e7eb!important;cursor:not-allowed!important}.next-upload-list-text .next-upload-list-item{background-color:#f2f3f7;padding:4px 36px 4px 8px;height:40px;line-height:32px;font-size:12px;overflow:hidden;transition:all .1s linear;border-radius:0}.next-upload-list-text .next-upload-list-item:not(:last-child){margin-bottom:4px}.next-upload-list-text .next-upload-list-item .next-icon{position:absolute;top:0;right:12px;color:#999;cursor:pointer;text-align:center;transition:all .1s linear;line-height:40px}.next-upload-list-text .next-upload-list-item .next-icon .next-icon-remote,.next-upload-list-text .next-upload-list-item .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-upload-list-text .next-upload-list-item:hover{background-color:#f2f3f7}.next-upload-list-text .next-upload-list-item:hover .next-icon{color:#666}.next-upload-list-text .next-upload-list-item-name-wrap{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin-right:4px}.next-upload-list-text .next-upload-list-item-name{color:#333;transition:all .1s linear}.next-upload-list-text .next-upload-list-item-size{color:#999;margin-left:8px}.next-upload-list-text .next-upload-list-item-uploading{line-height:16px}.next-upload-list-text .next-upload-list-item-uploading .next-upload-list-item-progress{line-height:0;padding-top:4px;padding-bottom:4px}.next-upload-list-text .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-underlay{height:8px}.next-upload-list-text .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-overlay{height:8px;margin-top:-4px}.next-upload-list-text .next-upload-list-item-done{line-height:32px}.next-upload-list-text .next-upload-list-item-done:hover .next-upload-list-item-name,.next-upload-list-text .next-upload-list-item-done:hover .next-upload-list-item-size{color:#5584ff}.next-upload-list-text .next-upload-list-item-error{background-color:#ffece4!important}.next-upload-list-text .next-upload-list-item-error.next-upload-list-item-error-with-msg{line-height:16px}.next-upload-list-text .next-upload-list-item-error-msg{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#ff3000}.next-upload-list-image .next-upload-list-item{box-sizing:content-box;border:1px solid #dcdee3;background-color:#fff;padding:8px;height:48px;line-height:48px;font-size:12px;transition:all .1s linear;overflow:hidden;border-radius:0}.next-upload-list-image .next-upload-list-item:not(:last-child){margin-bottom:4px}.next-upload-list-image .next-upload-list-item:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-upload-list-image .next-upload-list-item .next-icon-close{float:right;margin-right:4px;cursor:pointer;color:#999;text-align:center}.next-upload-list-image .next-upload-list-item .next-icon-close .next-icon-remote,.next-upload-list-image .next-upload-list-item .next-icon-close:before{width:12px;font-size:12px;line-height:inherit}.next-upload-list-image .next-upload-list-item:hover{border-color:#5584ff}.next-upload-list-image .next-upload-list-item:hover .next-icon-close{color:#666}.next-upload-list-image .next-upload-list-item-name{display:block;color:#333;margin-left:56px;margin-right:20px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:all .1s linear}.next-upload-list-image .next-upload-list-item-size{color:#999;margin-left:8px}.next-upload-list-image .next-upload-list-item-done:hover .next-upload-list-item-name,.next-upload-list-image .next-upload-list-item-done:hover .next-upload-list-item-size{color:#5584ff}.next-upload-list-image .next-upload-list-item-thumbnail{float:left;width:48px;height:48px;color:#ccc;border:1px solid #dcdee3;border-radius:0;background-color:#f2f3f7;margin-right:8px;vertical-align:middle;text-align:center;overflow:hidden;box-sizing:border-box}.next-upload-list-image .next-upload-list-item-thumbnail img{width:100%;height:100%}.next-upload-list-image .next-upload-list-item-thumbnail .next-icon{display:block;margin:0;line-height:48px}.next-upload-list-image .next-upload-list-item-thumbnail .next-icon .next-icon-remote,.next-upload-list-image .next-upload-list-item-thumbnail .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-upload-list-image .next-upload-list-item-error{border-color:#ff3000!important;background-color:#fff}.next-upload-list-image .next-upload-list-item-uploading{background-color:#fff}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-name{height:24px;line-height:24px}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-progress{margin-left:56px;margin-right:20px;line-height:0;padding-top:8px;padding-bottom:8px}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-underlay{height:8px}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-overlay{height:8px;margin-top:-4px}.next-upload-list-image .next-upload-list-item-error-with-msg .next-upload-list-item-error-msg,.next-upload-list-image .next-upload-list-item-error-with-msg .next-upload-list-item-name{height:24px;line-height:24px}.next-upload-list-image .next-upload-list-item-error-with-msg .next-upload-list-item-error-msg{margin-left:56px;margin-right:20px;color:#ff3000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.next-upload-list-card{display:inline-block}.next-upload-list-card .next-upload-list-item{vertical-align:middle;float:left}.next-upload-list-card .next-upload-list-item:not(:last-child){margin-right:12px}.next-upload-list-card .next-upload-list-item-wrapper{position:relative;border:1px solid #c4c6cf;width:100px;height:100px;padding:0;background-color:transparent}.next-upload-list-card .next-upload-list-item-thumbnail{text-align:center;width:100%;height:100%;color:#ccc;font-size:12px}.next-upload-list-card .next-upload-list-item-thumbnail img{max-width:100%;max-height:100%;position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.next-upload-list-card .next-upload-list-item-thumbnail img:focus{outline:0}.next-upload-list-card .next-upload-list-item-thumbnail .next-icon{width:100%}.next-upload-list-card .next-upload-list-item-thumbnail .next-icon .next-icon-remote,.next-upload-list-card .next-upload-list-item-thumbnail .next-icon:before{width:48px;font-size:48px;line-height:inherit}.next-upload-list-card .next-upload-list-item-handler{margin-top:13px}.next-upload-list-card .next-upload-list-item-handler .next-icon-cry{margin-top:10px}.next-upload-list-card .next-upload-list-item-name{display:block;width:100px;text-align:center;margin-top:4px;font-size:12px;color:#666;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.next-upload-list-card .next-upload-list-item-progress{position:absolute;font-size:0;bottom:0;left:0;width:100%}.next-upload-list-card .next-upload-list-item-progress .next-progress-line-underlay{border-radius:0;height:8px}.next-upload-list-card .next-upload-list-item-progress .next-progress-line-overlay{border-radius:0;height:8px;margin-top:-4px}.next-upload-list-card .next-upload-list-item-uploading .next-upload-list-item-wrapper{background-color:#f7f8fa}.next-upload-list-card .next-upload-list-item:hover .next-upload-tool{opacity:.8}.next-upload-list-card .next-upload-list-item .next-upload-tool{position:absolute;z-index:1;background-color:rgba(0,0,0,.7);transition:all .1s linear;opacity:0;width:100%;height:28px;left:0;bottom:0}.next-upload-list-card .next-upload-list-item .next-upload-tool .next-icon{width:49%;text-align:center;line-height:28px;color:#fff}.next-upload-list-card .next-upload-list-item .next-upload-tool .next-icon .next-icon-remote,.next-upload-list-card .next-upload-list-item .next-upload-tool .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-upload-list-card .next-upload-list-item .next-upload-tool.next-noclose .next-icon{width:100%}.next-upload-list-card .next-upload-list-item .next-upload-tool-close{cursor:pointer}.next-upload-list-card .next-upload-list-item .next-upload-tool-download-icon{border-right:1px solid #fff}.next-upload-list-card .next-upload-list-item-error .next-upload-list-item-wrapper{border-color:#ff3000}.next-upload-card{border:1px dashed #c4c6cf;width:100px;height:100px;background-color:#fff;text-align:center;cursor:pointer;transition:border-color .1s linear;display:table-cell;vertical-align:middle}.next-upload-card .next-icon{color:#c4c6cf}.next-upload-card .next-icon .next-icon-remote,.next-upload-card .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-upload-card .next-upload-add-icon:before{content:""}.next-upload-card .next-upload-text{font-size:12px;margin-top:12px;color:#666;outline:none}.next-upload-card:hover{border-color:#5584ff}.next-upload-card:hover .next-icon,.next-upload-card:hover .next-upload-text{color:#5584ff}.next-upload-dragable .next-upload-inner{display:block}.next-upload-dragable .next-upload-drag{border:1px dashed #c4c6cf;transition:border-color .1s linear;cursor:pointer;border-radius:3px;background-color:transparent;text-align:center;margin-bottom:4px}.next-upload-dragable .next-upload-drag-icon{margin:20px 0 0;color:#666}.next-upload-dragable .next-upload-drag-icon .next-upload-drag-upload-icon:before{content:"";font-size:24px}.next-upload-dragable .next-upload-drag-text{margin:12px 0 0;font-size:14px;color:#666}.next-upload-dragable .next-upload-drag-hint{margin:4px 0 20px;font-size:12px;color:#999}.next-upload-dragable .next-upload-drag-over{border-color:#5584ff}.next-collapse[dir=rtl] .next-collapse-panel-title{padding:8px 28px 8px 0}.next-collapse[dir=rtl] .next-collapse-panel-icon{left:inherit;right:12px;transform:rotate(180deg);margin-left:0;margin-right:0}.next-collapse[dir=rtl] .next-collapse-panel-icon .next-icon-remote,.next-collapse[dir=rtl] .next-collapse-panel-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-collapse[dir=rtl] .next-collapse-panel-icon{transform:scale(.5) rotate(180deg);margin-left:-4px;margin-right:-4px}.next-collapse[dir=rtl] .next-collapse-panel-icon:before{width:16px;font-size:16px}}.next-collapse{border:1px solid #dcdee3;border-radius:3px}.next-collapse,.next-collapse *,.next-collapse :after,.next-collapse :before{box-sizing:border-box}.next-collapse:focus,.next-collapse :focus{outline:0}.next-collapse-panel:not(:first-child){border-top:1px solid #dcdee3}.next-collapse .next-collapse-panel-icon{position:absolute;color:#333;transition:transform .1s linear;left:12px;margin-top:-2px;margin-left:0;margin-right:0}.next-collapse .next-collapse-panel-icon .next-icon-remote,.next-collapse .next-collapse-panel-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-collapse .next-collapse-panel-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-collapse .next-collapse-panel-icon:before{width:16px;font-size:16px}}.next-collapse-panel-title{position:relative;line-height:20px;background:#f2f3f7;font-size:14px;font-weight:400;color:#333;cursor:pointer;padding:8px 0 8px 28px;transition:background .1s linear}.next-collapse-panel-title:hover{background:#ebecf0;color:#333;font-weight:400}.next-collapse-panel-title:hover .next-collapse-panel-icon{color:#333}.next-collapse-panel-content{height:0;padding:0 16px;background:#fff;font-size:12px;color:#666;transition:all .3s ease;opacity:0}.next-collapse-panel-expanded>.next-collapse-panel-content{display:block;padding:12px 16px;height:auto;opacity:1}.next-collapse .next-collapse-unfold-icon:before{content:""}.next-collapse-panel-hidden>.next-collapse-panel-content{overflow:hidden}.next-collapse .next-collapse-panel-icon:before{content:""}.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded{transform:rotate(90deg);margin-left:0;margin-right:0}.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded .next-icon-remote,.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded{transform:scale(.5) rotate(90deg);margin-left:-4px;margin-right:-4px}.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded:before{width:16px;font-size:16px}}.next-collapse-disabled,.next-collapse-panel-disabled:not(:first-child){border-color:#e6e7eb}.next-collapse-panel-disabled>.next-collapse-panel-title{cursor:not-allowed;color:#ccc;background:#f2f3f7}.next-collapse-panel-disabled .next-collapse-panel-icon{color:#ccc}.next-collapse-panel-disabled .next-collapse-panel-title:hover{font-weight:400}.next-collapse-panel-disabled .next-collapse-panel-title:hover .next-collapse-panel-icon{color:#ccc}.next-collapse-panel-disabled:hover{color:#ccc;background:#f2f3f7}.next-search-simple[dir=rtl].next-large .next-search-icon{margin-left:12px;margin-right:0}.next-search-simple[dir=rtl].next-medium .next-search-icon{margin-left:8px;margin-right:0}.next-search-simple[dir=rtl].next-normal .next-search-left .next-search-left-addon{border-left:1px solid #c4c6cf;border-right:none}.next-search-simple[dir=rtl].next-dark .next-search-left{border-color:#c4c6cf}.next-search-simple[dir=rtl].next-dark .next-search-left .next-search-left-addon{border-right:1px solid #c4c6cf}.next-search-simple[dir=rtl].next-dark:hover .next-search-left{border-color:#c4c6cf}.next-search-simple[dir=rtl].next-dark .next-search-icon{color:#999}.next-search-simple[dir=rtl].next-dark .next-search-icon:hover{color:#666}.next-search-normal[dir=rtl] .next-search-left{border-left:none;border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-left-radius:0;border-bottom-left-radius:0}.next-search-normal[dir=rtl] .next-search-btn.next-btn{border-radius:3px 0 0 3px!important}.next-search-normal[dir=rtl] .next-input{border-radius:0 3px 3px 0}.next-search-normal[dir=rtl].next-primary .next-input{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:1px;border-bottom-right-radius:1px}.next-search-normal[dir=rtl].next-primary .next-search-left .next-search-left-addon{border-left:1px solid #e6e7eb;border-right:none}.next-search-normal[dir=rtl].next-secondary .next-input{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:1px;border-bottom-right-radius:1px}.next-search-normal[dir=rtl].next-secondary .next-search-left .next-search-left-addon{border-left:1px solid #e6e7eb;border-right:none}.next-search-normal[dir=rtl].next-normal .next-input{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:1px;border-bottom-right-radius:1px}.next-search-normal[dir=rtl].next-normal .next-search-left .next-search-left-addon{border-left:1px solid #e6e7eb;border-right:none}.next-search-normal[dir=rtl].next-dark .next-search-left .next-search-left-addon{border-left:1px solid #5584ff;border-right:none}.next-search{width:100%;display:inline-block}.next-search,.next-search *,.next-search :after,.next-search :before{box-sizing:border-box}.next-search .next-input,.next-search .next-select{border:none}.next-search .next-select .next-input,.next-search .next-select .next-input .next-input-text-field{height:auto}.next-search .next-search-left{border-style:solid;transition:all .1s linear}.next-search .next-search-left-addon .next-input,.next-search .next-search-left-addon .next-select-trigger-search{min-height:100%;border-bottom-right-radius:0;border-top-right-radius:0}.next-search .next-search-left-addon .next-select-values{line-height:1}.next-search .next-search-left-addon.next-input-group-addon .next-select{margin:0}.next-search .next-search-left-addon+.next-search-input .next-input{border-bottom-left-radius:0;border-top-left-radius:0}.next-search .next-search-input{width:100%}.next-search .next-search-btn{box-shadow:none}.next-search .next-search-symbol-icon:before{content:""}.next-search-normal{width:600px}.next-search-normal .next-search-left{border-top-left-radius:3px;border-bottom-left-radius:3px}.next-search-normal .next-input{border-radius:3px 0 0 3px}.next-search-normal .next-btn{border-radius:0 3px 3px 0}.next-search-normal.next-primary .next-search-left{border-color:#5584ff}.next-search-normal.next-primary .next-search-left .next-search-left-addon{border-right:1px solid #e6e7eb}.next-search-normal.next-primary:hover .next-btn,.next-search-normal.next-primary:hover .next-search-left{border-color:#5584ff}.next-search-normal.next-primary .next-search-btn{background:#5584ff;border-color:#5584ff;color:#fff}.next-search-normal.next-primary .next-search-btn:hover{background:#3e71f7;border-color:#5584ff;color:#fff}.next-search-normal.next-primary .next-search-btn .next-icon,.next-search-normal.next-primary .next-search-btn .next-icon:hover{color:#fff}.next-search-normal.next-primary.next-large{box-shadow:none}.next-search-normal.next-primary.next-large .next-search-btn,.next-search-normal.next-primary.next-large .next-search-left{border-width:2px;height:60px}.next-search-normal.next-primary.next-large .next-search-input{height:56px;overflow-y:hidden}.next-search-normal.next-primary.next-large .next-search-input input{height:56px;line-height:56px \0}.next-search-normal.next-primary.next-large .next-select{height:56px}.next-search-normal.next-primary.next-large .next-search-btn{font-size:16px}.next-search-normal.next-primary.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-primary.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-primary.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-primary.next-medium{box-shadow:none}.next-search-normal.next-primary.next-medium .next-search-btn,.next-search-normal.next-primary.next-medium .next-search-left{border-width:2px;height:40px}.next-search-normal.next-primary.next-medium .next-search-input{height:36px;overflow-y:hidden}.next-search-normal.next-primary.next-medium .next-search-input input{height:36px;line-height:36px \0}.next-search-normal.next-primary.next-medium .next-select{height:36px}.next-search-normal.next-primary.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-primary.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-primary.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-primary.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-primary .next-input{border-top-left-radius:1px;border-bottom-left-radius:1px}.next-search-normal.next-secondary .next-search-left{border-color:#c4c6cf}.next-search-normal.next-secondary .next-search-left .next-search-left-addon{border-right:1px solid #e6e7eb}.next-search-normal.next-secondary:hover .next-btn,.next-search-normal.next-secondary:hover .next-search-left{border-color:#5584ff}.next-search-normal.next-secondary .next-search-btn{background:#5584ff;border-color:#5584ff;color:#fff}.next-search-normal.next-secondary .next-search-btn:hover{background:#3e71f7;border-color:#5584ff;color:#fff}.next-search-normal.next-secondary .next-search-btn .next-icon,.next-search-normal.next-secondary .next-search-btn .next-icon:hover{color:#fff}.next-search-normal.next-secondary.next-large{box-shadow:none}.next-search-normal.next-secondary.next-large .next-search-btn,.next-search-normal.next-secondary.next-large .next-search-left{border-width:1px;height:60px}.next-search-normal.next-secondary.next-large .next-search-input{height:58px;overflow-y:hidden}.next-search-normal.next-secondary.next-large .next-search-input input{height:58px;line-height:58px \0}.next-search-normal.next-secondary.next-large .next-select{height:58px}.next-search-normal.next-secondary.next-large .next-search-btn{font-size:16px}.next-search-normal.next-secondary.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-secondary.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-secondary.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-secondary.next-medium{box-shadow:none}.next-search-normal.next-secondary.next-medium .next-search-btn,.next-search-normal.next-secondary.next-medium .next-search-left{border-width:1px;height:40px}.next-search-normal.next-secondary.next-medium .next-search-input{height:38px;overflow-y:hidden}.next-search-normal.next-secondary.next-medium .next-search-input input{height:38px;line-height:38px \0}.next-search-normal.next-secondary.next-medium .next-select{height:38px}.next-search-normal.next-secondary.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-secondary.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-secondary.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-secondary.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-secondary .next-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.next-search-normal.next-normal .next-search-left{border-color:#c4c6cf}.next-search-normal.next-normal .next-search-left .next-search-left-addon{border-right:1px solid #e6e7eb}.next-search-normal.next-normal:hover .next-btn,.next-search-normal.next-normal:hover .next-search-left{border-color:#a0a2ad}.next-search-normal.next-normal .next-search-btn{background:#f7f8fa;border-color:#c4c6cf;color:#666}.next-search-normal.next-normal .next-search-btn:hover{background:#ebecf0;border-color:#a0a2ad;color:#333}.next-search-normal.next-normal .next-search-btn .next-icon{color:#666}.next-search-normal.next-normal .next-search-btn .next-icon:hover{color:#333}.next-search-normal.next-normal.next-large{box-shadow:none}.next-search-normal.next-normal.next-large .next-search-btn,.next-search-normal.next-normal.next-large .next-search-left{border-width:1px;height:60px}.next-search-normal.next-normal.next-large .next-search-input{height:58px;overflow-y:hidden}.next-search-normal.next-normal.next-large .next-search-input input{height:58px;line-height:58px \0}.next-search-normal.next-normal.next-large .next-select{height:58px}.next-search-normal.next-normal.next-large .next-search-btn{font-size:16px}.next-search-normal.next-normal.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-normal.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-normal.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-normal.next-medium{box-shadow:none}.next-search-normal.next-normal.next-medium .next-search-btn,.next-search-normal.next-normal.next-medium .next-search-left{border-width:1px;height:40px}.next-search-normal.next-normal.next-medium .next-search-input{height:38px;overflow-y:hidden}.next-search-normal.next-normal.next-medium .next-search-input input{height:38px;line-height:38px \0}.next-search-normal.next-normal.next-medium .next-select{height:38px}.next-search-normal.next-normal.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-normal.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-normal.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-normal.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-normal .next-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.next-search-normal.next-dark .next-search-left{border-color:#5584ff}.next-search-normal.next-dark .next-search-left .next-search-left-addon{border-right:1px solid #5584ff}.next-search-normal.next-dark:hover .next-btn,.next-search-normal.next-dark:hover .next-search-left{border-color:#5584ff}.next-search-normal.next-dark .next-search-btn{background:#5584ff;border-color:#5584ff;color:#fff}.next-search-normal.next-dark .next-search-btn:hover{background:#3e71f7;border-color:#5584ff;color:#fff}.next-search-normal.next-dark .next-search-btn .next-icon,.next-search-normal.next-dark .next-search-btn .next-icon:hover,.next-search-normal.next-dark .next-select-inner,.next-search-normal.next-dark input{color:#fff}.next-search-normal.next-dark .next-input,.next-search-normal.next-dark .next-select{background:hsla(0,0%,100%,0)}.next-search-normal.next-dark.next-large{box-shadow:none}.next-search-normal.next-dark.next-large .next-search-btn,.next-search-normal.next-dark.next-large .next-search-left{border-width:1px;height:60px}.next-search-normal.next-dark.next-large .next-search-input{height:58px;overflow-y:hidden}.next-search-normal.next-dark.next-large .next-search-input input{height:58px;line-height:58px \0}.next-search-normal.next-dark.next-large .next-select{height:58px}.next-search-normal.next-dark.next-large .next-search-btn{font-size:16px}.next-search-normal.next-dark.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-dark.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-dark.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-dark.next-medium{box-shadow:none}.next-search-normal.next-dark.next-medium .next-search-btn,.next-search-normal.next-dark.next-medium .next-search-left{border-width:1px;height:40px}.next-search-normal.next-dark.next-medium .next-search-input{height:38px;overflow-y:hidden}.next-search-normal.next-dark.next-medium .next-search-input input{height:38px;line-height:38px \0}.next-search-normal.next-dark.next-medium .next-select{height:38px}.next-search-normal.next-dark.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-dark.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-dark.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-dark.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal:not([dir=rtl]) .next-search-left{border-right:none}.next-search-simple{width:300px;box-shadow:none;border-radius:3px}.next-search-simple .next-search-icon{cursor:pointer;transition:all .1s linear}.next-search-simple .next-input,.next-search-simple .next-search-left{border-radius:3px}.next-search-simple.next-large .next-search-icon{margin-right:12px}.next-search-simple.next-medium .next-search-icon{margin-right:8px}.next-search-simple.next-normal .next-search-left{border-color:#c4c6cf}.next-search-simple.next-normal .next-search-left .next-search-left-addon{border-right:1px solid #c4c6cf}.next-search-simple.next-normal:hover .next-search-left{border-color:#a0a2ad}.next-search-simple.next-normal .next-search-icon{color:#999}.next-search-simple.next-normal .next-search-icon:hover{color:#666}.next-search-simple.next-normal .next-search-left{border-width:1px}.next-search-simple.next-normal.next-large .next-search-icon .next-icon-remote,.next-search-simple.next-normal.next-large .next-search-icon:before{width:20px;font-size:20px;line-height:inherit}.next-search-simple.next-normal.next-medium .next-search-icon .next-icon-remote,.next-search-simple.next-normal.next-medium .next-search-icon:before{width:12px;font-size:12px;line-height:inherit}.next-search-simple.next-dark .next-search-left{border-color:#c4c6cf}.next-search-simple.next-dark .next-search-left .next-search-left-addon{border-right:1px solid #c4c6cf}.next-search-simple.next-dark:hover .next-search-left{border-color:#c4c6cf}.next-search-simple.next-dark .next-search-icon{color:#999}.next-search-simple.next-dark .next-search-icon:hover{color:#666}.next-search-simple.next-dark .next-select-inner,.next-search-simple.next-dark input{color:#fff}.next-search-simple.next-dark .next-input,.next-search-simple.next-dark .next-select{background:hsla(0,0%,100%,0)}.next-search-simple.next-dark .next-search-left{border-width:1px}.next-search-simple.next-dark.next-large .next-search-icon .next-icon-remote,.next-search-simple.next-dark.next-large .next-search-icon:before{width:20px;font-size:20px;line-height:inherit}.next-search-simple.next-dark.next-medium .next-search-icon .next-icon-remote,.next-search-simple.next-dark.next-medium .next-search-icon:before{width:12px;font-size:12px;line-height:inherit}.next-search-simple .next-select.next-large{height:38px}.next-search-simple .next-select.next-medium{height:26px}.next-transfer{display:inline-block}.next-transfer,.next-transfer *,.next-transfer :after,.next-transfer :before{box-sizing:border-box}.next-transfer-panel{display:inline-block;border:1px solid #dcdee3;border-radius:3px;background-color:#fff;vertical-align:middle}.next-transfer-panel-header{padding:8px 20px;border-bottom:1px solid #dcdee3;background-color:#f7f8fa;color:#333;font-size:12px}.next-transfer-panel-search{padding:0 4px;margin-top:8px;margin-bottom:0;width:100%}.next-transfer .next-transfer-panel-list{width:180px;height:160px;padding:0;border:none;box-shadow:none;border-radius:0;overflow-y:auto}.next-transfer-panel-not-found-container{display:table;width:100%;height:100%}.next-transfer-panel-not-found{display:table-cell;vertical-align:middle;text-align:center;color:#999;font-size:14px}.next-transfer-panel-item.next-focused{transition:background-color .1s linear}.next-transfer-panel-item:not(.next-disabled).next-simple:hover{color:#5584ff}.next-transfer-panel-item.next-insert-before:before{position:absolute;top:0;left:0;content:"";width:100%;border-top:1px solid #5584ff}.next-transfer-panel-item.next-insert-after:after{position:absolute;left:0;bottom:0;content:"";width:100%;border-bottom:1px solid #5584ff}.next-transfer-panel-footer{position:relative;padding:8px 20px;border-top:1px solid #dcdee3;background-color:#fff;font-size:0;box-shadow:none}.next-transfer-panel-count{margin-left:4px;font-size:12px;vertical-align:middle;color:#333}.next-transfer-panel-move-all{font-size:12px;color:#5584ff;cursor:pointer}.next-transfer-panel-move-all.next-disabled{color:#ccc;cursor:not-allowed}.next-transfer-operations{display:inline-block;vertical-align:middle;margin:0 20px}.next-transfer-move.next-icon{color:#c4c6cf}.next-transfer-move.next-icon:before{content:""}.next-transfer-operation.next-btn{display:block}.next-transfer-operation.next-btn+.next-transfer-operation.next-btn{margin-top:8px}.next-transfer-operation.next-btn .next-icon .next-icon-remote,.next-transfer-operation.next-btn .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-slick{position:relative;display:block;-webkit-touch-callout:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.next-slick,.next-slick *,.next-slick :after,.next-slick :before{box-sizing:border-box}.next-slick-initialized .next-slick-slide{display:block}.next-slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0;transform:translateZ(0)}.next-slick-list:focus{outline:none}.next-slick-list.dragging{cursor:pointer;cursor:hand}.next-slick-track{position:relative;top:0;left:0;display:block;transform:translateZ(0)}.next-slick-slide{float:left;height:100%;min-height:1px;outline:0;transition:all .1s linear}.next-slick[dir=rtl] .next-slick-slide{float:right}.next-slick-slide img{display:block}.next-slick-arrow{display:block;position:absolute;cursor:pointer;text-align:center;transition:all .1s linear}.next-slick-arrow.inner{color:#fff;background:#000;opacity:.2;padding:0;border:none}.next-slick-arrow.inner:focus,.next-slick-arrow.inner:hover{color:#fff;background:#000;opacity:.4}.next-slick-arrow.inner.disabled{color:#ccc;background:#f7f8fa;opacity:.5}.next-slick-arrow.outer{color:#666;background:transparent;opacity:.32;padding:0;border:none;border-radius:0}.next-slick-arrow.outer:focus,.next-slick-arrow.outer:hover{color:#333;background:transparent;opacity:.32}.next-slick-arrow.outer.disabled{color:#ccc;background:transparent;opacity:.32}.next-slick-arrow.disabled{cursor:not-allowed}.next-slick-dots{display:block;position:absolute;margin:0;padding:0}.next-slick-dots-item{position:relative;display:inline-block;cursor:pointer}.next-slick-dots-item button{cursor:pointer;border:0 solid #fff;outline:none;padding:0;height:8px;width:8px;border-radius:50%;background:rgba(0,0,0,.32)}.next-slick-dots-item button:hover{background-color:rgba(0,0,0,.32);border-color:#fff}.next-slick-dots-item button:focus,.next-slick-dots-item button:hover{background:hsla(0,0%,100%,.5)}.next-slick-dots-item.active button{background:#5584ff;border-color:#fff;animation:zoom .3s cubic-bezier(.86,0,.07,1)}.next-slick-dots.hoz{width:100%;bottom:12px;left:0;text-align:center}.next-slick-dots.hoz .next-slick-dots-item{margin:0 4px}.next-slick-dots.ver{width:16px;top:0;right:20px;bottom:0;display:flex;justify-content:center;flex-direction:column}.next-slick-dots.ver .next-slick-dots-item{margin:0}.next-slick.next-slick-hoz.next-slick-outer{padding:0 24px}.next-slick.next-slick-hoz .next-slick-arrow.medium{width:28px;height:56px;line-height:56px}.next-slick.next-slick-hoz .next-slick-arrow.medium .next-icon .next-icon-remote,.next-slick.next-slick-hoz .next-slick-arrow.medium .next-icon:before{width:20px;font-size:20px;line-height:inherit}.next-slick.next-slick-hoz .next-slick-arrow.medium.inner{top:calc((100% - 56px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.medium.inner.next-slick-prev{left:0}.next-slick.next-slick-hoz .next-slick-arrow.medium.inner.next-slick-next{right:0}.next-slick.next-slick-hoz .next-slick-arrow.medium.outer{top:calc((100% - 56px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.medium.outer.next-slick-prev{left:-4px}.next-slick.next-slick-hoz .next-slick-arrow.medium.outer.next-slick-next{right:-4px}.next-slick.next-slick-hoz .next-slick-arrow.large{width:48px;height:96px;line-height:96px}.next-slick.next-slick-hoz .next-slick-arrow.large .next-icon .next-icon-remote,.next-slick.next-slick-hoz .next-slick-arrow.large .next-icon:before{width:32px;font-size:32px;line-height:inherit}.next-slick.next-slick-hoz .next-slick-arrow.large.inner{top:calc((100% - 96px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.large.inner.next-slick-prev{left:0}.next-slick.next-slick-hoz .next-slick-arrow.large.inner.next-slick-next{right:0}.next-slick.next-slick-hoz .next-slick-arrow.large.outer{top:calc((100% - 96px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.large.outer.next-slick-prev{left:-8px}.next-slick.next-slick-hoz .next-slick-arrow.large.outer.next-slick-next{right:-8px}.next-slick.next-slick-ver.next-slick-outer{padding:24px 0}.next-slick.next-slick-ver .next-slick-slide{display:block;height:auto}.next-slick.next-slick-ver .next-slick-arrow.medium{width:56px;height:28px;line-height:28px}.next-slick.next-slick-ver .next-slick-arrow.medium .next-icon .next-icon-remote,.next-slick.next-slick-ver .next-slick-arrow.medium .next-icon:before{width:20px;font-size:20px;line-height:inherit}.next-slick.next-slick-ver .next-slick-arrow.medium.inner{left:calc((100% - 56px)/2)}.next-slick.next-slick-ver .next-slick-arrow.medium.inner.next-slick-prev{top:0}.next-slick.next-slick-ver .next-slick-arrow.medium.inner.next-slick-next{bottom:0}.next-slick.next-slick-ver .next-slick-arrow.medium.outer{left:calc((100% - 56px)/2)}.next-slick.next-slick-ver .next-slick-arrow.medium.outer.next-slick-prev{top:-4px}.next-slick.next-slick-ver .next-slick-arrow.medium.outer.next-slick-next{bottom:-4px}.next-slick.next-slick-ver .next-slick-arrow.large{width:96px;height:48px;line-height:48px}.next-slick.next-slick-ver .next-slick-arrow.large .next-icon .next-icon-remote,.next-slick.next-slick-ver .next-slick-arrow.large .next-icon:before{width:32px;font-size:32px;line-height:inherit}.next-slick.next-slick-ver .next-slick-arrow.large.inner{left:calc((100% - 96px)/2)}.next-slick.next-slick-ver .next-slick-arrow.large.inner.next-slick-prev{top:0}.next-slick.next-slick-ver .next-slick-arrow.large.inner.next-slick-next{bottom:0}.next-slick.next-slick-ver .next-slick-arrow.large.outer{left:calc((100% - 96px)/2)}.next-slick.next-slick-ver .next-slick-arrow.large.outer.next-slick-prev{top:-16px}.next-slick.next-slick-ver .next-slick-arrow.large.outer.next-slick-next{bottom:-16px}.next-pagination-size-selector{position:static!important}.configuration-table{margin-bottom:20px}.next-sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;margin:-1px}.next-switch:after[dir=rtl]{content:" ";transition:all .1s linear;transform-origin:right center}.next-switch-medium[dir=rtl]:after,.next-switch-small[dir=rtl]:after{right:100%;transform:translateX(100%)}.next-switch-on[dir=rtl]>.next-switch-children{right:10px;left:auto;color:#fff}.next-switch-on[disabled][dir=rtl]:after{left:0;right:100%;box-shadow:1px 1px 3px 0 rgba(0,0,0,.12)}.next-switch-on.next-switch-small[dir=rtl]>.next-switch-children{right:6px;left:auto}.next-switch-off[dir=rtl]:after{right:0;transform:translateX(0);box-shadow:-1px 0 3px 0 rgba(0,0,0,.12)}.next-switch-off[dir=rtl]>.next-switch-children{left:10px;right:auto}.next-switch-off.next-switch-small[dir=rtl]>.next-switch-children{left:5px;right:auto}.next-switch{outline:none;text-align:left;transition:all .1s linear;overflow:hidden;cursor:pointer}.next-switch,.next-switch *,.next-switch :after,.next-switch :before{box-sizing:border-box}.next-switch:after{content:" ";transition:all .1s linear;transform-origin:left center}.next-switch-medium{width:56px;height:26px;border-radius:20px}.next-switch-medium:after{border:1px solid transparent;position:absolute;left:100%;transform:translateX(-100%);width:24px;height:24px;border-radius:20px;box-sizing:border-box}.next-switch-medium>.next-switch-children{font-size:12px;height:24px;line-height:24px}.next-switch-small{position:relative;display:inline-block;width:44px;height:22px}.next-switch-small,.next-switch-small:after{border:1px solid transparent;border-radius:20px}.next-switch-small:after{position:absolute;left:100%;transform:translateX(-100%);width:20px;height:20px;box-sizing:border-box}.next-switch-small>.next-switch-children{font-size:12px;position:absolute;height:20px;line-height:20px}.next-switch-on{background-color:#5584ff}.next-switch-on:after{box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#fff;border-color:transparent}.next-switch-on>.next-switch-children{left:10px}.next-switch-on:focus,.next-switch-on:hover{background-color:#3e71f7}.next-switch-on:focus:after,.next-switch-on:hover:after{background-color:#fff}.next-switch-on.next-switch-small>.next-switch-children{left:6px}.next-switch-on[disabled]{background-color:#ebecf0;cursor:not-allowed}.next-switch-on[disabled]:after{right:0;box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#f7f8fa;border-color:#e6e7eb}.next-switch-on[disabled]>.next-switch-children{color:#ccc}.next-switch-off{background-color:#fff;border-color:#c4c6cf}.next-switch-off:focus,.next-switch-off:hover{background-color:#f2f3f7;border-color:#c4c6cf}.next-switch-off:after{left:0;transform:translateX(0);box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#fff;border-color:transparent}.next-switch-off:after:focus,.next-switch-off:after:hover{background-color:#fff}.next-switch-off>.next-switch-children{right:10px;color:#999}.next-switch-off[disabled]{background-color:#f7f8fa;cursor:not-allowed}.next-switch-off[disabled]:after{box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#f7f8fa;border-color:#e6e7eb}.next-switch-off[disabled]>.next-switch-children{color:#c4c6cf}.next-switch-off.next-switch-small>.next-switch-children{right:5px}.service-management .page-title{height:30px;width:100%;line-height:30px;margin:0 0 20px;padding:0 0 0 10px;border-left:3px solid #09c;color:#ccc}.service-management .title-item{font-size:14px;color:#000;margin-right:8px}.service-management .next-switch-off{background-color:#f2f3f7;border-color:#c4c6cf}.service-detail .header-btn{float:right;margin-left:20px}.service-detail .edit-btn{margin-right:10px}.service-detail .next-form-item{margin-bottom:10px}.service-detail .loading{position:relative;width:100%}.service-detail .pagination{float:right;margin-top:15px}.service-detail .cluster-card{margin-bottom:30px}.cluster-edit-dialog .next-form-item,.instance-edit-dialog .next-form-item,.service-detail-edit-dialog .next-form-item{margin-bottom:10px}.cluster-edit-dialog .next-col-fixed-12,.instance-edit-dialog .next-col-fixed-12,.service-detail-edit-dialog .next-col-fixed-12{flex:1}.cluster-edit-dialog .next-switch-off,.instance-edit-dialog .next-switch-off,.service-detail-edit-dialog .next-switch-off{background-color:#f2f3f7;border-color:#c4c6cf}.cluster-edit-dialog .in-select,.cluster-edit-dialog .in-text,.instance-edit-dialog .in-select,.instance-edit-dialog .in-text,.service-detail-edit-dialog .in-select,.service-detail-edit-dialog .in-text{width:120px}.service-detail-edit-dialog{width:600px}.full-width{width:100%}.subscriber-list .page-title{height:30px;width:100%;line-height:30px;margin:0 0 20px;padding:0 0 0 10px;border-left:3px solid #09c;color:#ccc}.subscriber-list .title-item{font-size:14px;color:#000;margin-right:8px}.cluster-management .page-title{height:30px;width:100%;line-height:30px;margin:0 0 20px;padding:0 0 0 10px;border-left:3px solid #09c;color:#ccc}.cluster-management .title-item{font-size:14px;color:#000;margin-right:8px}:global(#root),body,html{height:100%}:global(.mainwrapper){position:absolute!important;top:0;bottom:0;left:0;right:0}:global(.sideleft){float:left;background-color:#eaedf1;position:absolute;top:0;bottom:0;z-index:2;overflow:hidden;width:180px}:global(.sideleft .toptitle){width:100%;height:70px;line-height:70px;background:#d9dee4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;text-indent:20px}:global(.maincontainer){position:absolute;width:auto;top:0;bottom:0;left:180px;right:0;overflow:hidden;overflow-y:auto;-o-transition:all .2s ease;-ms-transition:all .2s ease;-moz-transition:all .2s ease;-webkit-transition:all .2s ease}:global(.viewFramework-product-navbar .product-nav-list li .active){background-color:#fff!important}.clearfix:after{content:".";clear:both;display:block;height:0;overflow:hidden;visibility:hidden}.clearfix{zoom:1}.layouttitle{height:40px;width:200px;background-color:#09c;color:#fff;line-height:40px;text-align:center;margin:0;padding:0;font-weight:700}.linknav{height:30px;line-height:30px;text-align:center}.righttitle{height:40px;background-color:#000;width:100%;font-weight:700}.product-nav-icon{padding:15px 0 0;height:70px;margin:0}.envcontainer{padding-left:15px;margin-right:auto;margin-left:auto;max-height:450px;overflow:scroll;margin-bottom:100px;display:none;top:50px;left:230px;position:fixed;z-index:99999;width:435px;height:auto;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.envtop{height:50px;line-height:50px;position:fixed;top:0;left:320px;z-index:999;background-color:transparent;-webkit-font-smoothing:antialiased}.envcontainer-top{padding-left:15px;margin-right:auto;margin-left:auto;max-height:450px;overflow:auto;margin-bottom:100px;display:none;top:50px;left:0;position:absolute;z-index:99999;width:435px;height:auto;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.envcontainer-top .row{margin:0!important}.envcontainer-top .active{background-color:#546478}.envcontainer dl dd.active{background-color:#546478;color:#fff}.current-env{display:block;padding:0;font-size:14px;margin:0 0 5px;text-align:center}.current-env a{color:#666;text-decoration:none}.product-nav-title{height:70px;line-height:70px;margin:0;text-align:center;padding:0;font-size:14px;background:#d9dee4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.console-title{padding:16px 0}.topbar-nav-item-title{margin:0 0 10px 31px;color:#666;font-weight:700}.dl{height:100%;width:125px;overflow:auto;margin:0 15px 15px 0}.dd{height:24px;line-height:24px;overflow-x:hidden;padding-left:12px;margin-left:20px}.active{color:#fff}.dd:hover{cursor:pointer;opacity:.7;filter:70}.cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:700;color:#5a5cad}.cm-s-xq-light span.cm-atom{color:#6c8cd5}.cm-s-xq-light span.cm-number{color:#164}.cm-s-xq-light span.cm-def{text-decoration:underline}.cm-s-xq-light span.cm-type,.cm-s-xq-light span.cm-variable,.cm-s-xq-light span.cm-variable-2,.cm-s-xq-light span.cm-variable-3{color:#000}.cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.cm-s-xq-light span.cm-string{color:red}.cm-s-xq-light span.cm-meta{color:#ff0}.cm-s-xq-light span.cm-qualifier{color:grey}.cm-s-xq-light span.cm-builtin{color:#7ea656}.cm-s-xq-light span.cm-bracket{color:#cc7}.cm-s-xq-light span.cm-tag{color:#3f7f7f}.cm-s-xq-light span.cm-attribute{color:#7f007f}.cm-s-xq-light span.cm-error{color:red}.cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important;background:#ff0}.CodeMirror{border:1px solid #eee}.CodeMirror-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;height:auto;z-index:9999}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:infobackground;border:1px solid #000;border-radius:4px 4px 4px 4px;color:infotext;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-position:0 100%;background-repeat:repeat-x}.CodeMirror-lint-mark-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==")}.CodeMirror-lint-mark-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-error,.CodeMirror-lint-marker-warning{background-position:50%;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{padding-left:18px;background-position:0 0;background-repeat:no-repeat}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=")}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-multiple{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:100% 100%;width:100%;height:100%}@media (min-width:992px){.modal-lg{width:980px}}@media (min-width:768px) and (max-width:992px){.modal-lg{width:750px}}.modal-body table.narrow-table td{padding:8px 0}.add-on.form-control{margin-left:-4px;box-shadow:none;font-size:28px;line-height:32px;padding:0;vertical-align:top}.text-break{word-wrap:break-word;word-break:break-all;white-space:normal}.form-inline{margin-bottom:20px}.console-title{min-height:70px}.form-horizontal .form-group .checkbox{margin-left:0;margin-right:10px}.combox_border,.combox_select{border:1px solid #c2c2c2;width:245px}.combox_border{height:auto;display:inline-block;position:relative}.combox_input{border:0;padding-left:5px;width:85%;vertical-align:middle}.form-inline .combox_input.form-control{width:85%}.combox_button{width:12%;color:#666;text-align:center;vertical-align:middle;cursor:pointer;border-left:1px solid #c2c2c2}ul.combox_select{border-top:0;padding:0;position:absolute;left:-1px;top:20px;display:none;background:#fff;max-height:300px;overflow-y:auto}ul.combox_select li{overflow:hidden;height:30px;line-height:30px;cursor:pointer}ul.combox_select li a{display:block;line-height:28px;padding:0 8px;text-decoration:none;color:#666}ul.combox_select li a:hover{text-decoration:none;background:#f5f5f5}#combox-appanme.combox_border,#combox-appanme .combox_select{width:158px}#combox-appanme .form-control{height:30px}input.error,textarea.error{border:1px solid red}.form-inline .form-group{position:relative}label.error{margin:4px 0;color:red;font-weight:400;position:absolute;right:15px;bottom:-26px}ins{background-color:#c6ffc6;text-decoration:none}del{background-color:#ffc6c6}form.vertical-margin-lg .form-group{margin-bottom:22px}.namespacewrapper{padding:5px 15px;overflow:hidden;background-color:#eee}.xrange-container{position:relative;border:1px solid #ccc;margin:0;padding:0}.xrange-container .cocofont,.xrange-container .iconfont{cursor:pointer}.xrange-container .label{display:flex;align-items:center;text-align:center;justify-content:space-between;cursor:pointer}.xrange-container .label.is-button{display:flex;border:1px solid #e6ebef;height:32px;padding:6px 12px;background-color:#f5f5f6}.xrange-container .label.is-button>i{font-size:13px}.xrange-container .label.is-empty{padding:0}.xrange-container .label.is-empty.is-button{padding:6px 12px}.xrange-container .label.is-empty>i{font-size:15px;margin-right:0}.xrange-container .label.is-empty>span,.xrange-container .label.is-empty b{display:none}.xrange-container .label>i{font-size:13px;text-align:center}.xrange-container .label>b{padding-top:3px}.xrange-container .label>span{min-width:100px;display:inline-flex;margin-bottom:8px}.xrange-layer{position:fixed;left:0;top:0;width:100%;height:100%;z-index:990;background-color:rgba(0,0,0,.05)}.xrange-panel{display:none;position:relative;right:1px;top:-8px;z-index:1000;border:1px solid #e6e7eb;border-radius:0;box-shadow:1px 1px 3px 0 transparent;width:111px;min-height:302px;background-color:#fff}.xrange-panel.visible{display:block}.xrange-panel .quick-list{display:flex;flex-direction:column;justify-content:space-around;box-sizing:content-box!important;align-items:center}.xrange-panel .quick-list>span{flex:0 0 auto;width:100%;line-height:20px;padding:6px 0 6px 27px;font-size:12px;-webkit-user-select:none;cursor:pointer}.xrange-panel .quick-list>span+span{margin-left:0}.xrange-panel .quick-list>span.active{background-color:#f2f3f7;color:#333;cursor:default}.xrange-panel .xrange-panel-footer{display:flex;align-items:center;justify-content:space-between;height:60px;background-color:#fff;position:absolute;top:300px;left:-539px;min-width:648px;padding:12px 108px 12px 12px}.xrange-panel .xrange-panel-footer .fn-left,.xrange-panel .xrange-panel-footer .fn-right{flex:0 0 auto}.xrange-panel .xrange-panel-footer button+button{margin-left:8px}.xrange-panel .picker-container{display:none;position:relative;margin-top:16px}.xrange-panel .picker-container .next-range-picker-panel{top:-273px!important;left:-540px!important;position:absolute!important;animation:none!important;z-index:999999;border-color:#e6ebef}.next-calendar-card .next-calendar-range-body{background:#fff!important;min-height:227px!important}.xrange-panel .picker-container+.next-range-picker{display:none}.xrange-panel .picker-container .next-date-picker-quick-tool{display:none!important}.xrange-panel.show-picker .picker-container{display:block;min-height:5px}.dingding{background:url(https://g.alicdn.com/cm-design/arms/1.1.27/styles/arms/images/dingding.png) no-repeat 0}.dingding,.wangwang{display:inline-block;padding:5px 0 5px 30px;height:24px;vertical-align:middle}.wangwang{background:url(https://g.alicdn.com/cm-design/arms/1.1.27/styles/arms/images/wangwang.png) no-repeat 0;background-size:24px}@media screen and (min-width:768px){.region-group-list{max-width:784px}}@media screen and (min-width:992px){.region-group-list{max-width:862px}}@media screen and (min-width:1200px){.region-group-list{max-width:600px}}@media screen and (min-width:1330px){.region-group-list{max-width:700px}}@media screen and (min-width:1500px){.region-group-list{max-width:1000px}}.next-switch-medium{position:relative;display:inline-block;border:1px solid transparent;width:48px!important;height:26px!important;border-radius:15px!important}.next-switch-medium>.next-switch-trigger{border:1px solid transparent;position:absolute;left:33px!important;width:24px!important;height:24px!important;border-radius:15px!important}.aliyun-advice{bottom:98px!important}.next-switch-medium>.next-switch-children{font-size:12px!important;position:absolute;height:24px!important;line-height:24px!important}.next-switch-on>.next-switch-trigger{box-shadow:1px 1px 3px 0 rgba(0,0,0,.32)!important;background-color:#fff;border-color:transparent;position:absolute;right:0!important}.next-switch-on>.next-switch-children{left:2px!important;font-size:12px!important;color:#fff}.next-switch-on[disabled]>.next-switch-trigger{position:absolute;right:0!important;box-shadow:1px 1px 3px 0 rgba(0,0,0,.32)!important;background-color:#e6e7eb;border-color:transparent}.next-switch-off>.next-switch-children{right:-6px;color:#979a9c!important}.next-switch-off[disabled]>.next-switch-trigger{left:0!important;box-shadow:1px 1px 3px 0 rgba(0,0,0,.32)!important;background-color:#e6e7eb;border-color:transparent}.next-switch-off>.next-switch-trigger{left:0!important;box-shadow:1px 1px 3px 0 rgba(0,0,0,.32);background-color:#fff;border-color:transparent}.next-switch-off,.next-switch-on{width:58px!important}.next-switch-on{position:relative}.next-menu .next-menu-icon-select{position:absolute;left:4px;top:0;color:#73777a!important}.next-table-cell-wrapper{hyphens:auto!important;word-break:break-word!important}.dash-page-container{height:100%;min-width:980px}.dash-page-container:after{content:"";display:table;clear:both}.dash-left-container{position:relative;float:left;width:77.52%;height:100%}.dash-title-show{width:100%;height:106px;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12);margin-bottom:19px;padding-top:20px;padding-bottom:20px;overflow:hidden}.dash-title-item{float:left;height:49px;width:33%;border-right:1px solid #ebecec;line-height:49px;padding-left:30px;padding-right:30px}.dash-title-word{height:19px;line-height:19px;font-size:14px;color:#73777a}.dash-title-num{height:45px;font-size:32px}.dash-title-item:last-child{border:none!important}.dash-menu-list{width:100%;height:104px;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12);margin-bottom:19px}.dash-menu-item{position:relative;float:left;width:33.33%;border-right:1px solid #eee;height:100%;padding-top:20px;padding-bottom:20px;cursor:pointer}.dash-menu-item.disabled{cursor:not-allowed;opacity:.7}.dash-menu-item:last-child{border:none}.dash-menu-item:hover{box-shadow:0 3px 6px 0 rgba(0,0,0,.12)}.dash-menu-conent-wrapper{padding-left:60px;padding-right:40px}.dash-menu-pic{position:absolute;width:32px;left:20px}.dash-menu-content-title{height:19px;line-height:19px;color:#373d41;margin-bottom:5px}.dash-menu-content-word{font-size:12px;color:#73777a}.dash-scene-wrapper{width:100%;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12);margin-bottom:20px}.dash-scene-title{position:relative;padding-left:20px;height:50px;line-height:50px;border-bottom:1px solid #f0f0f0}.dash-sceneitem{width:100%;height:80px;padding-top:24px}.dash-scenitem-out{border-bottom:1px solid #eee;height:100%}.dash-sceneitem:hover{box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 4px 0 rgba(0,0,0,.12);border-bottom:1px solid #f0f0f0}.dash-sceneitem-progresswrapper{position:relative;width:256px;height:6px}.dash-sceneitem-progresswrapper.green{background-color:#e2f5cf}.dash-sceneitem-progresswrapper.red{background-color:#ffe6e5}.dash-sceneitem-progresswrapper.green .dash-sceneitem-progressinner{height:100%;background-color:#a6e22e}.dash-sceneitem-progresswrapper.red .dash-sceneitem-progressinner{height:100%;background-color:#eb4c4d}.dash-sceneitem-iconshow{position:absolute;right:0;top:5px}.dash-sceneitem:hover.dash-sceneitem-out{border:none}.dash-sceneitem:after{display:table;content:"";clear:both}.dash-sceneitem-title{float:left;height:32.8px;padding-top:5px;width:14.47%;border-right:1px solid #f0f0f0;overflow:hidden;text-overflow:ellipsis}.scene-nomore-data{position:absolute;text-align:center;left:0;right:0;color:#eee;font-size:12px}.dash-sceneitem-content{position:relative;float:left;padding-top:5px;padding-left:30px;width:85.53%}.scene-title-link{position:absolute;right:20px;top:0;font-size:10px}.dash-bottom-show{width:100%;height:42px;line-height:42px;margin-top:18px;text-align:center;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12)}.dash-right-container{float:right;height:100%;width:22.44%;padding:10px;background-color:#fff}.dash-bottom-item,.dash-vl{color:#979a9c;margin-right:10px}.dash-doc{background-color:#fff;height:178px;width:100%;margin-bottom:14px}.dash-doc-title{width:100%;height:68px;line-height:68px;padding-left:20px;padding-right:20px;border-bottom:1px solid #eee}.dash-doc-content{width:100%;padding:15px}.dash-card-contentwrappers{width:100%;height:230px;margin-bottom:14px;background-color:#fff;border:1px solid #eee;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12)}.dash-card-title{width:100%;height:39px;line-height:39px;margin:0;padding-left:24px;padding-right:24px;color:#4a4a4a;border-bottom:1px solid #eee}.dash-card-contentlist{padding:20px}.dash-card-contentitem{position:relative;text-align:left;font-size:12px;margin-bottom:10px}.next-slick-dots-item button{height:4px!important;width:35px!important;border-radius:10px!important}.next-table-row.hovered{background-color:#f5f7f9!important}.alert-success-text{color:#4a4a4a;font-size:14px;margin:10px 0}.alert-success{border-color:#e0e0e0!important}.row-bg-green{background-color:#e4fdda}.row-bg-light-green{background-color:#e3fff8}.row-bg-orange{background-color:#fff3e0}.row-bg-red{background-color:#ffece4}
\ No newline at end of file
+.next-icon[dir=rtl]:before{transform:rotateY(180deg)}@font-face{font-family:NextIcon;src:url(/nacos/console-fe/public/icons/icon-font.eot);src:url(/nacos/console-fe/public/icons/icon-font.eot?#iefix) format("embedded-opentype"),url(/nacos/console-fe/public/icons/icon-font.woff2) format("woff2"),url(/nacos/console-fe/public/icons/icon-font.woff) format("woff"),url(/nacos/console-fe/public/icons/icon-font.ttf) format("truetype"),url(/nacos/console-fe/public/icons/icon-font.svg#NextIcon) format("svg")}.next-icon{display:inline-block;font-family:NextIcon;font-style:normal;font-weight:400;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.next-icon:before{display:inline-block;vertical-align:middle;text-align:center}.next-icon-smile:before{content:""}.next-icon-cry:before{content:""}.next-icon-success:before{content:""}.next-icon-warning:before{content:""}.next-icon-prompt:before{content:""}.next-icon-error:before{content:""}.next-icon-help:before{content:""}.next-icon-clock:before{content:""}.next-icon-success-filling:before{content:""}.next-icon-delete-filling:before{content:""}.next-icon-favorites-filling:before{content:""}.next-icon-add:before{content:""}.next-icon-minus:before{content:""}.next-icon-arrow-up:before{content:""}.next-icon-arrow-down:before{content:""}.next-icon-arrow-left:before{content:""}.next-icon-arrow-right:before{content:""}.next-icon-arrow-double-left:before{content:""}.next-icon-arrow-double-right:before{content:""}.next-icon-switch:before{content:""}.next-icon-sorting:before{content:""}.next-icon-descending:before{content:""}.next-icon-ascending:before{content:""}.next-icon-select:before{content:""}.next-icon-semi-select:before{content:""}.next-icon-search:before{content:""}.next-icon-close:before{content:""}.next-icon-ellipsis:before{content:""}.next-icon-picture:before{content:""}.next-icon-calendar:before{content:""}.next-icon-ashbin:before{content:""}.next-icon-upload:before{content:""}.next-icon-download:before{content:""}.next-icon-set:before{content:""}.next-icon-edit:before{content:""}.next-icon-refresh:before{content:""}.next-icon-filter:before{content:""}.next-icon-attachment:before{content:""}.next-icon-account:before{content:""}.next-icon-email:before{content:""}.next-icon-atm:before{content:""}.next-icon-loading:before{content:"";animation:loadingCircle 1s linear infinite}.next-icon-eye:before{content:""}.next-icon-copy:before{content:""}.next-icon-toggle-left:before{content:""}.next-icon-toggle-right:before{content:""}.next-icon-eye-close:before{content:""}.next-icon-unlock:before{content:""}.next-icon-lock:before{content:""}.next-icon-exit:before{content:""}.next-icon-chart-bar:before{content:""}.next-icon-chart-pie:before{content:""}.next-icon.next-xxs .next-icon-remote,.next-icon.next-xxs:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-icon.next-xxs{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-icon.next-xxs:before{width:16px;font-size:16px}}.next-icon.next-xs .next-icon-remote,.next-icon.next-xs:before{width:12px;font-size:12px;line-height:inherit}.next-icon.next-small .next-icon-remote,.next-icon.next-small:before{width:16px;font-size:16px;line-height:inherit}.next-icon.next-medium .next-icon-remote,.next-icon.next-medium:before{width:20px;font-size:20px;line-height:inherit}.next-icon.next-large .next-icon-remote,.next-icon.next-large:before{width:24px;font-size:24px;line-height:inherit}.next-icon.next-xl .next-icon-remote,.next-icon.next-xl:before{width:32px;font-size:32px;line-height:inherit}.next-icon.next-xxl .next-icon-remote,.next-icon.next-xxl:before{width:48px;font-size:48px;line-height:inherit}.next-icon.next-xxxl .next-icon-remote,.next-icon.next-xxxl:before{width:64px;font-size:64px;line-height:inherit}.next-icon.next-inherit .next-icon-remote,.next-icon.next-inherit:before{width:inherit;font-size:inherit;line-height:inherit}.next-icon .next-icon-remote,.next-icon.next-inherit .next-icon-remote{width:1em;height:1em;vertical-align:-.15em;fill:currentColor}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-ms-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-ms-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-o-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-moz-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-ms-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-o-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);-ms-transform:translateY(20px);-o-transform:translateY(20px);transform:translateY(20px)}}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-moz-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-ms-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-o-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);-ms-transform:translateX(-20px);-o-transform:translateX(-20px);transform:translateX(-20px)}}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-moz-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-ms-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-o-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);-ms-transform:translateX(20px);-o-transform:translateX(20px);transform:translateX(20px)}}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-moz-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-ms-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-o-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-100px);-moz-transform:translateY(-100px);-ms-transform:translateY(-100px);-o-transform:translateY(-100px);transform:translateY(-100px)}}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-moz-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-ms-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-o-keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes slideOutDown{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-moz-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-ms-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-o-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-moz-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-ms-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-o-keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes slideOutRight{0%{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}to{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-moz-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-ms-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-o-keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes slideOutUp{0%{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}to{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}}@-webkit-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-moz-transform:translateY(-2000px);-ms-transform:translateY(-2000px);-o-transform:translateY(-2000px);transform:translateY(-2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-moz-transform:translateX(-2000px);-ms-transform:translateX(-2000px);-o-transform:translateX(-2000px);transform:translateX(-2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-ms-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-o-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-moz-transform:translateX(2000px);-ms-transform:translateX(2000px);-o-transform:translateX(2000px);transform:translateX(2000px)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-ms-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-o-keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes slideInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-moz-transform:translateY(2000px);-ms-transform:translateY(2000px);-o-transform:translateY(2000px);transform:translateY(2000px)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-moz-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-ms-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-o-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-moz-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-ms-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-o-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-moz-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);-o-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@-webkit-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-moz-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-ms-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-o-keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@keyframes expandInDown{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-webkit-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-moz-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-ms-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-o-keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@keyframes expandInUp{0%{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-webkit-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-moz-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-ms-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-o-keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@keyframes expandInWithFade{0%{opacity:0}40%{opacity:.1}50%{opacity:.9}to{opacity:1}}@-webkit-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-moz-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-ms-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-o-keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@keyframes expandOutUp{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left top 0;-moz-transform-origin:left top 0;-ms-transform-origin:left top 0;-o-transform-origin:left top 0;transform-origin:left top 0}}@-webkit-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-moz-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-ms-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-o-keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@keyframes expandOutDown{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);-ms-transform:scaleY(1);-o-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}to{opacity:0;-webkit-transform:scaleY(.6);-moz-transform:scaleY(.6);-ms-transform:scaleY(.6);-o-transform:scaleY(.6);transform:scaleY(.6);-webkit-transform-origin:left bottom 0;-moz-transform-origin:left bottom 0;-ms-transform-origin:left bottom 0;-o-transform-origin:left bottom 0;transform-origin:left bottom 0}}@-webkit-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-moz-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-ms-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-o-keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@keyframes expandOutWithFade{0%{opacity:1}70%{opacity:0}to{opacity:0}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-ms-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-o-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}20%{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}to{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.fadeIn{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;-ms-animation-name:fadeIn;-o-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeIn,.fadeInDown{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeInDown{-webkit-animation-name:fadeInDown;-moz-animation-name:fadeInDown;-ms-animation-name:fadeInDown;-o-animation-name:fadeInDown;animation-name:fadeInDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeInLeft{-webkit-animation-name:fadeInLeft;-moz-animation-name:fadeInLeft;-ms-animation-name:fadeInLeft;-o-animation-name:fadeInLeft;animation-name:fadeInLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeInLeft,.fadeInRight{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeInRight{-webkit-animation-name:fadeInRight;-moz-animation-name:fadeInRight;-ms-animation-name:fadeInRight;-o-animation-name:fadeInRight;animation-name:fadeInRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeInUp{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-ms-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeOut{-webkit-animation-name:fadeOut;-moz-animation-name:fadeOut;-ms-animation-name:fadeOut;-o-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOut,.fadeOutDown{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeOutDown{-webkit-animation-name:fadeOutDown;-moz-animation-name:fadeOutDown;-ms-animation-name:fadeOutDown;-o-animation-name:fadeOutDown;animation-name:fadeOutDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;-moz-animation-name:fadeOutLeft;-ms-animation-name:fadeOutLeft;-o-animation-name:fadeOutLeft;animation-name:fadeOutLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOutLeft,.fadeOutRight{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.fadeOutRight{-webkit-animation-name:fadeOutRight;-moz-animation-name:fadeOutRight;-ms-animation-name:fadeOutRight;-o-animation-name:fadeOutRight;animation-name:fadeOutRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.fadeOutUp{-webkit-animation-name:fadeOutUp;-moz-animation-name:fadeOutUp;-ms-animation-name:fadeOutUp;-o-animation-name:fadeOutUp;animation-name:fadeOutUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideInUp{-webkit-animation-name:slideInUp;-moz-animation-name:slideInUp;-ms-animation-name:slideInUp;-o-animation-name:slideInUp;animation-name:slideInUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideInDown,.slideInUp{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideInDown{-webkit-animation-name:slideInDown;-moz-animation-name:slideInDown;-ms-animation-name:slideInDown;-o-animation-name:slideInDown;animation-name:slideInDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideInLeft{-webkit-animation-name:slideInLeft;-moz-animation-name:slideInLeft;-ms-animation-name:slideInLeft;-o-animation-name:slideInLeft;animation-name:slideInLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideInLeft,.slideInRight{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideInRight{-webkit-animation-name:slideInRight;-moz-animation-name:slideInRight;-ms-animation-name:slideInRight;-o-animation-name:slideInRight;animation-name:slideInRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.86,0,.07,1);-moz-animation-timing-function:cubic-bezier(.86,0,.07,1);-ms-animation-timing-function:cubic-bezier(.86,0,.07,1);-o-animation-timing-function:cubic-bezier(.86,0,.07,1);animation-timing-function:cubic-bezier(.86,0,.07,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutUp{-webkit-animation-name:slideOutUp;-moz-animation-name:slideOutUp;-ms-animation-name:slideOutUp;-o-animation-name:slideOutUp;animation-name:slideOutUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutRight,.slideOutUp{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideOutRight{-webkit-animation-name:slideOutRight;-moz-animation-name:slideOutRight;-ms-animation-name:slideOutRight;-o-animation-name:slideOutRight;animation-name:slideOutRight;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutLeft{-webkit-animation-name:slideOutLeft;-moz-animation-name:slideOutLeft;-ms-animation-name:slideOutLeft;-o-animation-name:slideOutLeft;animation-name:slideOutLeft;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.slideOutDown,.slideOutLeft{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.slideOutDown{-webkit-animation-name:slideOutDown;-moz-animation-name:slideOutDown;-ms-animation-name:slideOutDown;-o-animation-name:slideOutDown;animation-name:slideOutDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.zoomIn{-webkit-animation-name:zoomIn;-moz-animation-name:zoomIn;-ms-animation-name:zoomIn;-o-animation-name:zoomIn;animation-name:zoomIn;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.zoomIn,.zoomOut{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.zoomOut{-webkit-animation-name:zoomOut;-moz-animation-name:zoomOut;-ms-animation-name:zoomOut;-o-animation-name:zoomOut;animation-name:zoomOut;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-moz-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-ms-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-o-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInDown{-webkit-animation-name:expandInDown;-moz-animation-name:expandInDown;-ms-animation-name:expandInDown;-o-animation-name:expandInDown;animation-name:expandInDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInDown,.expandOutUp{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expandOutUp{-webkit-animation-name:expandOutUp;-moz-animation-name:expandOutUp;-ms-animation-name:expandOutUp;-o-animation-name:expandOutUp;animation-name:expandOutUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.15s;-moz-animation-duration:.15s;-ms-animation-duration:.15s;-o-animation-duration:.15s;animation-duration:.15s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInUp{-webkit-animation-name:expandInUp;-moz-animation-name:expandInUp;-ms-animation-name:expandInUp;-o-animation-name:expandInUp;animation-name:expandInUp;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.expandInUp,.expandOutDown{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expandOutDown{-webkit-animation-name:expandOutDown;-moz-animation-name:expandOutDown;-ms-animation-name:expandOutDown;-o-animation-name:expandOutDown;animation-name:expandOutDown;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.15s;-moz-animation-duration:.15s;-ms-animation-duration:.15s;-o-animation-duration:.15s;animation-duration:.15s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.pulse{-webkit-animation-name:pulse;-moz-animation-name:pulse;-ms-animation-name:pulse;-o-animation-name:pulse;animation-name:pulse;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expand-enter{overflow:hidden}.expand-enter-active{transition:all .3s ease-out}.expand-enter-active>*{-webkit-animation-name:expandInWithFade;-moz-animation-name:expandInWithFade;-ms-animation-name:expandInWithFade;-o-animation-name:expandInWithFade;animation-name:expandInWithFade;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:"forwards";-moz-animation-fill-mode:"forwards";-ms-animation-fill-mode:"forwards";-o-animation-fill-mode:"forwards";animation-fill-mode:"forwards";-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.expand-leave{overflow:hidden}.expand-leave-active{transition:all .2s ease-out}.expand-leave-active>*{-webkit-animation-name:expandOutWithFade;-moz-animation-name:expandOutWithFade;-ms-animation-name:expandOutWithFade;-o-animation-name:expandOutWithFade;animation-name:expandOutWithFade;-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;-ms-animation-iteration-count:1;-o-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-webkit-animation-delay:0s;-moz-animation-delay:0s;-ms-animation-delay:0s;-o-animation-delay:0s;animation-delay:0s;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);-moz-animation-timing-function:cubic-bezier(.23,1,.32,1);-ms-animation-timing-function:cubic-bezier(.23,1,.32,1);-o-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1);-webkit-animation-fill-mode:"forwards";-moz-animation-fill-mode:"forwards";-ms-animation-fill-mode:"forwards";-o-animation-fill-mode:"forwards";animation-fill-mode:"forwards";-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}.next-overlay-wrapper .next-overlay-inner{z-index:1001}.next-overlay-wrapper .next-overlay-backdrop{position:fixed;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.2);transition:opacity .3s ease;opacity:0}.next-overlay-wrapper.opened .next-overlay-backdrop{opacity:1}.next-loading-fusion-reactor[dir=rtl]{-webkit-animation-name:nextVectorRouteRTL;-moz-animation-name:nextVectorRouteRTL;-ms-animation-name:nextVectorRouteRTL;-o-animation-name:nextVectorRouteRTL;animation-name:nextVectorRouteRTL}@-webkit-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@-moz-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@-ms-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@-o-keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}@keyframes nextVectorRouteRTL{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}25%{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}30%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}50%{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}55%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}75%{-webkit-transform:rotate(-270deg);-moz-transform:rotate(-270deg);-ms-transform:rotate(-270deg);-o-transform:rotate(-270deg);transform:rotate(-270deg)}80%{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}to{-webkit-transform:rotate(-1turn);-moz-transform:rotate(-1turn);-ms-transform:rotate(-1turn);-o-transform:rotate(-1turn);transform:rotate(-1turn)}}.next-loading{position:relative}.next-loading.next-open{pointer-events:none}.next-loading .next-loading-component{opacity:.7;-webkit-filter:blur(1px);filter:blur(1px);filter:"progid\:DXImageTransform\.Microsoft\.Blur(PixelRadius\=1, MakeShadow\=false)";position:relative;pointer-events:none}.next-loading-masker{position:absolute;top:0;bottom:0;left:0;right:0;z-index:99;opacity:.2;background:#fff}.next-loading-inline{display:inline-block}.next-loading-tip{display:block;position:absolute;top:50%;left:50%;z-index:4;transform:translate(-50%,-50%);text-align:center}.next-loading-tip-fullscreen{top:inherit;left:inherit;transform:inherit}.next-loading-tip-placeholder{display:none}.next-loading-right-tip .next-loading-indicator{display:inline-block}.next-loading-right-tip .next-loading-tip-content{position:absolute;display:block;top:50%;right:0;transform:translateY(-50%)}.next-loading-right-tip .next-loading-tip-placeholder{display:inline-block;visibility:hidden;margin-left:1em}.next-loading-fusion-reactor{display:inline-block;width:48px;height:48px;position:relative;margin:0;-webkit-animation-duration:5.6s;-moz-animation-duration:5.6s;-ms-animation-duration:5.6s;-o-animation-duration:5.6s;animation-duration:5.6s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-o-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;-ms-animation-timing-function:linear;-o-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-name:nextVectorRoute;-moz-animation-name:nextVectorRoute;-ms-animation-name:nextVectorRoute;-o-animation-name:nextVectorRoute;animation-name:nextVectorRoute}.next-loading-fusion-reactor .next-loading-dot{position:absolute;margin:auto;width:12px;height:12px;border-radius:50%;background:#5584ff;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;-ms-animation-timing-function:ease-in-out;-o-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-o-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-duration:1.4s;-moz-animation-duration:1.4s;-ms-animation-duration:1.4s;-o-animation-duration:1.4s;animation-duration:1.4s}.next-loading-fusion-reactor .next-loading-dot:first-child{top:0;bottom:0;left:0;-webkit-animation-name:nextVectorDotsX;-moz-animation-name:nextVectorDotsX;-ms-animation-name:nextVectorDotsX;-o-animation-name:nextVectorDotsX;animation-name:nextVectorDotsX}.next-loading-fusion-reactor .next-loading-dot:nth-child(2){left:0;right:0;top:0;opacity:.8;-webkit-animation-name:nextVectorDotsY;-moz-animation-name:nextVectorDotsY;-ms-animation-name:nextVectorDotsY;-o-animation-name:nextVectorDotsY;animation-name:nextVectorDotsY}.next-loading-fusion-reactor .next-loading-dot:nth-child(3){top:0;bottom:0;right:0;opacity:.6;-webkit-animation-name:nextVectorDotsXR;-moz-animation-name:nextVectorDotsXR;-ms-animation-name:nextVectorDotsXR;-o-animation-name:nextVectorDotsXR;animation-name:nextVectorDotsXR}.next-loading-fusion-reactor .next-loading-dot:nth-child(4){left:0;right:0;bottom:0;opacity:.2;-webkit-animation-name:nextVectorDotsYR;-moz-animation-name:nextVectorDotsYR;-ms-animation-name:nextVectorDotsYR;-o-animation-name:nextVectorDotsYR;animation-name:nextVectorDotsYR}.next-loading-medium-fusion-reactor{width:32px;height:32px}.next-loading-medium-fusion-reactor .next-loading-dot{width:8px;height:8px}.next-loading-medium-fusion-reactor .next-loading-dot:first-child{-webkit-animation-name:nextVectorDotsX-medium;-moz-animation-name:nextVectorDotsX-medium;-ms-animation-name:nextVectorDotsX-medium;-o-animation-name:nextVectorDotsX-medium;animation-name:nextVectorDotsX-medium}.next-loading-medium-fusion-reactor .next-loading-dot:nth-child(2){-webkit-animation-name:nextVectorDotsY-medium;-moz-animation-name:nextVectorDotsY-medium;-ms-animation-name:nextVectorDotsY-medium;-o-animation-name:nextVectorDotsY-medium;animation-name:nextVectorDotsY-medium}.next-loading-medium-fusion-reactor .next-loading-dot:nth-child(3){-webkit-animation-name:nextVectorDotsXR-medium;-moz-animation-name:nextVectorDotsXR-medium;-ms-animation-name:nextVectorDotsXR-medium;-o-animation-name:nextVectorDotsXR-medium;animation-name:nextVectorDotsXR-medium}.next-loading-medium-fusion-reactor .next-loading-dot:nth-child(4){-webkit-animation-name:nextVectorDotsYR-medium;-moz-animation-name:nextVectorDotsYR-medium;-ms-animation-name:nextVectorDotsYR-medium;-o-animation-name:nextVectorDotsYR-medium;animation-name:nextVectorDotsYR-medium}@-webkit-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-moz-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-ms-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-o-keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nextVectorRoute{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}5%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}25%{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}30%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}55%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}75%{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}80%{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(1turn);-moz-transform:rotate(1turn);-ms-transform:rotate(1turn);-o-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@keyframes nextVectorDotsYR{25%{bottom:0}45%,50%{bottom:16.8px;height:14.4px;width:14.4px}90%{bottom:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@keyframes nextVectorDotsY{25%{top:0}45%,50%{top:16.8px;height:14.4px;width:14.4px}90%{top:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@keyframes nextVectorDotsX{25%{left:0}45%,50%{left:16.8px;width:14.4px;height:14.4px}90%{left:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-moz-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-ms-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-o-keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@keyframes nextVectorDotsXR{25%{right:0}45%,50%{right:16.8px;width:14.4px;height:14.4px}90%{right:0;height:12px;width:12px}}@-webkit-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@keyframes nextVectorDotsYR-medium{25%{bottom:0}45%,50%{bottom:11.2px;height:9.6px;width:9.6px}90%{bottom:0;height:8px;width:8px}}@-webkit-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@keyframes nextVectorDotsY-medium{25%{top:0}45%,50%{top:11.2px;height:9.6px;width:9.6px}90%{top:0;height:8px;width:8px}}@-webkit-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@keyframes nextVectorDotsX-medium{25%{left:0}45%,50%{left:11.2px;width:9.6px;height:9.6px}90%{left:0;height:8px;width:8px}}@-webkit-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@-moz-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@-ms-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@-o-keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}@keyframes nextVectorDotsXR-medium{25%{right:0}45%,50%{right:11.2px;width:9.6px;height:9.6px}90%{right:0;height:8px;width:8px}}.next-message{position:relative;display:block;vertical-align:baseline;animation-duration:.3s;animation-timing-function:ease-in-out}.next-message,.next-message *,.next-message :after,.next-message :before{box-sizing:border-box}.next-message:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-message .next-message-close{color:#999;font-size:0;position:absolute;cursor:pointer}.next-message .next-message-close .next-icon-close{width:12px;height:12px;line-height:12px}.next-message .next-message-close .next-icon-close:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-message .next-message-close:hover{color:#666}.next-message.next-message-success.next-inline{background-color:#e4fdda;border-color:#e4fdda;box-shadow:none;border-style:solid}.next-message.next-message-success.next-inline .next-message-title{color:#333}.next-message.next-message-success.next-inline .next-message-content{color:#666}.next-message.next-message-success.next-inline .next-message-symbol{color:#46bc15}.next-message.next-message-success.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-success.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-success.next-addon .next-message-title{color:#333}.next-message.next-message-success.next-addon .next-message-content{color:#666}.next-message.next-message-success.next-addon .next-message-symbol{color:#46bc15}.next-message.next-message-success.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-success.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-success.next-toast .next-message-title{color:#333}.next-message.next-message-success.next-toast .next-message-content{color:#666}.next-message.next-message-success.next-toast .next-message-symbol{color:#46bc15}.next-message.next-message-success.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-warning.next-inline{background-color:#fff3e0;border-color:#fff3e0;box-shadow:none;border-style:solid}.next-message.next-message-warning.next-inline .next-message-title{color:#333}.next-message.next-message-warning.next-inline .next-message-content{color:#666}.next-message.next-message-warning.next-inline .next-message-symbol{color:#ff9300}.next-message.next-message-warning.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-warning.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-warning.next-addon .next-message-title{color:#333}.next-message.next-message-warning.next-addon .next-message-content{color:#666}.next-message.next-message-warning.next-addon .next-message-symbol{color:#ff9300}.next-message.next-message-warning.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-warning.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-warning.next-toast .next-message-title{color:#333}.next-message.next-message-warning.next-toast .next-message-content{color:#666}.next-message.next-message-warning.next-toast .next-message-symbol{color:#ff9300}.next-message.next-message-warning.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-error.next-inline{background-color:#ffece4;border-color:#ffece4;box-shadow:none;border-style:solid}.next-message.next-message-error.next-inline .next-message-title{color:#333}.next-message.next-message-error.next-inline .next-message-content{color:#666}.next-message.next-message-error.next-inline .next-message-symbol{color:#ff3000}.next-message.next-message-error.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-error.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-error.next-addon .next-message-title{color:#333}.next-message.next-message-error.next-addon .next-message-content{color:#666}.next-message.next-message-error.next-addon .next-message-symbol{color:#ff3000}.next-message.next-message-error.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-error.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-error.next-toast .next-message-title{color:#333}.next-message.next-message-error.next-toast .next-message-content{color:#666}.next-message.next-message-error.next-toast .next-message-symbol{color:#ff3000}.next-message.next-message-error.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-notice.next-inline{background-color:#e3f2fd;border-color:#e3f2fd;box-shadow:none;border-style:solid}.next-message.next-message-notice.next-inline .next-message-title{color:#333}.next-message.next-message-notice.next-inline .next-message-content{color:#666}.next-message.next-message-notice.next-inline .next-message-symbol{color:#4494f9}.next-message.next-message-notice.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-notice.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-notice.next-addon .next-message-title{color:#333}.next-message.next-message-notice.next-addon .next-message-content{color:#666}.next-message.next-message-notice.next-addon .next-message-symbol{color:#4494f9}.next-message.next-message-notice.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-notice.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-notice.next-toast .next-message-title{color:#333}.next-message.next-message-notice.next-toast .next-message-content{color:#666}.next-message.next-message-notice.next-toast .next-message-symbol{color:#4494f9}.next-message.next-message-notice.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-help.next-inline{background-color:#e3fff8;border-color:#e3fff8;box-shadow:none;border-style:solid}.next-message.next-message-help.next-inline .next-message-title{color:#333}.next-message.next-message-help.next-inline .next-message-content{color:#666}.next-message.next-message-help.next-inline .next-message-symbol{color:#01c1b2}.next-message.next-message-help.next-inline .next-message-symbol-icon:before{content:""}.next-message.next-message-help.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-help.next-addon .next-message-title{color:#333}.next-message.next-message-help.next-addon .next-message-content{color:#666}.next-message.next-message-help.next-addon .next-message-symbol{color:#01c1b2}.next-message.next-message-help.next-addon .next-message-symbol-icon:before{content:""}.next-message.next-message-help.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-help.next-toast .next-message-title{color:#333}.next-message.next-message-help.next-toast .next-message-content{color:#666}.next-message.next-message-help.next-toast .next-message-symbol{color:#01c1b2}.next-message.next-message-help.next-toast .next-message-symbol-icon:before{content:""}.next-message.next-message-loading.next-inline{background-color:#fff;border-color:#fff;box-shadow:none;border-style:solid}.next-message.next-message-loading.next-inline .next-message-title{color:#333}.next-message.next-message-loading.next-inline .next-message-content{color:#666}.next-message.next-message-loading.next-inline .next-message-symbol{color:#5584ff}.next-message.next-message-loading.next-inline .next-message-symbol-icon:before{content:"";animation:loadingCircle 1s linear infinite}.next-message.next-message-loading.next-addon{background-color:transparent;border-color:transparent;box-shadow:none;border-style:solid}.next-message.next-message-loading.next-addon .next-message-title{color:#333}.next-message.next-message-loading.next-addon .next-message-content{color:#666}.next-message.next-message-loading.next-addon .next-message-symbol{color:#5584ff}.next-message.next-message-loading.next-addon .next-message-symbol-icon:before{content:"";animation:loadingCircle 1s linear infinite}.next-message.next-message-loading.next-toast{background-color:#fff;border-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-style:solid}.next-message.next-message-loading.next-toast .next-message-title{color:#333}.next-message.next-message-loading.next-toast .next-message-content{color:#666}.next-message.next-message-loading.next-toast .next-message-symbol{color:#5584ff}.next-message.next-message-loading.next-toast .next-message-symbol-icon:before{content:"";animation:loadingCircle 1s linear infinite}.next-message.next-medium{border-width:1px;padding:12px}.next-message.next-medium .next-message-symbol{float:left;line-height:16px}.next-message.next-medium .next-message-symbol .next-icon-remote,.next-message.next-medium .next-message-symbol:before{width:16px;font-size:16px;line-height:inherit}.next-message.next-medium .next-message-title{padding:0 20px 0 24px;font-size:16px;line-height:16px}.next-message.next-medium .next-message-content{margin-top:8px;padding:0 20px 0 24px;font-size:12px;line-height:12px}.next-message.next-medium .next-message-symbol+.next-message-content{margin-top:0}.next-message.next-medium.next-only-content .next-message-content{line-height:16px}.next-message.next-medium .next-message-close{top:12px;right:12px}.next-message.next-medium.next-inline,.next-message.next-medium.next-toast{border-radius:3px}.next-message.next-large{border-width:2px;padding:16px;line-height:18px}.next-message.next-large .next-message-symbol{float:left;line-height:24px}.next-message.next-large .next-message-symbol .next-icon-remote,.next-message.next-large .next-message-symbol:before{width:24px;font-size:24px;line-height:inherit}.next-message.next-large .next-message-title{padding:0 20px 0 36px;font-size:20px;line-height:20px}.next-message.next-large .next-message-content{margin-top:8px;padding:0 20px 0 36px;font-size:12px;line-height:12px}.next-message.next-large .next-message-symbol+.next-message-content{margin-top:0}.next-message.next-large.next-only-content .next-message-content,.next-message.next-large.next-title-content .next-message-title{line-height:24px}.next-message.next-large .next-message-close{top:16px;right:16px}.next-message.next-large.next-inline,.next-message.next-large.next-toast{border-radius:3px}.next-message[dir=rtl] .next-message-symbol{float:right}.next-message[dir=rtl].next-medium .next-message-title{padding:0 24px 0 20px}.next-message[dir=rtl].next-medium .next-message-close{left:12px;right:auto}.next-message[dir=rtl].next-large .next-message-title{padding:0 36px 0 20px}.next-message[dir=rtl].next-large .next-message-close{left:16px;right:auto}.next-radio-button-large[dir=rtl]>label:first-child{margin-left:-1px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-left-radius:0;border-bottom-left-radius:0}.next-radio-button-large[dir=rtl]>label:last-child{margin-left:0;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-large[dir=rtl] .next-radio-label{height:38px;line-height:38px;font-size:16px}.next-radio-button-medium[dir=rtl]>label:first-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-medium[dir=rtl]>label:last-child{margin-left:0;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-small[dir=rtl]>label:first-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-small[dir=rtl]>label:last-child{margin-left:0;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-wrapper[dir=rtl] .next-radio-label{margin-left:0;margin-right:4px}.next-radio-group[dir=rtl] .next-radio-label{margin-right:4px;margin-left:16px}.next-radio-button[dir=rtl]>label .next-radio-label{margin:0}.next-radio-wrapper{outline:0}.next-radio-wrapper .next-radio{box-sizing:border-box;display:inline-block;vertical-align:middle;position:relative;line-height:1}.next-radio-wrapper .next-radio *,.next-radio-wrapper .next-radio :after,.next-radio-wrapper .next-radio :before{box-sizing:border-box}.next-radio-wrapper .next-radio input[type=radio]{opacity:0;position:absolute;vertical-align:middle;top:0;left:0;width:16px;height:16px;margin:0;cursor:pointer}.next-radio-wrapper .next-radio-inner{display:block;width:16px;height:16px;background:#fff;border-radius:50%;border:1px solid #c4c6cf;transition:all .1s linear;box-shadow:none}.next-radio-wrapper .next-radio-inner:after{transform:scale(0);position:absolute;border-radius:50%;top:50%;margin-top:-2px;left:50%;margin-left:-2px;background:#fff;content:"";transition:all .1s linear}.next-radio-wrapper.checked .next-radio-inner{border-color:#5584ff;background:#5584ff}.next-radio-wrapper.checked .next-radio-inner:after{width:4px;height:4px;font-weight:700;background:#fff;transform:scale(1)}.next-radio-wrapper.checked.hovered .next-radio-inner,.next-radio-wrapper.checked:hover .next-radio-inner{border-color:transparent}.next-radio-wrapper.disabled input[type=radio]{cursor:not-allowed}.next-radio-wrapper.disabled .next-radio-inner{border-color:#e6e7eb;background:#f7f8fa}.next-radio-wrapper.disabled .next-radio-inner:after{background:#ccc}.next-radio-wrapper.disabled .next-radio-inner.hovered,.next-radio-wrapper.disabled .next-radio-inner:hover{border-color:#e6e7eb}.next-radio-wrapper.disabled.checked .next-radio-inner{border-color:#e6e7eb;background:#f7f8fa}.next-radio-wrapper.disabled.checked .next-radio-inner:after{background:#ccc}.next-radio-wrapper.disabled .next-radio-label{color:#ccc}.next-radio-wrapper:not(.disabled).hovered .next-radio-inner,.next-radio-wrapper:not(.disabled):hover .next-radio-inner{border-color:#5584ff;background-color:#dee8ff}.next-radio-wrapper:not(.disabled).hovered .next-radio-label,.next-radio-wrapper:not(.disabled):hover .next-radio-label{cursor:pointer}.next-radio-wrapper.checked:not(.disabled).hovered .next-radio-inner,.next-radio-wrapper.checked:not(.disabled):hover .next-radio-inner{border-color:transparent;background:#3e71f7}.next-radio-wrapper.checked:not(.disabled).hovered .next-radio-inner:after,.next-radio-wrapper.checked:not(.disabled):hover .next-radio-inner:after{background:#fff}.next-radio-button .next-radio,.next-radio-button input[type=radio]{width:0;height:0}.next-radio-button>label{display:inline-block;box-sizing:border-box;position:relative;z-index:1;margin:0 0 0 -1px;border:1px solid #c4c6cf;background-color:#fff;transition:all .1s linear;vertical-align:middle}.next-radio-button>label .next-radio-label{display:block;color:#333;margin:0;transition:all .1s linear}.next-radio-button>label.hovered,.next-radio-button>label:hover{z-index:10;border-color:#a0a2ad;background-color:#f2f3f7}.next-radio-button>label.hovered .next-radio-label,.next-radio-button>label:hover .next-radio-label{color:#333}.next-radio-button>label.checked{z-index:11;border-color:#5584ff;background-color:#fff}.next-radio-button>label.checked .next-radio-label{color:#5584ff}.next-radio-button>label.disabled{z-index:0;cursor:not-allowed;border-color:#e6e7eb;background-color:#f7f8fa}.next-radio-button>label.disabled .next-radio-label{color:#ccc}.next-radio-button>label.checked.disabled{z-index:0;border-color:#e6e7eb;background-color:#f2f3f7}.next-radio-button>label.checked.disabled .next-radio-label{color:#ccc}.next-radio-button-large>label{padding:0 8px;height:40px;line-height:40px}.next-radio-button-large>label:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-large>label:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-large .next-radio-label{height:38px;line-height:38px;font-size:16px}.next-radio-button-medium>label{padding:0 8px;height:28px;line-height:28px}.next-radio-button-medium>label:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-medium>label:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-medium .next-radio-label{height:26px;line-height:26px;font-size:12px}.next-radio-button-small>label{padding:0 8px;height:20px;line-height:20px}.next-radio-button-small>label:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.next-radio-button-small>label:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.next-radio-button-small .next-radio-label{height:18px;line-height:18px;font-size:12px}.next-radio-single-input input[type=radio]{opacity:0;position:absolute;top:0;left:0;margin:0}.next-radio-group{display:inline-block}.next-radio-group .next-radio-label{color:#333;margin-right:16px}.next-radio-group.disabled .next-radio-label{color:#ccc}.next-radio-group-ver .next-radio-wrapper{display:block;margin-bottom:8px}.next-radio-label{margin:0 0 0 4px;font-size:12px;vertical-align:middle;line-height:1;color:#333}@-moz-document url-prefix(){.next-radio{margin-top:-1px}@supports (animation:calc(0s)){.next-radio{margin-top:-3px}}}.next-checkbox-wrapper[dir=rtl]{margin-right:8px;margin-left:0}.next-checkbox-wrapper[dir=rtl]:first-child{margin-right:0}.next-checkbox-wrapper[dir=rtl]>.next-checkbox-label{margin-right:4px;margin-left:0}.next-checkbox-wrapper,.next-checkbox-wrapper *,.next-checkbox-wrapper :after,.next-checkbox-wrapper :before{box-sizing:border-box}.next-checkbox-wrapper .next-checkbox{display:inline-block;position:relative;line-height:1;vertical-align:middle}.next-checkbox-wrapper input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:16px;height:16px;margin:0;cursor:pointer}.next-checkbox-wrapper .next-checkbox-inner{display:block;width:16px;height:16px;background:#fff;border-radius:3px;border:1px solid #c4c6cf;transition:all .1s linear;text-align:left;box-shadow:none}.next-checkbox-wrapper .next-checkbox-inner>.next-icon{transform:scale(0);position:absolute;top:0;opacity:0;line-height:16px;transition:all .1s linear;color:#fff;left:4px;margin-left:0}.next-checkbox-wrapper .next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper .next-checkbox-inner>.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-checkbox-wrapper .next-checkbox-inner>.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-checkbox-wrapper .next-checkbox-inner>.next-icon:before{width:16px;font-size:16px}}.next-checkbox-wrapper .next-checkbox-inner>.next-icon:before{vertical-align:top;margin-top:0}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner{border-color:transparent;background-color:#5584ff}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner:hover,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner:hover{border-color:transparent}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon{opacity:1;transform:scale(1);margin-left:0}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-checkbox-wrapper.checked.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.checked>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:16px;font-size:16px}}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner{border-color:transparent;background-color:#5584ff}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner:hover,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner.hovered,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner:hover{border-color:transparent}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon{opacity:1;transform:scaleX(1);margin-left:0}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon .next-icon-remote,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-checkbox-wrapper.indeterminate.focused>.next-checkbox>.next-checkbox-inner>.next-icon:before,.next-checkbox-wrapper.indeterminate>.next-checkbox>.next-checkbox-inner>.next-icon:before{width:16px;font-size:16px}}.next-checkbox-wrapper.focused>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper.hovered>.next-checkbox>.next-checkbox-inner,.next-checkbox-wrapper:not(.disabled):hover>.next-checkbox>.next-checkbox-inner{border-color:#5584ff;background-color:#dee8ff}.next-checkbox-wrapper.focused .next-checkbox-label,.next-checkbox-wrapper.hovered .next-checkbox-label,.next-checkbox-wrapper:not(.disabled):hover .next-checkbox-label{cursor:pointer}.next-checkbox-wrapper.checked:not(.disabled).hovered>.next-checkbox .next-checkbox-inner,.next-checkbox-wrapper.checked:not(.disabled):hover>.next-checkbox .next-checkbox-inner,.next-checkbox-wrapper.indeterminate:not(.disabled).hovered>.next-checkbox .next-checkbox-inner,.next-checkbox-wrapper.indeterminate:not(.disabled):hover>.next-checkbox .next-checkbox-inner{border-color:transparent;background-color:#3e71f7}.next-checkbox-wrapper.checked:not(.disabled).hovered>.next-checkbox .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.checked:not(.disabled):hover>.next-checkbox .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate:not(.disabled).hovered>.next-checkbox .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.indeterminate:not(.disabled):hover>.next-checkbox .next-checkbox-inner>.next-icon{color:#fff;opacity:1}.next-checkbox-wrapper.disabled input[type=checkbox]{cursor:not-allowed}.next-checkbox-wrapper.disabled.checked .next-checkbox-inner,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner,.next-checkbox-wrapper.disabled .next-checkbox-inner{border-color:#e6e7eb;background:#f7f8fa}.next-checkbox-wrapper.disabled.checked .next-checkbox-inner.hovered,.next-checkbox-wrapper.disabled.checked .next-checkbox-inner:hover,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner.hovered,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner:hover{border-color:#e6e7eb}.next-checkbox-wrapper.disabled.checked .next-checkbox-inner>.next-icon,.next-checkbox-wrapper.disabled.indeterminate .next-checkbox-inner>.next-icon{color:#ccc;opacity:1}.next-checkbox-wrapper.disabled .next-checkbox-label{color:#333}.next-checkbox-group .next-checkbox-wrapper{display:inline-block;margin-left:8px}.next-checkbox-group .next-checkbox-wrapper:first-child{margin-left:0}.next-checkbox-group-ver .next-checkbox-wrapper{display:block;margin-left:0;margin-right:0;margin-bottom:8px}.next-checkbox-label{font-size:12px;color:#333;vertical-align:middle;margin:0 0 0 4px;line-height:1}.next-menu[dir=rtl] .next-menu-item-helper{float:left}.next-menu[dir=rtl] .next-menu-item .next-checkbox,.next-menu[dir=rtl] .next-menu-item .next-radio{margin-left:4px;margin-right:0}.next-menu[dir=rtl] .next-menu-hoz-right{float:left}.next-menu[dir=rtl] .next-menu-hoz-icon-arrow.next-icon{left:6px;right:auto}.next-menu[dir=rtl] .next-menu-icon-selected.next-icon{margin-left:0;margin-right:-16px}.next-menu[dir=rtl] .next-menu-icon-selected.next-icon .next-icon-remote,.next-menu[dir=rtl] .next-menu-icon-selected.next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-menu[dir=rtl] .next-menu-icon-selected.next-icon.next-menu-icon-right{right:auto;left:4px}.next-menu[dir=rtl] .next-menu-icon-arrow.next-icon{left:10px;right:auto}.next-menu{position:relative;min-width:100px;padding:8px 0;margin:0;list-style:none;border:1px solid #dcdee3;border-radius:3px;box-shadow:none;background:#fff;line-height:32px;font-size:12px;animation-duration:.3s;animation-timing-function:ease}.next-menu,.next-menu *,.next-menu :after,.next-menu :before{box-sizing:border-box}.next-menu:focus,.next-menu :focus{outline:0}.next-menu-embeddable,.next-menu-embeddable .next-menu-item.next-disabled,.next-menu-embeddable .next-menu-item.next-disabled .next-menu-item-text>a{background:initial;border:none}.next-menu-embeddable .next-menu-item-inner{height:100%}.next-menu-content{position:relative}.next-menu-content,.next-menu-sub-menu{padding:0;margin:0;list-style:none}.next-menu-sub-menu.next-expand-enter{overflow:hidden}.next-menu-sub-menu.next-expand-enter-active{transition:height .3s ease}.next-menu-sub-menu.next-expand-leave{overflow:hidden}.next-menu-sub-menu.next-expand-leave-active{transition:height .3s ease}.next-menu-item{position:relative;padding:0 20px;transition:background .1s linear;color:#333;cursor:pointer}.next-menu-item-helper{float:right;color:#999;font-style:normal;font-size:12px}.next-menu-item .next-checkbox,.next-menu-item .next-radio{margin-right:4px}.next-menu-item.next-selected{color:#333;background-color:#fff}.next-menu-item.next-selected .next-menu-icon-arrow{color:#666}.next-menu-item.next-selected .next-menu-icon-selected{color:#5584ff}.next-menu-item.next-disabled,.next-menu-item.next-disabled .next-menu-item-text>a{color:#ccc;background-color:#fff;cursor:not-allowed}.next-menu-item.next-disabled .next-menu-icon-arrow,.next-menu-item.next-disabled .next-menu-icon-selected,.next-menu-item.next-disabled .next-menu-item-text>a .next-menu-icon-arrow,.next-menu-item.next-disabled .next-menu-item-text>a .next-menu-icon-selected{color:#ccc}.next-menu-item:not(.next-disabled).next-focused,.next-menu-item:not(.next-disabled).next-selected.next-focused,.next-menu-item:not(.next-disabled).next-selected.next-focused:hover,.next-menu-item:not(.next-disabled).next-selected:focus,.next-menu-item:not(.next-disabled).next-selected:focus:hover,.next-menu-item:not(.next-disabled).next-selected:hover,.next-menu-item:not(.next-disabled):hover{color:#333;background-color:#f2f3f7}.next-menu-item:not(.next-disabled).next-focused .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected.next-focused .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected.next-focused:hover .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected:focus .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected:focus:hover .next-menu-icon-arrow,.next-menu-item:not(.next-disabled).next-selected:hover .next-menu-icon-arrow,.next-menu-item:not(.next-disabled):hover .next-menu-icon-arrow{color:#333}.next-menu-item:not(.next-disabled).next-focused .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected.next-focused .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected.next-focused:hover .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected:focus .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected:focus:hover .next-menu-icon-selected,.next-menu-item:not(.next-disabled).next-selected:hover .next-menu-icon-selected,.next-menu-item:not(.next-disabled):hover .next-menu-icon-selected{color:#5584ff}.next-menu-item-inner{height:32px;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.next-menu-item-text{vertical-align:middle}.next-menu-item-text>a{display:inline-block;text-decoration:none;color:#333}.next-menu-item-text>a:before{position:absolute;background-color:transparent;top:0;left:0;bottom:0;right:0;content:""}.next-menu.next-hoz{padding:0}.next-menu.next-hoz.next-menu-nowrap{overflow:hidden;white-space:nowrap}.next-menu.next-hoz.next-menu-nowrap .next-menu-more{padding:0;text-align:center}.next-menu.next-hoz .next-menu-content>.next-menu-item,.next-menu.next-hoz>.next-menu-item,.next-menu.next-hoz>.next-menu-sub-menu-wrapper{display:inline-block;vertical-align:top}.next-menu.next-hoz .next-menu-content,.next-menu.next-hoz .next-menu-footer,.next-menu.next-hoz .next-menu-header{display:inline-block}.next-menu-hoz-right{float:right}.next-menu-group-label{padding:0 12px;color:#999}.next-menu-divider{margin:8px 12px;border-bottom:1px solid #e6e7eb}.next-menu .next-menu-icon-selected.next-icon{position:absolute;top:0;margin-left:-16px}.next-menu .next-menu-icon-selected.next-icon .next-icon-remote,.next-menu .next-menu-icon-selected.next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-menu .next-menu-icon-selected.next-icon.next-menu-icon-right{right:4px}.next-menu .next-menu-icon-arrow.next-icon{position:absolute;top:0;right:10px;color:#666;transition:all .1s linear}.next-menu .next-menu-icon-arrow.next-icon .next-icon-remote,.next-menu .next-menu-icon-arrow.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-icon-arrow.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-icon-arrow.next-icon:before{width:16px;font-size:16px}}.next-menu .next-menu-icon-arrow-down.next-open{transform:rotate(180deg)}.next-menu .next-menu-icon-arrow-down.next-open .next-icon-remote,.next-menu .next-menu-icon-arrow-down.next-open:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-icon-arrow-down.next-open{transform:scale(.5) rotate(180deg);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-icon-arrow-down.next-open:before{width:16px;font-size:16px}}.next-menu .next-menu-icon-arrow-right.next-open{transform:rotate(-90deg)}.next-menu .next-menu-icon-arrow-right.next-open .next-icon-remote,.next-menu .next-menu-icon-arrow-right.next-open:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-icon-arrow-right.next-open{transform:scale(.5) rotate(-90deg);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-icon-arrow-right.next-open:before{width:16px;font-size:16px}}.next-menu .next-menu-hoz-icon-arrow.next-icon{position:absolute;top:0;right:6px;color:#666;transition:all .1s linear}.next-menu .next-menu-hoz-icon-arrow.next-icon .next-icon-remote,.next-menu .next-menu-hoz-icon-arrow.next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-hoz-icon-arrow.next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-hoz-icon-arrow.next-icon:before{width:16px;font-size:16px}}.next-menu .next-menu-hoz-icon-arrow.next-open{transform:rotate(180deg)}.next-menu .next-menu-hoz-icon-arrow.next-open .next-icon-remote,.next-menu .next-menu-hoz-icon-arrow.next-open:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-menu .next-menu-hoz-icon-arrow.next-open{transform:scale(.5) rotate(180deg);margin-left:-4px;margin-right:-4px}.next-menu .next-menu-hoz-icon-arrow.next-open:before{width:16px;font-size:16px}}.next-menu.next-context{line-height:24px}.next-menu.next-context .next-menu-item-inner{height:24px}.next-btn,.next-btn *,.next-btn :after,.next-btn :before{box-sizing:border-box}.next-btn::-moz-focus-inner{border:0;padding:0}.next-btn,.next-btn:active,.next-btn:focus,.next-btn:hover{outline:0}@keyframes loadingCircle{0%{transform-origin:50% 50%;transform:rotate(0deg)}to{transform-origin:50% 50%;transform:rotate(1turn)}}.next-btn{position:relative;display:inline-block;box-shadow:none;text-decoration:none;text-align:center;text-transform:none;white-space:nowrap;vertical-align:middle;user-select:none;transition:all .1s linear;line-height:1;cursor:pointer}.next-btn:after{text-align:center;position:absolute;opacity:0;visibility:hidden;transition:opacity .1s linear}.next-btn:before{content:"";height:100%;width:0}.next-btn .next-icon,.next-btn:before{display:inline-block;vertical-align:middle}.next-btn .next-icon{font-size:0}.next-btn>div,.next-btn>span{display:inline-block;vertical-align:middle}.next-btn.hover,.next-btn:hover{box-shadow:none}.next-btn.next-small{border-radius:3px;padding:0 8px;height:20px;font-size:12px;border-width:1px}.next-btn.next-small>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn.next-small>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-small>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn.next-small>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn.next-small>.next-btn-icon.next-icon-alone:before,.next-btn.next-small>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-small>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small.next-btn-loading{padding-left:24px}.next-btn.next-small.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:8px;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn.next-small.next-btn-loading>.next-icon{display:none}.next-btn.next-medium{border-radius:3px;padding:0 12px;height:28px;font-size:12px;border-width:1px}.next-btn.next-medium>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn.next-medium>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-medium>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn.next-medium>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn.next-medium>.next-btn-icon.next-icon-alone:before,.next-btn.next-medium>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-medium>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium.next-btn-loading{padding-left:28px}.next-btn.next-medium.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:12px;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn.next-medium.next-btn-loading>.next-icon{display:none}.next-btn.next-large{border-radius:3px;padding:0 16px;height:40px;font-size:16px;border-width:1px}.next-btn.next-large>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn.next-large>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-large>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn.next-large>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn.next-large>.next-btn-icon.next-icon-alone:before,.next-btn.next-large>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-large>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large.next-btn-loading{padding-left:36px}.next-btn.next-large.next-btn-loading:after{width:16px;height:16px;font-size:16px;line-height:16px;left:16px;top:50%;text-align:center;margin-top:-8px;margin-right:4px}.next-btn.next-large.next-btn-loading>.next-icon{display:none}.next-btn.next-btn-normal{border-style:solid;background-color:#fff;border-color:#c4c6cf}.next-btn.next-btn-normal,.next-btn.next-btn-normal.visited,.next-btn.next-btn-normal:link,.next-btn.next-btn-normal:visited{color:#333}.next-btn.next-btn-normal.active,.next-btn.next-btn-normal.hover,.next-btn.next-btn-normal:active,.next-btn.next-btn-normal:focus,.next-btn.next-btn-normal:hover{color:#333;background-color:#f2f3f7;border-color:#a0a2ad;text-decoration:none}.next-btn.next-btn-primary{border-style:solid;background-color:#5584ff;border-color:transparent}.next-btn.next-btn-primary,.next-btn.next-btn-primary.visited,.next-btn.next-btn-primary:link,.next-btn.next-btn-primary:visited{color:#fff}.next-btn.next-btn-primary.active,.next-btn.next-btn-primary.hover,.next-btn.next-btn-primary:active,.next-btn.next-btn-primary:focus,.next-btn.next-btn-primary:hover{color:#fff;background-color:#3e71f7;border-color:transparent;text-decoration:none}.next-btn.next-btn-secondary{border-style:solid;background-color:#fff;border-color:#5584ff}.next-btn.next-btn-secondary,.next-btn.next-btn-secondary.visited,.next-btn.next-btn-secondary:link,.next-btn.next-btn-secondary:visited{color:#5584ff}.next-btn.next-btn-secondary.active,.next-btn.next-btn-secondary.hover,.next-btn.next-btn-secondary:active,.next-btn.next-btn-secondary:focus,.next-btn.next-btn-secondary:hover{color:#fff;background-color:#3e71f7;border-color:#3e71f7;text-decoration:none}.next-btn.disabled,.next-btn[disabled]{cursor:not-allowed;background-color:#f7f8fa;border-color:#e6e7eb}.next-btn.disabled,.next-btn.disabled.visited,.next-btn.disabled:link,.next-btn.disabled:visited,.next-btn[disabled],.next-btn[disabled].visited,.next-btn[disabled]:link,.next-btn[disabled]:visited{color:#ccc}.next-btn.disabled.active,.next-btn.disabled.hover,.next-btn.disabled:active,.next-btn.disabled:focus,.next-btn.disabled:hover,.next-btn[disabled].active,.next-btn[disabled].hover,.next-btn[disabled]:active,.next-btn[disabled]:focus,.next-btn[disabled]:hover{color:#ccc;background-color:#f7f8fa;border-color:#e6e7eb;text-decoration:none}.next-btn-warning{border-style:solid}.next-btn-warning.next-btn-primary{background-color:#ff3000;border-color:#ff3000}.next-btn-warning.next-btn-primary,.next-btn-warning.next-btn-primary.visited,.next-btn-warning.next-btn-primary:link,.next-btn-warning.next-btn-primary:visited{color:#fff}.next-btn-warning.next-btn-primary.active,.next-btn-warning.next-btn-primary.hover,.next-btn-warning.next-btn-primary:active,.next-btn-warning.next-btn-primary:focus,.next-btn-warning.next-btn-primary:hover{color:#fff;background-color:#e72b00;border-color:#e72b00;text-decoration:none}.next-btn-warning.next-btn-primary.disabled,.next-btn-warning.next-btn-primary[disabled]{background-color:#f7f8fa;border-color:#dcdee3}.next-btn-warning.next-btn-primary.disabled,.next-btn-warning.next-btn-primary.disabled.visited,.next-btn-warning.next-btn-primary.disabled:link,.next-btn-warning.next-btn-primary.disabled:visited,.next-btn-warning.next-btn-primary[disabled],.next-btn-warning.next-btn-primary[disabled].visited,.next-btn-warning.next-btn-primary[disabled]:link,.next-btn-warning.next-btn-primary[disabled]:visited{color:#ccc}.next-btn-warning.next-btn-primary.disabled.active,.next-btn-warning.next-btn-primary.disabled.hover,.next-btn-warning.next-btn-primary.disabled:active,.next-btn-warning.next-btn-primary.disabled:focus,.next-btn-warning.next-btn-primary.disabled:hover,.next-btn-warning.next-btn-primary[disabled].active,.next-btn-warning.next-btn-primary[disabled].hover,.next-btn-warning.next-btn-primary[disabled]:active,.next-btn-warning.next-btn-primary[disabled]:focus,.next-btn-warning.next-btn-primary[disabled]:hover{color:#ccc;background-color:#f7f8fa;border-color:#dcdee3;text-decoration:none}.next-btn-warning.next-btn-normal{background-color:#fff;border-color:#ff3000}.next-btn-warning.next-btn-normal,.next-btn-warning.next-btn-normal.visited,.next-btn-warning.next-btn-normal:link,.next-btn-warning.next-btn-normal:visited{color:#ff3000}.next-btn-warning.next-btn-normal.active,.next-btn-warning.next-btn-normal.hover,.next-btn-warning.next-btn-normal:active,.next-btn-warning.next-btn-normal:focus,.next-btn-warning.next-btn-normal:hover{color:#fff;background-color:#e72b00;border-color:#e72b00;text-decoration:none}.next-btn-warning.next-btn-normal.disabled,.next-btn-warning.next-btn-normal[disabled]{background-color:#f7f8fa;border-color:#e6e7eb}.next-btn-warning.next-btn-normal.disabled,.next-btn-warning.next-btn-normal.disabled.visited,.next-btn-warning.next-btn-normal.disabled:link,.next-btn-warning.next-btn-normal.disabled:visited,.next-btn-warning.next-btn-normal[disabled],.next-btn-warning.next-btn-normal[disabled].visited,.next-btn-warning.next-btn-normal[disabled]:link,.next-btn-warning.next-btn-normal[disabled]:visited{color:#ccc}.next-btn-warning.next-btn-normal.disabled.active,.next-btn-warning.next-btn-normal.disabled.hover,.next-btn-warning.next-btn-normal.disabled:active,.next-btn-warning.next-btn-normal.disabled:focus,.next-btn-warning.next-btn-normal.disabled:hover,.next-btn-warning.next-btn-normal[disabled].active,.next-btn-warning.next-btn-normal[disabled].hover,.next-btn-warning.next-btn-normal[disabled]:active,.next-btn-warning.next-btn-normal[disabled]:focus,.next-btn-warning.next-btn-normal[disabled]:hover{color:#ccc;background-color:#f7f8fa;border-color:#e6e7eb;text-decoration:none}.next-btn-text{border-radius:0}.next-btn-text,.next-btn-text.hover,.next-btn-text:hover{box-shadow:none}.next-btn-text.next-btn-primary{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-primary,.next-btn-text.next-btn-primary.visited,.next-btn-text.next-btn-primary:link,.next-btn-text.next-btn-primary:visited{color:#5584ff}.next-btn-text.next-btn-primary.active,.next-btn-text.next-btn-primary.hover,.next-btn-text.next-btn-primary:active,.next-btn-text.next-btn-primary:focus,.next-btn-text.next-btn-primary:hover{color:#3e71f7;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-btn-secondary{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-secondary,.next-btn-text.next-btn-secondary.visited,.next-btn-text.next-btn-secondary:link,.next-btn-text.next-btn-secondary:visited{color:#666}.next-btn-text.next-btn-secondary.active,.next-btn-text.next-btn-secondary.hover,.next-btn-text.next-btn-secondary:active,.next-btn-text.next-btn-secondary:focus,.next-btn-text.next-btn-secondary:hover{color:#5584ff;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-btn-normal{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-normal,.next-btn-text.next-btn-normal.visited,.next-btn-text.next-btn-normal:link,.next-btn-text.next-btn-normal:visited{color:#333}.next-btn-text.next-btn-normal.active,.next-btn-text.next-btn-normal.hover,.next-btn-text.next-btn-normal:active,.next-btn-text.next-btn-normal:focus,.next-btn-text.next-btn-normal:hover{color:#5584ff;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-large{border-radius:0;padding:0;height:24px;font-size:14px;border-width:0}.next-btn-text.next-large>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn-text.next-large>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text.next-large>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text.next-large>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn-text.next-large>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn-text.next-large>.next-btn-icon.next-icon-alone:before,.next-btn-text.next-large>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text.next-large>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text.next-large.next-btn-loading{padding-left:20px}.next-btn-text.next-large.next-btn-loading:after{width:16px;height:16px;font-size:16px;line-height:16px;left:0;top:50%;text-align:center;margin-top:-8px;margin-right:4px}.next-btn-text.next-large.next-btn-loading>.next-icon{display:none}.next-btn-text.next-medium{border-radius:0;padding:0;height:20px;font-size:12px;border-width:0}.next-btn-text.next-medium>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn-text.next-medium>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text.next-medium>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-medium>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn-text.next-medium>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn-text.next-medium>.next-btn-icon.next-icon-alone:before,.next-btn-text.next-medium>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text.next-medium>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-medium.next-btn-loading{padding-left:16px}.next-btn-text.next-medium.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:0;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn-text.next-medium.next-btn-loading>.next-icon{display:none}.next-btn-text.next-small{border-radius:0;padding:0;height:16px;font-size:12px;border-width:0}.next-btn-text.next-small>.next-btn-icon.next-icon-first{margin-left:0;margin-right:4px}.next-btn-text.next-small>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text.next-small>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-small>.next-btn-icon.next-icon-last{margin-left:4px;margin-right:0}.next-btn-text.next-small>.next-btn-icon.next-icon-alone .next-icon-remote,.next-btn-text.next-small>.next-btn-icon.next-icon-alone:before,.next-btn-text.next-small>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text.next-small>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text.next-small.next-btn-loading{padding-left:16px}.next-btn-text.next-small.next-btn-loading:after{width:12px;height:12px;font-size:12px;line-height:12px;left:0;top:50%;text-align:center;margin-top:-6px;margin-right:4px}.next-btn-text.next-small.next-btn-loading>.next-icon{display:none}.next-btn-text.disabled,.next-btn-text[disabled]{background-color:transparent;border-color:transparent}.next-btn-text.disabled,.next-btn-text.disabled.visited,.next-btn-text.disabled:link,.next-btn-text.disabled:visited,.next-btn-text[disabled],.next-btn-text[disabled].visited,.next-btn-text[disabled]:link,.next-btn-text[disabled]:visited{color:#ccc}.next-btn-text.disabled.active,.next-btn-text.disabled.hover,.next-btn-text.disabled:active,.next-btn-text.disabled:focus,.next-btn-text.disabled:hover,.next-btn-text[disabled].active,.next-btn-text[disabled].hover,.next-btn-text[disabled]:active,.next-btn-text[disabled]:focus,.next-btn-text[disabled]:hover{color:#ccc;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-text.next-btn-loading{background-color:transparent;border-color:transparent}.next-btn-text.next-btn-loading,.next-btn-text.next-btn-loading.visited,.next-btn-text.next-btn-loading:link,.next-btn-text.next-btn-loading:visited{color:#333}.next-btn-text.next-btn-loading.active,.next-btn-text.next-btn-loading.hover,.next-btn-text.next-btn-loading:active,.next-btn-text.next-btn-loading:focus,.next-btn-text.next-btn-loading:hover{color:#333;background-color:transparent;border-color:transparent;text-decoration:none}.next-btn-loading{pointer-events:none}.next-btn-loading:after{font-family:NextIcon;content:"";opacity:1;visibility:visible;animation:loadingCircle 2s linear infinite}.next-btn-ghost{box-shadow:none;border-style:solid}.next-btn-ghost.next-btn-dark{background-color:transparent;border-color:#fff}.next-btn-ghost.next-btn-dark,.next-btn-ghost.next-btn-dark.visited,.next-btn-ghost.next-btn-dark:link,.next-btn-ghost.next-btn-dark:visited{color:#fff}.next-btn-ghost.next-btn-dark.active,.next-btn-ghost.next-btn-dark.hover,.next-btn-ghost.next-btn-dark:active,.next-btn-ghost.next-btn-dark:focus,.next-btn-ghost.next-btn-dark:hover{color:#fff;background-color:hsla(0,0%,100%,.8);border-color:#fff;text-decoration:none}.next-btn-ghost.next-btn-dark.disabled,.next-btn-ghost.next-btn-dark[disabled]{background-color:transparent;border-color:hsla(0,0%,100%,.4)}.next-btn-ghost.next-btn-dark.disabled,.next-btn-ghost.next-btn-dark.disabled.visited,.next-btn-ghost.next-btn-dark.disabled:link,.next-btn-ghost.next-btn-dark.disabled:visited,.next-btn-ghost.next-btn-dark[disabled],.next-btn-ghost.next-btn-dark[disabled].visited,.next-btn-ghost.next-btn-dark[disabled]:link,.next-btn-ghost.next-btn-dark[disabled]:visited{color:hsla(0,0%,100%,.4)}.next-btn-ghost.next-btn-dark.disabled.active,.next-btn-ghost.next-btn-dark.disabled.hover,.next-btn-ghost.next-btn-dark.disabled:active,.next-btn-ghost.next-btn-dark.disabled:focus,.next-btn-ghost.next-btn-dark.disabled:hover,.next-btn-ghost.next-btn-dark[disabled].active,.next-btn-ghost.next-btn-dark[disabled].hover,.next-btn-ghost.next-btn-dark[disabled]:active,.next-btn-ghost.next-btn-dark[disabled]:focus,.next-btn-ghost.next-btn-dark[disabled]:hover{color:hsla(0,0%,100%,.4);background-color:transparent;border-color:hsla(0,0%,100%,.4);text-decoration:none}.next-btn-ghost.next-btn-light{background-color:transparent;border-color:#333}.next-btn-ghost.next-btn-light,.next-btn-ghost.next-btn-light.visited,.next-btn-ghost.next-btn-light:link,.next-btn-ghost.next-btn-light:visited{color:#333}.next-btn-ghost.next-btn-light.active,.next-btn-ghost.next-btn-light.hover,.next-btn-ghost.next-btn-light:active,.next-btn-ghost.next-btn-light:focus,.next-btn-ghost.next-btn-light:hover{color:#999;background-color:rgba(0,0,0,.92);border-color:#333;text-decoration:none}.next-btn-ghost.next-btn-light.disabled,.next-btn-ghost.next-btn-light[disabled]{background-color:transparent;border-color:rgba(0,0,0,.1)}.next-btn-ghost.next-btn-light.disabled,.next-btn-ghost.next-btn-light.disabled.visited,.next-btn-ghost.next-btn-light.disabled:link,.next-btn-ghost.next-btn-light.disabled:visited,.next-btn-ghost.next-btn-light[disabled],.next-btn-ghost.next-btn-light[disabled].visited,.next-btn-ghost.next-btn-light[disabled]:link,.next-btn-ghost.next-btn-light[disabled]:visited{color:rgba(0,0,0,.1)}.next-btn-ghost.next-btn-light.disabled.active,.next-btn-ghost.next-btn-light.disabled.hover,.next-btn-ghost.next-btn-light.disabled:active,.next-btn-ghost.next-btn-light.disabled:focus,.next-btn-ghost.next-btn-light.disabled:hover,.next-btn-ghost.next-btn-light[disabled].active,.next-btn-ghost.next-btn-light[disabled].hover,.next-btn-ghost.next-btn-light[disabled]:active,.next-btn-ghost.next-btn-light[disabled]:focus,.next-btn-ghost.next-btn-light[disabled]:hover{color:rgba(0,0,0,.1);background-color:transparent;border-color:rgba(0,0,0,.1);text-decoration:none}.next-btn-group{position:relative;display:inline-block;vertical-align:middle}.next-btn-group>.next-btn{position:relative;float:left;box-shadow:none}.next-btn-group>.next-btn.active,.next-btn-group>.next-btn:active,.next-btn-group>.next-btn:focus,.next-btn-group>.next-btn:hover{z-index:1}.next-btn-group>.next-btn.disabled,.next-btn-group>.next-btn[disabled]{z-index:0}.next-btn-group .next-btn.next-btn{margin:0 0 0 -1px}.next-btn-group .next-btn:not(:first-child):not(:last-child){border-radius:0}.next-btn-group>.next-btn:first-child{margin:0}.next-btn-group>.next-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.next-btn-group>.next-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.next-btn-group>.next-btn-primary:not(:first-child){border-left-color:hsla(0,0%,100%,.2)}.next-btn-group>.next-btn-primary:not(:first-child):hover{border-left-color:transparent}.next-btn-group>.next-btn-primary:not(:first-child).disabled,.next-btn-group>.next-btn-primary:not(:first-child)[disabled]{border-left-color:#e6e7eb}.next-btn-group[dir=rtl]>.next-btn{float:right}.next-btn-group[dir=rtl] .next-btn.next-btn{margin:0 -1px 0 0}.next-btn-group[dir=rtl]>.next-btn:first-child:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.next-btn-group[dir=rtl]>.next-btn:last-child:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0}.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child){border-right-color:hsla(0,0%,100%,.2)}.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child):hover{border-right-color:transparent}.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child).disabled,.next-btn-group[dir=rtl]>.next-btn-primary:not(:first-child)[disabled]{border-right-color:#e6e7eb}.next-btn.next-small[dir=rtl]{border-radius:3px}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-small[dir=rtl]>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-small[dir=rtl].next-btn-loading{padding-left:8px;padding-right:24px}.next-btn.next-small[dir=rtl].next-btn-loading:after{right:8px;top:50%;margin-right:0;margin-left:4px}.next-btn.next-medium[dir=rtl]{border-radius:3px}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-medium[dir=rtl]>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn.next-medium[dir=rtl].next-btn-loading{padding-left:12px;padding-right:28px}.next-btn.next-medium[dir=rtl].next-btn-loading:after{right:12px;top:50%;margin-right:0;margin-left:4px}.next-btn.next-large[dir=rtl]{border-radius:3px}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn.next-large[dir=rtl]>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn.next-large[dir=rtl].next-btn-loading{padding-left:16px;padding-right:36px}.next-btn.next-large[dir=rtl].next-btn-loading:after{right:16px;top:50%;margin-right:0;margin-left:4px}.next-btn-text[dir=rtl].next-large{border-radius:0}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-first:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text[dir=rtl].next-large>.next-btn-icon.next-icon-last:before{width:16px;font-size:16px;line-height:inherit}.next-btn-text[dir=rtl].next-large.next-btn-loading{padding-left:0;padding-right:20px}.next-btn-text[dir=rtl].next-large.next-btn-loading:after{right:0;top:50%;margin-right:0;margin-left:4px}.next-btn-text[dir=rtl].next-medium{border-radius:0}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text[dir=rtl].next-medium>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-medium.next-btn-loading{padding-left:0;padding-right:16px}.next-btn-text[dir=rtl].next-medium.next-btn-loading:after{right:0;top:50%;margin-right:0;margin-left:4px}.next-btn-text[dir=rtl].next-small{border-radius:0}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-first{margin-left:4px;margin-right:0}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-first .next-icon-remote,.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-first:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-last{margin-left:0;margin-right:4px}.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-last .next-icon-remote,.next-btn-text[dir=rtl].next-small>.next-btn-icon.next-icon-last:before{width:12px;font-size:12px;line-height:inherit}.next-btn-text[dir=rtl].next-small.next-btn-loading{padding-left:0;padding-right:16px}.next-btn-text[dir=rtl].next-small.next-btn-loading:after{right:0;top:50%;margin-right:0;margin-left:4px}.next-dialog[dir=rtl],.next-dialog[dir=rtl] .next-dialog-footer.next-align-left{text-align:right}.next-dialog[dir=rtl] .next-dialog-footer.next-align-center{text-align:center}.next-dialog[dir=rtl] .next-dialog-footer.next-align-right{text-align:left}.next-dialog[dir=rtl] .next-dialog-btn+.next-dialog-btn{margin-right:4px;margin-left:0}.next-dialog[dir=rtl] .next-dialog-close{left:12px;right:auto}.next-dialog{position:fixed;z-index:1001;background:#fff;border:1px solid #dcdee3;border-radius:3px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-align:left;overflow:hidden;animation-duration:.3s;animation-timing-function:ease-in-out;max-width:90%}.next-dialog,.next-dialog *,.next-dialog :after,.next-dialog :before{box-sizing:border-box}.next-dialog-header{padding:12px 20px;border-bottom:0 solid transparent;font-size:16px;background:transparent;color:#333}.next-dialog-body{padding:20px;font-size:12px;color:#666}.next-dialog-footer{padding:12px 20px;border-top:0 solid transparent;background:transparent}.next-dialog-footer.next-align-left{text-align:left}.next-dialog-footer.next-align-center{text-align:center}.next-dialog-footer.next-align-right{text-align:right}.next-dialog-footer-fixed-height{position:absolute;width:100%;bottom:0}.next-dialog-btn+.next-dialog-btn{margin-left:4px}.next-dialog-close{position:absolute;top:12px;right:12px;width:16px;cursor:pointer}.next-dialog-close,.next-dialog-close:link,.next-dialog-close:visited{height:16px;color:#999}.next-dialog-close:hover{background:transparent;color:#333}.next-dialog-close .next-dialog-close-icon.next-icon{position:absolute;top:50%;left:50%;margin-top:-6px;margin-left:-6px;width:12px;height:12px;line-height:12px}.next-dialog-close .next-dialog-close-icon.next-icon:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-dialog-container{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1001;padding:40px;overflow:auto;text-align:center;box-sizing:border-box}.next-dialog-container:before{display:inline-block;vertical-align:middle;width:0;height:100%;content:""}.next-dialog-container .next-dialog{display:inline-block;position:relative;vertical-align:middle}.next-dialog-quick .next-dialog-body{padding:20px}.next-dialog .next-dialog-message.next-message{min-width:300px;padding:0}.next-input{vertical-align:middle;display:inline-table;border-collapse:separate;font-size:0;line-height:1;width:200px;border-spacing:0;transition:all .1s linear;border:1px solid #c4c6cf;background-color:#fff}.next-input,.next-input *,.next-input :after,.next-input :before{box-sizing:border-box}.next-input input{height:100%}.next-input input[type=reset],.next-input input[type=submit]{-webkit-appearance:button;cursor:pointer}.next-input input::-moz-focus-inner{border:0;padding:0}.next-input input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #fff inset}.next-input textarea{resize:none}.next-input input,.next-input textarea{width:100%;border:none;outline:none;padding:0;margin:0;font-weight:400;vertical-align:middle;background-color:transparent;color:#333}.next-input input::-ms-clear,.next-input textarea::-ms-clear{display:none}.next-input.next-input-textarea{border-radius:3px;font-size:0}.next-input.next-input-textarea textarea{color:#333;padding:4px 8px;font-size:12px;border-radius:3px}.next-input.next-input-textarea .next-input-control{display:block;width:auto;border-radius:3px}.next-input.next-input-textarea .next-input-len{padding:0 8px 4px;display:block;text-align:right;width:auto}.next-input.next-small{height:20px;border-radius:3px}.next-input.next-small .next-input-label{padding-left:8px;font-size:12px}.next-input.next-small .next-input-inner{font-size:12px}.next-input.next-small .next-input-control{padding-right:4px}.next-input.next-small input{height:18px;line-height:18px \0;padding:0 4px;font-size:12px}.next-input.next-small input::placeholder{font-size:12px}.next-input.next-small .next-input-text-field{padding:0 4px;font-size:12px;height:18px;line-height:18px}.next-input.next-small .next-icon .next-icon-remote,.next-input.next-small .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-input.next-small .next-input-control{border-radius:0 3px 3px 0}.next-input.next-medium{height:28px;border-radius:3px}.next-input.next-medium .next-input-label{padding-left:8px;font-size:12px}.next-input.next-medium .next-input-inner{font-size:12px}.next-input.next-medium .next-input-control{padding-right:8px}.next-input.next-medium input{height:26px;line-height:26px \0;padding:0 8px;font-size:12px}.next-input.next-medium input::placeholder{font-size:12px}.next-input.next-medium .next-input-text-field{padding:0 8px;font-size:12px;height:26px;line-height:26px}.next-input.next-medium .next-icon .next-icon-remote,.next-input.next-medium .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-input.next-medium .next-input-control{border-radius:0 3px 3px 0}.next-input.next-large{height:40px;border-radius:3px}.next-input.next-large .next-input-label{padding-left:12px;font-size:16px}.next-input.next-large .next-input-inner{font-size:16px}.next-input.next-large .next-input-control{padding-right:8px}.next-input.next-large input{height:38px;line-height:38px \0;padding:0 12px;font-size:16px}.next-input.next-large input::placeholder{font-size:16px}.next-input.next-large .next-input-text-field{padding:0 12px;font-size:16px;height:38px;line-height:38px}.next-input.next-large .next-icon .next-icon-remote,.next-input.next-large .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-input.next-large .next-input-control{border-radius:0 3px 3px 0}.next-input-hint-wrap{color:#999;position:relative}.next-input-hint-wrap .next-input-clear{opacity:0;z-index:1;position:absolute}.next-input-hint-wrap .next-input-hint{opacity:1}.next-input .next-icon-delete-filling:hover,.next-input .next-icon-eye-close:hover,.next-input .next-icon-eye:hover{cursor:pointer;color:#666}.next-input.next-focus,.next-input:hover{border-color:#a0a2ad;background-color:#fff}.next-input.next-focus .next-input-clear,.next-input:hover .next-input-clear{opacity:1}.next-input.next-focus .next-input-clear+.next-input-hint,.next-input:hover .next-input-clear+.next-input-hint{opacity:0}.next-input .next-input-clear:focus{opacity:1}.next-input .next-input-clear:focus+.next-input-hint{opacity:0}.next-input.next-focus{border-color:#5584ff;background-color:#fff;box-shadow:0 0 0 0 rgba(85,132,255,.2)}.next-input.next-warning{border-color:#ff9300;background-color:#fff}.next-input.next-warning.next-focus,.next-input.next-warning:hover{border-color:#ff9300}.next-input.next-warning.next-focus{box-shadow:0 0 0 0 rgba(255,147,0,.2)}.next-input.next-error{border-color:#ff3000;background-color:#fff}.next-input.next-error.next-focus,.next-input.next-error:hover{border-color:#ff3000}.next-input.next-error.next-focus{box-shadow:0 0 0 0 rgba(255,48,0,.2)}.next-input.next-hidden{display:none}.next-input.next-noborder{border:none}.next-input-control .next-input-len{font-size:12px;line-height:12px;color:#999;display:table-cell;width:1px;vertical-align:bottom}.next-input-control .next-input-len.next-error{color:#ff3000}.next-input-control .next-input-len.next-warning{color:#ff9300}.next-input-control>*{display:table-cell;width:1%;top:0}.next-input-control>:not(:last-child){padding-right:4px}.next-input-control .next-icon{transition:all .1s linear;color:#999}.next-input-control .next-icon-warning{color:#ff9300}.next-input-control .next-icon-success-filling{color:#46bc15}.next-input-control .next-icon-loading{color:#4494f9}.next-input-label{color:#666}.next-input input::-moz-placeholder,.next-input textarea::-moz-placeholder{color:#999;opacity:1}.next-input input:-ms-input-placeholder,.next-input textarea:-ms-input-placeholder{color:#999}.next-input input::-webkit-input-placeholder,.next-input textarea::-webkit-input-placeholder{color:#999}.next-input.next-disabled{color:#ccc;cursor:not-allowed}.next-input.next-disabled,.next-input.next-disabled:hover{border-color:#e6e7eb;background-color:#f7f8fa}.next-input.next-disabled input::-moz-placeholder,.next-input.next-disabled textarea::-moz-placeholder{color:#ccc;opacity:1}.next-input.next-disabled input:-ms-input-placeholder,.next-input.next-disabled textarea:-ms-input-placeholder{color:#ccc}.next-input.next-disabled input::-webkit-input-placeholder,.next-input.next-disabled textarea::-webkit-input-placeholder{color:#ccc}.next-input.next-disabled .next-input-label,.next-input.next-disabled .next-input-len{color:#ccc}.next-input.next-disabled input,.next-input.next-disabled textarea{color:#ccc;border-color:#e6e7eb;background-color:#f7f8fa;cursor:not-allowed}.next-input.next-disabled input:hover,.next-input.next-disabled textarea:hover{border-color:#e6e7eb;background-color:#f7f8fa}.next-input.next-disabled .next-input-hint-wrap{color:#ccc}.next-input.next-disabled .next-input-hint-wrap .next-input-clear{opacity:0}.next-input.next-disabled .next-input-hint-wrap .next-input-hint{opacity:1}.next-input.next-disabled .next-input-hint-wrap .next-icon-delete-filling:hover{cursor:not-allowed;color:#ccc}.next-input.next-disabled .next-icon{color:#ccc}.next-input-control,.next-input-inner,.next-input-label{display:table-cell;width:1px;vertical-align:middle;line-height:1;background-color:transparent;white-space:nowrap}.next-input-group{display:inline-table;border-collapse:separate;border-spacing:0;line-height:0;width:100%}.next-input-group,.next-input-group *,.next-input-group :after,.next-input-group :before{box-sizing:border-box}.next-input-group-auto-width{width:100%;border-radius:0!important}.next-input-group>.next-input{border-radius:0}.next-input-group>.next-input.next-focus{position:relative;z-index:1}.next-input-group>.next-input:first-child.next-large,.next-input-group>.next-input:first-child.next-medium,.next-input-group>.next-input:first-child.next-small{border-top-left-radius:3px!important;border-bottom-left-radius:3px!important}.next-input-group>.next-input:last-child.next-large,.next-input-group>.next-input:last-child.next-medium,.next-input-group>.next-input:last-child.next-small{border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.next-input-group-addon{width:1px;display:table-cell;vertical-align:middle;white-space:nowrap}.next-input-group-addon:first-child,.next-input-group-addon:first-child>*{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group-addon:first-child>*{margin-right:-1px}.next-input-group-addon:first-child>.next-focus{position:relative;z-index:1}.next-input-group-addon:first-child>*>.next-input{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group-addon:first-child>*>.next-input.next-focus{position:relative;z-index:1}.next-input-group-addon:last-child,.next-input-group-addon:last-child>*{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group-addon:last-child>*{margin-left:-1px}.next-input-group-addon:last-child>*>.next-input{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group-text{color:#999;background-color:#f2f3f7;text-align:center;border:1px solid #c4c6cf;padding:0 8px}.next-input-group-text:first-child{border-right-width:0}.next-input-group-text:last-child{border-left-width:0}.next-input-group-text.next-disabled{color:#ccc;cursor:not-allowed}.next-input-group-text.next-disabled,.next-input-group-text.next-disabled:hover{border-color:#e6e7eb;background-color:#f7f8fa}.next-input-group-text.next-medium,.next-input-group-text.next-small{font-size:12px;border-radius:3px}.next-input-group-text.next-large{font-size:16px;border-radius:3px}.next-input[dir=rtl].next-small .next-input-label{padding-left:0;padding-right:8px}.next-input[dir=rtl].next-small .next-input-control{padding-right:0;padding-left:4px}.next-input[dir=rtl].next-medium .next-input-label{padding-left:0;padding-right:8px}.next-input[dir=rtl].next-medium .next-input-control{padding-right:0;padding-left:8px}.next-input[dir=rtl].next-large .next-input-label{padding-left:0;padding-right:12px}.next-input[dir=rtl].next-large .next-input-control{padding-right:0;padding-left:8px}.next-input[dir=rtl].next-input-textarea .next-input-len{text-align:left}.next-input[dir=rtl] .next-input-control>:not(:last-child){padding-left:4px;padding-right:0}.next-input-group[dir=rtl]>.next-input:first-child.next-large,.next-input-group[dir=rtl]>.next-input:first-child.next-medium,.next-input-group[dir=rtl]>.next-input:first-child.next-small{border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.next-input-group[dir=rtl]>.next-input:last-child.next-large,.next-input-group[dir=rtl]>.next-input:last-child.next-medium,.next-input-group[dir=rtl]>.next-input:last-child.next-small{border-top-left-radius:3px!important;border-bottom-left-radius:3px!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:first-child,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:first-child.next-large,.next-input-group[dir=rtl] .next-input-group-addon:first-child.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:first-child.next-small,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:first-child>*>.next-input.next-small,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:first-child>.next-input.next-small{border-bottom-right-radius:3px!important;border-top-right-radius:3px!important}.next-input-group[dir=rtl] .next-input-group-addon:first-child>*{margin-left:-1px;border-bottom-left-radius:0!important;border-top-left-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:last-child,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group[dir=rtl] .next-input-group-addon:last-child.next-large,.next-input-group[dir=rtl] .next-input-group-addon:last-child.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:last-child.next-small,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:last-child>*>.next-input.next-small,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input.next-large,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input.next-medium,.next-input-group[dir=rtl] .next-input-group-addon:last-child>.next-input.next-small{border-bottom-left-radius:3px!important;border-top-left-radius:3px!important}.next-input-group[dir=rtl] .next-input-group-addon:last-child>*{margin-right:-1px;border-bottom-right-radius:0!important;border-top-right-radius:0!important}.next-input-group[dir=rtl] .next-input-group-text:first-child{border-right-width:1px;border-left:0}.next-input-group[dir=rtl] .next-input-group-text:last-child{border-left-width:1px;border-right:0}.next-row{display:flex}.next-row,.next-row *,.next-row :after,.next-row :before{box-sizing:border-box}.next-row.next-row-wrap{flex-wrap:wrap}@media (min-width:320px){.next-row.next-row-fixed{width:320px}}@media (min-width:480px){.next-row.next-row-fixed{width:480px}}@media (min-width:720px){.next-row.next-row-fixed{width:720px}}@media (min-width:990px){.next-row.next-row-fixed{width:990px}}@media (min-width:1200px){.next-row.next-row-fixed{width:1200px}}@media (min-width:1500px){.next-row.next-row-fixed{width:1500px}}.next-row.next-row-fixed-xxs{width:320px}.next-row.next-row-fixed-xs{width:480px}.next-row.next-row-fixed-s{width:720px}.next-row.next-row-fixed-m{width:990px}.next-row.next-row-fixed-l{width:1200px}.next-row.next-row-fixed-xl{width:1500px}.next-row.next-row-justify-start{justify-content:flex-start}.next-row.next-row-justify-end{justify-content:flex-end}.next-row.next-row-justify-center{justify-content:center}.next-row.next-row-justify-space-between{justify-content:space-between}.next-row.next-row-justify-space-around{justify-content:space-around}.next-row.next-row-align-top{align-items:flex-start}.next-row.next-row-align-bottom{align-items:flex-end}.next-row.next-row-align-center{align-items:center}.next-row.next-row-align-baseline{align-items:baseline}.next-row.next-row-align-stretch{align-items:stretch}.next-col{flex:1}.next-col.next-col-top{align-self:flex-start}.next-col.next-col-bottom{align-self:flex-end}.next-col.next-col-center{align-self:center}@media (min-width:0\0) and (min-resolution:0.001dpcm){.next-row{display:table;width:100%}.next-col{display:table-cell;vertical-align:top}}.next-col-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-24{flex:0 0 100%;width:100%;max-width:100%}@media (min-width:320px){.next-col-xxs-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-xxs-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-xxs-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-xxs-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-xxs-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-xxs-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-xxs-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-xxs-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-xxs-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-xxs-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-xxs-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-xxs-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-xxs-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-xxs-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-xxs-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-xxs-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-xxs-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-xxs-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-xxs-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-xxs-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-xxs-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-xxs-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-xxs-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-xxs-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:480px){.next-col-xs-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-xs-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-xs-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-xs-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-xs-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-xs-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-xs-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-xs-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-xs-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-xs-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-xs-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-xs-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-xs-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-xs-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-xs-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-xs-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-xs-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-xs-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-xs-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-xs-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-xs-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-xs-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-xs-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-xs-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:720px){.next-col-s-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-s-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-s-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-s-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-s-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-s-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-s-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-s-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-s-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-s-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-s-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-s-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-s-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-s-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-s-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-s-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-s-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-s-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-s-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-s-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-s-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-s-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-s-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-s-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:990px){.next-col-m-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-m-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-m-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-m-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-m-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-m-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-m-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-m-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-m-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-m-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-m-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-m-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-m-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-m-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-m-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-m-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-m-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-m-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-m-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-m-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-m-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-m-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-m-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-m-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1200px){.next-col-l-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-l-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-l-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-l-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-l-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-l-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-l-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-l-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-l-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-l-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-l-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-l-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-l-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-l-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-l-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-l-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-l-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-l-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-l-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-l-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-l-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-l-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-l-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-l-24{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1500px){.next-col-xl-1{flex:0 0 4.16667%;width:4.16667%;max-width:4.16667%}.next-col-xl-2{flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}.next-col-xl-3{flex:0 0 12.5%;width:12.5%;max-width:12.5%}.next-col-xl-4{flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}.next-col-xl-5{flex:0 0 20.83333%;width:20.83333%;max-width:20.83333%}.next-col-xl-6{flex:0 0 25%;width:25%;max-width:25%}.next-col-xl-7{flex:0 0 29.16667%;width:29.16667%;max-width:29.16667%}.next-col-xl-8{flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}.next-col-xl-9{flex:0 0 37.5%;width:37.5%;max-width:37.5%}.next-col-xl-10{flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}.next-col-xl-11{flex:0 0 45.83333%;width:45.83333%;max-width:45.83333%}.next-col-xl-12{flex:0 0 50%;width:50%;max-width:50%}.next-col-xl-13{flex:0 0 54.16667%;width:54.16667%;max-width:54.16667%}.next-col-xl-14{flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}.next-col-xl-15{flex:0 0 62.5%;width:62.5%;max-width:62.5%}.next-col-xl-16{flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}.next-col-xl-17{flex:0 0 70.83333%;width:70.83333%;max-width:70.83333%}.next-col-xl-18{flex:0 0 75%;width:75%;max-width:75%}.next-col-xl-19{flex:0 0 79.16667%;width:79.16667%;max-width:79.16667%}.next-col-xl-20{flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}.next-col-xl-21{flex:0 0 87.5%;width:87.5%;max-width:87.5%}.next-col-xl-22{flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}.next-col-xl-23{flex:0 0 95.83333%;width:95.83333%;max-width:95.83333%}.next-col-xl-24{flex:0 0 100%;width:100%;max-width:100%}}.next-col-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-5p5{flex:0 0 100%;width:100%;max-width:100%}@media (min-width:320px){.next-col-xxs-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-xxs-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-xxs-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-xxs-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-xxs-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:480px){.next-col-xs-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-xs-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-xs-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-xs-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-xs-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:720px){.next-col-s-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-s-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-s-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-s-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-s-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:990px){.next-col-m-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-m-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-m-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-m-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-m-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1200px){.next-col-l-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-l-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-l-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-l-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-l-5p5{flex:0 0 100%;width:100%;max-width:100%}}@media (min-width:1500px){.next-col-xl-1p5{flex:0 0 20%;width:20%;max-width:20%}.next-col-xl-2p5{flex:0 0 40%;width:40%;max-width:40%}.next-col-xl-3p5{flex:0 0 60%;width:60%;max-width:60%}.next-col-xl-4p5{flex:0 0 80%;width:80%;max-width:80%}.next-col-xl-5p5{flex:0 0 100%;width:100%;max-width:100%}}.next-col-fixed-1{flex:0 0 20px;width:20px;max-width:20px}.next-col-fixed-2{flex:0 0 40px;width:40px;max-width:40px}.next-col-fixed-3{flex:0 0 60px;width:60px;max-width:60px}.next-col-fixed-4{flex:0 0 80px;width:80px;max-width:80px}.next-col-fixed-5{flex:0 0 100px;width:100px;max-width:100px}.next-col-fixed-6{flex:0 0 120px;width:120px;max-width:120px}.next-col-fixed-7{flex:0 0 140px;width:140px;max-width:140px}.next-col-fixed-8{flex:0 0 160px;width:160px;max-width:160px}.next-col-fixed-9{flex:0 0 180px;width:180px;max-width:180px}.next-col-fixed-10{flex:0 0 200px;width:200px;max-width:200px}.next-col-fixed-11{flex:0 0 220px;width:220px;max-width:220px}.next-col-fixed-12{flex:0 0 240px;width:240px;max-width:240px}.next-col-fixed-13{flex:0 0 260px;width:260px;max-width:260px}.next-col-fixed-14{flex:0 0 280px;width:280px;max-width:280px}.next-col-fixed-15{flex:0 0 300px;width:300px;max-width:300px}.next-col-fixed-16{flex:0 0 320px;width:320px;max-width:320px}.next-col-fixed-17{flex:0 0 340px;width:340px;max-width:340px}.next-col-fixed-18{flex:0 0 360px;width:360px;max-width:360px}.next-col-fixed-19{flex:0 0 380px;width:380px;max-width:380px}.next-col-fixed-20{flex:0 0 400px;width:400px;max-width:400px}.next-col-fixed-21{flex:0 0 420px;width:420px;max-width:420px}.next-col-fixed-22{flex:0 0 440px;width:440px;max-width:440px}.next-col-fixed-23{flex:0 0 460px;width:460px;max-width:460px}.next-col-fixed-24{flex:0 0 480px;width:480px;max-width:480px}.next-col-fixed-25{flex:0 0 500px;width:500px;max-width:500px}.next-col-fixed-26{flex:0 0 520px;width:520px;max-width:520px}.next-col-fixed-27{flex:0 0 540px;width:540px;max-width:540px}.next-col-fixed-28{flex:0 0 560px;width:560px;max-width:560px}.next-col-fixed-29{flex:0 0 580px;width:580px;max-width:580px}.next-col-fixed-30{flex:0 0 600px;width:600px;max-width:600px}.next-col-offset-1{margin-left:4.16667%}.next-col-offset-2{margin-left:8.33333%}.next-col-offset-3{margin-left:12.5%}.next-col-offset-4{margin-left:16.66667%}.next-col-offset-5{margin-left:20.83333%}.next-col-offset-6{margin-left:25%}.next-col-offset-7{margin-left:29.16667%}.next-col-offset-8{margin-left:33.33333%}.next-col-offset-9{margin-left:37.5%}.next-col-offset-10{margin-left:41.66667%}.next-col-offset-11{margin-left:45.83333%}.next-col-offset-12{margin-left:50%}.next-col-offset-13{margin-left:54.16667%}.next-col-offset-14{margin-left:58.33333%}.next-col-offset-15{margin-left:62.5%}.next-col-offset-16{margin-left:66.66667%}.next-col-offset-17{margin-left:70.83333%}.next-col-offset-18{margin-left:75%}.next-col-offset-19{margin-left:79.16667%}.next-col-offset-20{margin-left:83.33333%}.next-col-offset-21{margin-left:87.5%}.next-col-offset-22{margin-left:91.66667%}.next-col-offset-23{margin-left:95.83333%}.next-col-offset-24{margin-left:100%}@media (min-width:320px){.next-col-xxs-offset-1{margin-left:4.16667%}.next-col-xxs-offset-2{margin-left:8.33333%}.next-col-xxs-offset-3{margin-left:12.5%}.next-col-xxs-offset-4{margin-left:16.66667%}.next-col-xxs-offset-5{margin-left:20.83333%}.next-col-xxs-offset-6{margin-left:25%}.next-col-xxs-offset-7{margin-left:29.16667%}.next-col-xxs-offset-8{margin-left:33.33333%}.next-col-xxs-offset-9{margin-left:37.5%}.next-col-xxs-offset-10{margin-left:41.66667%}.next-col-xxs-offset-11{margin-left:45.83333%}.next-col-xxs-offset-12{margin-left:50%}.next-col-xxs-offset-13{margin-left:54.16667%}.next-col-xxs-offset-14{margin-left:58.33333%}.next-col-xxs-offset-15{margin-left:62.5%}.next-col-xxs-offset-16{margin-left:66.66667%}.next-col-xxs-offset-17{margin-left:70.83333%}.next-col-xxs-offset-18{margin-left:75%}.next-col-xxs-offset-19{margin-left:79.16667%}.next-col-xxs-offset-20{margin-left:83.33333%}.next-col-xxs-offset-21{margin-left:87.5%}.next-col-xxs-offset-22{margin-left:91.66667%}.next-col-xxs-offset-23{margin-left:95.83333%}.next-col-xxs-offset-24{margin-left:100%}}@media (min-width:480px){.next-col-xs-offset-1{margin-left:4.16667%}.next-col-xs-offset-2{margin-left:8.33333%}.next-col-xs-offset-3{margin-left:12.5%}.next-col-xs-offset-4{margin-left:16.66667%}.next-col-xs-offset-5{margin-left:20.83333%}.next-col-xs-offset-6{margin-left:25%}.next-col-xs-offset-7{margin-left:29.16667%}.next-col-xs-offset-8{margin-left:33.33333%}.next-col-xs-offset-9{margin-left:37.5%}.next-col-xs-offset-10{margin-left:41.66667%}.next-col-xs-offset-11{margin-left:45.83333%}.next-col-xs-offset-12{margin-left:50%}.next-col-xs-offset-13{margin-left:54.16667%}.next-col-xs-offset-14{margin-left:58.33333%}.next-col-xs-offset-15{margin-left:62.5%}.next-col-xs-offset-16{margin-left:66.66667%}.next-col-xs-offset-17{margin-left:70.83333%}.next-col-xs-offset-18{margin-left:75%}.next-col-xs-offset-19{margin-left:79.16667%}.next-col-xs-offset-20{margin-left:83.33333%}.next-col-xs-offset-21{margin-left:87.5%}.next-col-xs-offset-22{margin-left:91.66667%}.next-col-xs-offset-23{margin-left:95.83333%}.next-col-xs-offset-24{margin-left:100%}}@media (min-width:720px){.next-col-s-offset-1{margin-left:4.16667%}.next-col-s-offset-2{margin-left:8.33333%}.next-col-s-offset-3{margin-left:12.5%}.next-col-s-offset-4{margin-left:16.66667%}.next-col-s-offset-5{margin-left:20.83333%}.next-col-s-offset-6{margin-left:25%}.next-col-s-offset-7{margin-left:29.16667%}.next-col-s-offset-8{margin-left:33.33333%}.next-col-s-offset-9{margin-left:37.5%}.next-col-s-offset-10{margin-left:41.66667%}.next-col-s-offset-11{margin-left:45.83333%}.next-col-s-offset-12{margin-left:50%}.next-col-s-offset-13{margin-left:54.16667%}.next-col-s-offset-14{margin-left:58.33333%}.next-col-s-offset-15{margin-left:62.5%}.next-col-s-offset-16{margin-left:66.66667%}.next-col-s-offset-17{margin-left:70.83333%}.next-col-s-offset-18{margin-left:75%}.next-col-s-offset-19{margin-left:79.16667%}.next-col-s-offset-20{margin-left:83.33333%}.next-col-s-offset-21{margin-left:87.5%}.next-col-s-offset-22{margin-left:91.66667%}.next-col-s-offset-23{margin-left:95.83333%}.next-col-s-offset-24{margin-left:100%}}@media (min-width:990px){.next-col-m-offset-1{margin-left:4.16667%}.next-col-m-offset-2{margin-left:8.33333%}.next-col-m-offset-3{margin-left:12.5%}.next-col-m-offset-4{margin-left:16.66667%}.next-col-m-offset-5{margin-left:20.83333%}.next-col-m-offset-6{margin-left:25%}.next-col-m-offset-7{margin-left:29.16667%}.next-col-m-offset-8{margin-left:33.33333%}.next-col-m-offset-9{margin-left:37.5%}.next-col-m-offset-10{margin-left:41.66667%}.next-col-m-offset-11{margin-left:45.83333%}.next-col-m-offset-12{margin-left:50%}.next-col-m-offset-13{margin-left:54.16667%}.next-col-m-offset-14{margin-left:58.33333%}.next-col-m-offset-15{margin-left:62.5%}.next-col-m-offset-16{margin-left:66.66667%}.next-col-m-offset-17{margin-left:70.83333%}.next-col-m-offset-18{margin-left:75%}.next-col-m-offset-19{margin-left:79.16667%}.next-col-m-offset-20{margin-left:83.33333%}.next-col-m-offset-21{margin-left:87.5%}.next-col-m-offset-22{margin-left:91.66667%}.next-col-m-offset-23{margin-left:95.83333%}.next-col-m-offset-24{margin-left:100%}}@media (min-width:1200px){.next-col-l-offset-1{margin-left:4.16667%}.next-col-l-offset-2{margin-left:8.33333%}.next-col-l-offset-3{margin-left:12.5%}.next-col-l-offset-4{margin-left:16.66667%}.next-col-l-offset-5{margin-left:20.83333%}.next-col-l-offset-6{margin-left:25%}.next-col-l-offset-7{margin-left:29.16667%}.next-col-l-offset-8{margin-left:33.33333%}.next-col-l-offset-9{margin-left:37.5%}.next-col-l-offset-10{margin-left:41.66667%}.next-col-l-offset-11{margin-left:45.83333%}.next-col-l-offset-12{margin-left:50%}.next-col-l-offset-13{margin-left:54.16667%}.next-col-l-offset-14{margin-left:58.33333%}.next-col-l-offset-15{margin-left:62.5%}.next-col-l-offset-16{margin-left:66.66667%}.next-col-l-offset-17{margin-left:70.83333%}.next-col-l-offset-18{margin-left:75%}.next-col-l-offset-19{margin-left:79.16667%}.next-col-l-offset-20{margin-left:83.33333%}.next-col-l-offset-21{margin-left:87.5%}.next-col-l-offset-22{margin-left:91.66667%}.next-col-l-offset-23{margin-left:95.83333%}.next-col-l-offset-24{margin-left:100%}}@media (min-width:1500px){.next-col-xl-offset-1{margin-left:4.16667%}.next-col-xl-offset-2{margin-left:8.33333%}.next-col-xl-offset-3{margin-left:12.5%}.next-col-xl-offset-4{margin-left:16.66667%}.next-col-xl-offset-5{margin-left:20.83333%}.next-col-xl-offset-6{margin-left:25%}.next-col-xl-offset-7{margin-left:29.16667%}.next-col-xl-offset-8{margin-left:33.33333%}.next-col-xl-offset-9{margin-left:37.5%}.next-col-xl-offset-10{margin-left:41.66667%}.next-col-xl-offset-11{margin-left:45.83333%}.next-col-xl-offset-12{margin-left:50%}.next-col-xl-offset-13{margin-left:54.16667%}.next-col-xl-offset-14{margin-left:58.33333%}.next-col-xl-offset-15{margin-left:62.5%}.next-col-xl-offset-16{margin-left:66.66667%}.next-col-xl-offset-17{margin-left:70.83333%}.next-col-xl-offset-18{margin-left:75%}.next-col-xl-offset-19{margin-left:79.16667%}.next-col-xl-offset-20{margin-left:83.33333%}.next-col-xl-offset-21{margin-left:87.5%}.next-col-xl-offset-22{margin-left:91.66667%}.next-col-xl-offset-23{margin-left:95.83333%}.next-col-xl-offset-24{margin-left:100%}}.next-col-offset-fixed-1{margin-left:20px}.next-col-offset-fixed-2{margin-left:40px}.next-col-offset-fixed-3{margin-left:60px}.next-col-offset-fixed-4{margin-left:80px}.next-col-offset-fixed-5{margin-left:100px}.next-col-offset-fixed-6{margin-left:120px}.next-col-offset-fixed-7{margin-left:140px}.next-col-offset-fixed-8{margin-left:160px}.next-col-offset-fixed-9{margin-left:180px}.next-col-offset-fixed-10{margin-left:200px}.next-col-offset-fixed-11{margin-left:220px}.next-col-offset-fixed-12{margin-left:240px}.next-col-offset-fixed-13{margin-left:260px}.next-col-offset-fixed-14{margin-left:280px}.next-col-offset-fixed-15{margin-left:300px}.next-col-offset-fixed-16{margin-left:320px}.next-col-offset-fixed-17{margin-left:340px}.next-col-offset-fixed-18{margin-left:360px}.next-col-offset-fixed-19{margin-left:380px}.next-col-offset-fixed-20{margin-left:400px}.next-col-offset-fixed-21{margin-left:420px}.next-col-offset-fixed-22{margin-left:440px}.next-col-offset-fixed-23{margin-left:460px}.next-col-offset-fixed-24{margin-left:480px}.next-col-offset-fixed-25{margin-left:500px}.next-col-offset-fixed-26{margin-left:520px}.next-col-offset-fixed-27{margin-left:540px}.next-col-offset-fixed-28{margin-left:560px}.next-col-offset-fixed-29{margin-left:580px}.next-col-offset-fixed-30{margin-left:600px}.next-col-offset-fixed-xxs-1{margin-left:20px}.next-col-offset-fixed-xxs-2{margin-left:40px}.next-col-offset-fixed-xxs-3{margin-left:60px}.next-col-offset-fixed-xxs-4{margin-left:80px}.next-col-offset-fixed-xxs-5{margin-left:100px}.next-col-offset-fixed-xxs-6{margin-left:120px}.next-col-offset-fixed-xxs-7{margin-left:140px}.next-col-offset-fixed-xxs-8{margin-left:160px}.next-col-offset-fixed-xxs-9{margin-left:180px}.next-col-offset-fixed-xxs-10{margin-left:200px}.next-col-offset-fixed-xxs-11{margin-left:220px}.next-col-offset-fixed-xxs-12{margin-left:240px}.next-col-offset-fixed-xxs-13{margin-left:260px}.next-col-offset-fixed-xxs-14{margin-left:280px}.next-col-offset-fixed-xxs-15{margin-left:300px}.next-col-offset-fixed-xxs-16{margin-left:320px}.next-col-offset-fixed-xxs-17{margin-left:340px}.next-col-offset-fixed-xxs-18{margin-left:360px}.next-col-offset-fixed-xxs-19{margin-left:380px}.next-col-offset-fixed-xxs-20{margin-left:400px}.next-col-offset-fixed-xxs-21{margin-left:420px}.next-col-offset-fixed-xxs-22{margin-left:440px}.next-col-offset-fixed-xxs-23{margin-left:460px}.next-col-offset-fixed-xxs-24{margin-left:480px}.next-col-offset-fixed-xxs-25{margin-left:500px}.next-col-offset-fixed-xxs-26{margin-left:520px}.next-col-offset-fixed-xxs-27{margin-left:540px}.next-col-offset-fixed-xxs-28{margin-left:560px}.next-col-offset-fixed-xxs-29{margin-left:580px}.next-col-offset-fixed-xxs-30{margin-left:600px}.next-col-offset-fixed-xs-1{margin-left:20px}.next-col-offset-fixed-xs-2{margin-left:40px}.next-col-offset-fixed-xs-3{margin-left:60px}.next-col-offset-fixed-xs-4{margin-left:80px}.next-col-offset-fixed-xs-5{margin-left:100px}.next-col-offset-fixed-xs-6{margin-left:120px}.next-col-offset-fixed-xs-7{margin-left:140px}.next-col-offset-fixed-xs-8{margin-left:160px}.next-col-offset-fixed-xs-9{margin-left:180px}.next-col-offset-fixed-xs-10{margin-left:200px}.next-col-offset-fixed-xs-11{margin-left:220px}.next-col-offset-fixed-xs-12{margin-left:240px}.next-col-offset-fixed-xs-13{margin-left:260px}.next-col-offset-fixed-xs-14{margin-left:280px}.next-col-offset-fixed-xs-15{margin-left:300px}.next-col-offset-fixed-xs-16{margin-left:320px}.next-col-offset-fixed-xs-17{margin-left:340px}.next-col-offset-fixed-xs-18{margin-left:360px}.next-col-offset-fixed-xs-19{margin-left:380px}.next-col-offset-fixed-xs-20{margin-left:400px}.next-col-offset-fixed-xs-21{margin-left:420px}.next-col-offset-fixed-xs-22{margin-left:440px}.next-col-offset-fixed-xs-23{margin-left:460px}.next-col-offset-fixed-xs-24{margin-left:480px}.next-col-offset-fixed-xs-25{margin-left:500px}.next-col-offset-fixed-xs-26{margin-left:520px}.next-col-offset-fixed-xs-27{margin-left:540px}.next-col-offset-fixed-xs-28{margin-left:560px}.next-col-offset-fixed-xs-29{margin-left:580px}.next-col-offset-fixed-xs-30{margin-left:600px}.next-col-offset-fixed-s-1{margin-left:20px}.next-col-offset-fixed-s-2{margin-left:40px}.next-col-offset-fixed-s-3{margin-left:60px}.next-col-offset-fixed-s-4{margin-left:80px}.next-col-offset-fixed-s-5{margin-left:100px}.next-col-offset-fixed-s-6{margin-left:120px}.next-col-offset-fixed-s-7{margin-left:140px}.next-col-offset-fixed-s-8{margin-left:160px}.next-col-offset-fixed-s-9{margin-left:180px}.next-col-offset-fixed-s-10{margin-left:200px}.next-col-offset-fixed-s-11{margin-left:220px}.next-col-offset-fixed-s-12{margin-left:240px}.next-col-offset-fixed-s-13{margin-left:260px}.next-col-offset-fixed-s-14{margin-left:280px}.next-col-offset-fixed-s-15{margin-left:300px}.next-col-offset-fixed-s-16{margin-left:320px}.next-col-offset-fixed-s-17{margin-left:340px}.next-col-offset-fixed-s-18{margin-left:360px}.next-col-offset-fixed-s-19{margin-left:380px}.next-col-offset-fixed-s-20{margin-left:400px}.next-col-offset-fixed-s-21{margin-left:420px}.next-col-offset-fixed-s-22{margin-left:440px}.next-col-offset-fixed-s-23{margin-left:460px}.next-col-offset-fixed-s-24{margin-left:480px}.next-col-offset-fixed-s-25{margin-left:500px}.next-col-offset-fixed-s-26{margin-left:520px}.next-col-offset-fixed-s-27{margin-left:540px}.next-col-offset-fixed-s-28{margin-left:560px}.next-col-offset-fixed-s-29{margin-left:580px}.next-col-offset-fixed-s-30{margin-left:600px}.next-col-offset-fixed-m-1{margin-left:20px}.next-col-offset-fixed-m-2{margin-left:40px}.next-col-offset-fixed-m-3{margin-left:60px}.next-col-offset-fixed-m-4{margin-left:80px}.next-col-offset-fixed-m-5{margin-left:100px}.next-col-offset-fixed-m-6{margin-left:120px}.next-col-offset-fixed-m-7{margin-left:140px}.next-col-offset-fixed-m-8{margin-left:160px}.next-col-offset-fixed-m-9{margin-left:180px}.next-col-offset-fixed-m-10{margin-left:200px}.next-col-offset-fixed-m-11{margin-left:220px}.next-col-offset-fixed-m-12{margin-left:240px}.next-col-offset-fixed-m-13{margin-left:260px}.next-col-offset-fixed-m-14{margin-left:280px}.next-col-offset-fixed-m-15{margin-left:300px}.next-col-offset-fixed-m-16{margin-left:320px}.next-col-offset-fixed-m-17{margin-left:340px}.next-col-offset-fixed-m-18{margin-left:360px}.next-col-offset-fixed-m-19{margin-left:380px}.next-col-offset-fixed-m-20{margin-left:400px}.next-col-offset-fixed-m-21{margin-left:420px}.next-col-offset-fixed-m-22{margin-left:440px}.next-col-offset-fixed-m-23{margin-left:460px}.next-col-offset-fixed-m-24{margin-left:480px}.next-col-offset-fixed-m-25{margin-left:500px}.next-col-offset-fixed-m-26{margin-left:520px}.next-col-offset-fixed-m-27{margin-left:540px}.next-col-offset-fixed-m-28{margin-left:560px}.next-col-offset-fixed-m-29{margin-left:580px}.next-col-offset-fixed-m-30{margin-left:600px}.next-col-offset-fixed-l-1{margin-left:20px}.next-col-offset-fixed-l-2{margin-left:40px}.next-col-offset-fixed-l-3{margin-left:60px}.next-col-offset-fixed-l-4{margin-left:80px}.next-col-offset-fixed-l-5{margin-left:100px}.next-col-offset-fixed-l-6{margin-left:120px}.next-col-offset-fixed-l-7{margin-left:140px}.next-col-offset-fixed-l-8{margin-left:160px}.next-col-offset-fixed-l-9{margin-left:180px}.next-col-offset-fixed-l-10{margin-left:200px}.next-col-offset-fixed-l-11{margin-left:220px}.next-col-offset-fixed-l-12{margin-left:240px}.next-col-offset-fixed-l-13{margin-left:260px}.next-col-offset-fixed-l-14{margin-left:280px}.next-col-offset-fixed-l-15{margin-left:300px}.next-col-offset-fixed-l-16{margin-left:320px}.next-col-offset-fixed-l-17{margin-left:340px}.next-col-offset-fixed-l-18{margin-left:360px}.next-col-offset-fixed-l-19{margin-left:380px}.next-col-offset-fixed-l-20{margin-left:400px}.next-col-offset-fixed-l-21{margin-left:420px}.next-col-offset-fixed-l-22{margin-left:440px}.next-col-offset-fixed-l-23{margin-left:460px}.next-col-offset-fixed-l-24{margin-left:480px}.next-col-offset-fixed-l-25{margin-left:500px}.next-col-offset-fixed-l-26{margin-left:520px}.next-col-offset-fixed-l-27{margin-left:540px}.next-col-offset-fixed-l-28{margin-left:560px}.next-col-offset-fixed-l-29{margin-left:580px}.next-col-offset-fixed-l-30{margin-left:600px}.next-col-offset-fixed-xl-1{margin-left:20px}.next-col-offset-fixed-xl-2{margin-left:40px}.next-col-offset-fixed-xl-3{margin-left:60px}.next-col-offset-fixed-xl-4{margin-left:80px}.next-col-offset-fixed-xl-5{margin-left:100px}.next-col-offset-fixed-xl-6{margin-left:120px}.next-col-offset-fixed-xl-7{margin-left:140px}.next-col-offset-fixed-xl-8{margin-left:160px}.next-col-offset-fixed-xl-9{margin-left:180px}.next-col-offset-fixed-xl-10{margin-left:200px}.next-col-offset-fixed-xl-11{margin-left:220px}.next-col-offset-fixed-xl-12{margin-left:240px}.next-col-offset-fixed-xl-13{margin-left:260px}.next-col-offset-fixed-xl-14{margin-left:280px}.next-col-offset-fixed-xl-15{margin-left:300px}.next-col-offset-fixed-xl-16{margin-left:320px}.next-col-offset-fixed-xl-17{margin-left:340px}.next-col-offset-fixed-xl-18{margin-left:360px}.next-col-offset-fixed-xl-19{margin-left:380px}.next-col-offset-fixed-xl-20{margin-left:400px}.next-col-offset-fixed-xl-21{margin-left:420px}.next-col-offset-fixed-xl-22{margin-left:440px}.next-col-offset-fixed-xl-23{margin-left:460px}.next-col-offset-fixed-xl-24{margin-left:480px}.next-col-offset-fixed-xl-25{margin-left:500px}.next-col-offset-fixed-xl-26{margin-left:520px}.next-col-offset-fixed-xl-27{margin-left:540px}.next-col-offset-fixed-xl-28{margin-left:560px}.next-col-offset-fixed-xl-29{margin-left:580px}.next-col-offset-fixed-xl-30{margin-left:600px}.next-col.next-col-hidden{display:none}@media (min-width:320px) and (max-width:479px){.next-col.next-col-xxs-hidden{display:none}}@media (min-width:480px) and (max-width:719px){.next-col.next-col-xs-hidden{display:none}}@media (min-width:720px) and (max-width:989px){.next-col.next-col-s-hidden{display:none}}@media (min-width:990px) and (max-width:1199px){.next-col.next-col-m-hidden{display:none}}@media (min-width:1200px) and (max-width:1499px){.next-col.next-col-l-hidden{display:none}}@media (min-width:1500px){.next-col.next-col-xl-hidden{display:none}}.next-row.next-row-hidden{display:none}@media (min-width:320px) and (max-width:479px){.next-row.next-row-xxs-hidden{display:none}}@media (min-width:480px) and (max-width:719px){.next-row.next-row-xs-hidden{display:none}}@media (min-width:720px) and (max-width:989px){.next-row.next-row-s-hidden{display:none}}@media (min-width:990px) and (max-width:1199px){.next-row.next-row-m-hidden{display:none}}@media (min-width:1200px) and (max-width:1499px){.next-row.next-row-l-hidden{display:none}}@media (min-width:1500px){.next-row.next-row-xl-hidden{display:none}}.next-col-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}@media (min-width:320px){.next-col-xxs-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-xxs-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-xxs-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-xxs-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-xxs-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-xxs-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-xxs-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-xxs-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-xxs-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-xxs-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-xxs-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-xxs-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-xxs-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-xxs-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-xxs-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-xxs-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-xxs-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-xxs-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-xxs-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-xxs-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-xxs-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-xxs-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-xxs-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-xxs-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:480px){.next-col-xs-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-xs-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-xs-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-xs-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-xs-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-xs-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-xs-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-xs-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-xs-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-xs-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-xs-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-xs-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-xs-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-xs-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-xs-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-xs-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-xs-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-xs-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-xs-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-xs-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-xs-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-xs-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-xs-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-xs-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:720px){.next-col-s-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-s-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-s-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-s-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-s-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-s-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-s-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-s-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-s-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-s-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-s-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-s-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-s-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-s-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-s-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-s-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-s-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-s-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-s-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-s-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-s-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-s-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-s-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-s-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:990px){.next-col-m-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-m-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-m-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-m-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-m-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-m-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-m-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-m-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-m-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-m-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-m-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-m-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-m-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-m-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-m-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-m-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-m-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-m-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-m-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-m-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-m-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-m-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-m-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-m-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:1200px){.next-col-l-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-l-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-l-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-l-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-l-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-l-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-l-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-l-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-l-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-l-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-l-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-l-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-l-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-l-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-l-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-l-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-l-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-l-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-l-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-l-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-l-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-l-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-l-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-l-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}@media (min-width:1500px){.next-col-xl-offset-1[dir=rtl]{margin-right:4.16667%;margin-left:auto}.next-col-xl-offset-2[dir=rtl]{margin-right:8.33333%;margin-left:auto}.next-col-xl-offset-3[dir=rtl]{margin-right:12.5%;margin-left:auto}.next-col-xl-offset-4[dir=rtl]{margin-right:16.66667%;margin-left:auto}.next-col-xl-offset-5[dir=rtl]{margin-right:20.83333%;margin-left:auto}.next-col-xl-offset-6[dir=rtl]{margin-right:25%;margin-left:auto}.next-col-xl-offset-7[dir=rtl]{margin-right:29.16667%;margin-left:auto}.next-col-xl-offset-8[dir=rtl]{margin-right:33.33333%;margin-left:auto}.next-col-xl-offset-9[dir=rtl]{margin-right:37.5%;margin-left:auto}.next-col-xl-offset-10[dir=rtl]{margin-right:41.66667%;margin-left:auto}.next-col-xl-offset-11[dir=rtl]{margin-right:45.83333%;margin-left:auto}.next-col-xl-offset-12[dir=rtl]{margin-right:50%;margin-left:auto}.next-col-xl-offset-13[dir=rtl]{margin-right:54.16667%;margin-left:auto}.next-col-xl-offset-14[dir=rtl]{margin-right:58.33333%;margin-left:auto}.next-col-xl-offset-15[dir=rtl]{margin-right:62.5%;margin-left:auto}.next-col-xl-offset-16[dir=rtl]{margin-right:66.66667%;margin-left:auto}.next-col-xl-offset-17[dir=rtl]{margin-right:70.83333%;margin-left:auto}.next-col-xl-offset-18[dir=rtl]{margin-right:75%;margin-left:auto}.next-col-xl-offset-19[dir=rtl]{margin-right:79.16667%;margin-left:auto}.next-col-xl-offset-20[dir=rtl]{margin-right:83.33333%;margin-left:auto}.next-col-xl-offset-21[dir=rtl]{margin-right:87.5%;margin-left:auto}.next-col-xl-offset-22[dir=rtl]{margin-right:91.66667%;margin-left:auto}.next-col-xl-offset-23[dir=rtl]{margin-right:95.83333%;margin-left:auto}.next-col-xl-offset-24[dir=rtl]{margin-right:100%;margin-left:auto}}.next-col-offset-fixed-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-xxs-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-xxs-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-xxs-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-xxs-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-xxs-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-xxs-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-xxs-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-xxs-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-xxs-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-xxs-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-xxs-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-xxs-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-xxs-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-xxs-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-xxs-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-xxs-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-xxs-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-xxs-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-xxs-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-xxs-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-xxs-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-xxs-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-xxs-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-xxs-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-xxs-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-xxs-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-xxs-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-xxs-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-xxs-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-xxs-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-xs-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-xs-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-xs-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-xs-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-xs-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-xs-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-xs-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-xs-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-xs-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-xs-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-xs-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-xs-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-xs-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-xs-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-xs-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-xs-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-xs-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-xs-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-xs-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-xs-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-xs-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-xs-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-xs-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-xs-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-xs-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-xs-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-xs-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-xs-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-xs-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-xs-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-s-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-s-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-s-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-s-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-s-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-s-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-s-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-s-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-s-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-s-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-s-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-s-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-s-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-s-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-s-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-s-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-s-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-s-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-s-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-s-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-s-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-s-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-s-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-s-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-s-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-s-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-s-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-s-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-s-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-s-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-m-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-m-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-m-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-m-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-m-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-m-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-m-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-m-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-m-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-m-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-m-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-m-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-m-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-m-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-m-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-m-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-m-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-m-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-m-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-m-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-m-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-m-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-m-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-m-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-m-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-m-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-m-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-m-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-m-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-m-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-l-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-l-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-l-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-l-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-l-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-l-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-l-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-l-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-l-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-l-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-l-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-l-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-l-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-l-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-l-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-l-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-l-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-l-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-l-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-l-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-l-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-l-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-l-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-l-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-l-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-l-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-l-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-l-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-l-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-l-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-col-offset-fixed-xl-1[dir=rtl]{margin-right:20px;margin-left:auto}.next-col-offset-fixed-xl-2[dir=rtl]{margin-right:40px;margin-left:auto}.next-col-offset-fixed-xl-3[dir=rtl]{margin-right:60px;margin-left:auto}.next-col-offset-fixed-xl-4[dir=rtl]{margin-right:80px;margin-left:auto}.next-col-offset-fixed-xl-5[dir=rtl]{margin-right:100px;margin-left:auto}.next-col-offset-fixed-xl-6[dir=rtl]{margin-right:120px;margin-left:auto}.next-col-offset-fixed-xl-7[dir=rtl]{margin-right:140px;margin-left:auto}.next-col-offset-fixed-xl-8[dir=rtl]{margin-right:160px;margin-left:auto}.next-col-offset-fixed-xl-9[dir=rtl]{margin-right:180px;margin-left:auto}.next-col-offset-fixed-xl-10[dir=rtl]{margin-right:200px;margin-left:auto}.next-col-offset-fixed-xl-11[dir=rtl]{margin-right:220px;margin-left:auto}.next-col-offset-fixed-xl-12[dir=rtl]{margin-right:240px;margin-left:auto}.next-col-offset-fixed-xl-13[dir=rtl]{margin-right:260px;margin-left:auto}.next-col-offset-fixed-xl-14[dir=rtl]{margin-right:280px;margin-left:auto}.next-col-offset-fixed-xl-15[dir=rtl]{margin-right:300px;margin-left:auto}.next-col-offset-fixed-xl-16[dir=rtl]{margin-right:320px;margin-left:auto}.next-col-offset-fixed-xl-17[dir=rtl]{margin-right:340px;margin-left:auto}.next-col-offset-fixed-xl-18[dir=rtl]{margin-right:360px;margin-left:auto}.next-col-offset-fixed-xl-19[dir=rtl]{margin-right:380px;margin-left:auto}.next-col-offset-fixed-xl-20[dir=rtl]{margin-right:400px;margin-left:auto}.next-col-offset-fixed-xl-21[dir=rtl]{margin-right:420px;margin-left:auto}.next-col-offset-fixed-xl-22[dir=rtl]{margin-right:440px;margin-left:auto}.next-col-offset-fixed-xl-23[dir=rtl]{margin-right:460px;margin-left:auto}.next-col-offset-fixed-xl-24[dir=rtl]{margin-right:480px;margin-left:auto}.next-col-offset-fixed-xl-25[dir=rtl]{margin-right:500px;margin-left:auto}.next-col-offset-fixed-xl-26[dir=rtl]{margin-right:520px;margin-left:auto}.next-col-offset-fixed-xl-27[dir=rtl]{margin-right:540px;margin-left:auto}.next-col-offset-fixed-xl-28[dir=rtl]{margin-right:560px;margin-left:auto}.next-col-offset-fixed-xl-29[dir=rtl]{margin-right:580px;margin-left:auto}.next-col-offset-fixed-xl-30[dir=rtl]{margin-right:600px;margin-left:auto}.next-responsive-grid{box-sizing:border-box;display:grid}.next-form,.next-form *,.next-form :after,.next-form :before,.next-responsive-grid *,.next-responsive-grid :after,.next-responsive-grid :before{box-sizing:border-box}.next-form-responsive-grid .next-form-item-control{flex:1}.next-form-responsive-grid .next-form-item{margin-bottom:0}.next-form-responsive-grid .next-form-item.next-left{display:flex}.next-form-responsive-grid.next-small .next-responsive-grid{gap:16px}.next-form-responsive-grid.next-small .next-form-item.next-left .next-form-item-label{line-height:1.4;margin-top:4px;margin-bottom:4px}.next-form-responsive-grid.next-medium .next-responsive-grid{gap:20px}.next-form-responsive-grid.next-medium .next-form-item.next-left .next-form-item-label{line-height:1.4;margin-top:8px;margin-bottom:8px}.next-form-responsive-grid.next-large .next-responsive-grid{gap:24px}.next-form-responsive-grid.next-large .next-form-item.next-left .next-form-item-label{line-height:1.4;margin-top:12px;margin-bottom:12px}.next-form-item{margin-bottom:16px}.next-form-item.has-error .next-form-item-help{color:#ff3000}.next-form-item.has-warning .next-form-item-help{color:#ff9300}.next-form-item .next-form-item-label,.next-form-item .next-form-text-align,.next-form-item p{line-height:28px}.next-form-item .next-form-text-align,.next-form-item p{margin:0}.next-form-item .next-checkbox-group,.next-form-item .next-checkbox-wrapper,.next-form-item .next-radio-group,.next-form-item .next-radio-wrapper,.next-form-item .next-rating{line-height:24px}.next-form-item .next-form-preview{font-size:12px;line-height:28px}.next-form-item .next-form-preview.next-input-textarea>p{text-align:justify;min-height:16.8px;line-height:1.4;margin-top:5.6px}.next-form-item .next-form-item-label{font-size:12px}.next-form-item.next-large{margin-bottom:20px}.next-form-item.next-large .next-form-item-label,.next-form-item.next-large .next-form-text-align,.next-form-item.next-large p{line-height:40px}.next-form-item.next-large .next-checkbox-group,.next-form-item.next-large .next-checkbox-wrapper,.next-form-item.next-large .next-radio-group,.next-form-item.next-large .next-radio-wrapper,.next-form-item.next-large .next-rating{line-height:39px}.next-form-item.next-large .next-form-preview{font-size:16px;line-height:40px}.next-form-item.next-large .next-form-preview.next-input-textarea>p{text-align:justify;min-height:22.4px;line-height:1.4;margin-top:8.8px}.next-form-item.next-large .next-switch{margin-top:7px}.next-form-item.next-large .next-form-item-label{font-size:16px}.next-form-item.next-small{margin-bottom:12px}.next-form-item.next-small .next-checkbox-group,.next-form-item.next-small .next-checkbox-wrapper,.next-form-item.next-small .next-form-item-label,.next-form-item.next-small .next-form-text-align,.next-form-item.next-small .next-radio-group,.next-form-item.next-small .next-radio-wrapper,.next-form-item.next-small .next-rating,.next-form-item.next-small p{line-height:20px}.next-form-item.next-small .next-form-preview{font-size:12px;line-height:20px}.next-form-item.next-small .next-form-preview.next-input-textarea>p{text-align:justify;min-height:16.8px;line-height:1.4;margin-top:1.6px}.next-form-item.next-small .next-form-item-label{font-size:12px}.next-form-item.next-top>.next-form-item-label{margin-bottom:2px}.next-form-item.next-inset .next-form-item-label{padding-right:0;padding-left:0;line-height:inherit}.next-form-item-control .next-form-text-align{margin:0}.next-form-item-control>.next-input,.next-form-item-control>.next-input-group,.next-form-item-fullwidth .next-form-item-control>.next-date-picker,.next-form-item-fullwidth .next-form-item-control>.next-input,.next-form-item-fullwidth .next-form-item-control>.next-input-group,.next-form-item-fullwidth .next-form-item-control>.next-month-picker,.next-form-item-fullwidth .next-form-item-control>.next-range-picker,.next-form-item-fullwidth .next-form-item-control>.next-select,.next-form-item-fullwidth .next-form-item-control>.next-time-picker,.next-form-item-fullwidth .next-form-item-control>.next-year-picker{width:100%}.next-form-item-label{display:inline-block;vertical-align:top;color:#666;text-align:right;padding-right:12px}.next-form-item-label label[required]:before{margin-right:4px;content:"*";color:#ff3000}.next-form-item-label.next-left{text-align:left}.next-form-item-label.next-left>label[required]:before{display:none}.next-form-item-label.next-left>label[required]:after{margin-left:4px;content:"*";color:#ff3000}.next-form-item-help{margin-top:4px;font-size:12px;line-height:1.5;color:#999}.next-form.next-inline .next-form-item{display:inline-block;vertical-align:top}.next-form.next-inline .next-form-item.next-left .next-form-item-control{display:inline-block;vertical-align:top;line-height:0}.next-form.next-inline .next-form-item:not(:last-child){margin-right:20px}.next-form.next-inline .next-form-item.next-large:not(:last-child){margin-right:24px}.next-form.next-inline .next-form-item.next-small:not(:last-child){margin-right:16px}@media screen and (min-width:0\0) and (min-resolution:0.001dpcm){.next-form-item.next-left>.next-form-item-label,.next-form.next-inline .next-form-item.next-left .next-form-item-control{display:table-cell}}.next-form[dir=rtl] .next-form-item-label{text-align:left;padding-left:12px;padding-right:0}.next-form[dir=rtl].next-inline .next-form-item:not(:last-child){margin-left:20px;margin-right:0}.next-form[dir=rtl].next-inline .next-form-item.next-large:not(:last-child){margin-left:24px;margin-right:0}.next-form[dir=rtl].next-inline .next-form-item.next-small:not(:last-child){margin-left:16px;margin-right:0}.filter-panel{text-align:right;padding:10px 0}.users-pagination{float:right;margin-top:20px}.header-container-primary{background:#252a2f}.header-container-normal{background-color:#fff;box-shadow:0 2px 10px 0 rgba(0,0,0,.08)}.header-container .header-body{width:100%;margin:0 auto;height:66px;line-height:66px}.header-container .header-body .logo{margin-left:40px;width:96px;vertical-align:sub}.header-container .header-body .header-menu{float:right}.header-container .header-body .header-menu .header-menu-toggle{display:none;width:19px;margin-right:40px;margin-top:18px;cursor:pointer}.header-container .header-body ul{padding:0;margin:0}.header-container .header-body li{display:inline-block;margin-right:40px}.header-container .header-body .menu-item{font-family:Avenir-Heavy;font-size:14px}.header-container .header-body .menu-item-primary a{color:#fff;opacity:.6;font-family:Avenir-Medium}.header-container .header-body .menu-item-primary-active a,.header-container .header-body .menu-item-primary:hover a{opacity:1}.header-container .header-body .menu-item-normal a{color:#333;opacity:.6;font-family:Avenir-Medium}.header-container .header-body .menu-item-normal-active a,.header-container .header-body .menu-item-normal:hover a{opacity:1}.header-container .header-body .language-switch{float:right;display:inline-block;box-sizing:border-box;width:24px;height:24px;line-height:20px;margin-top:21px;margin-right:40px;text-align:center;border-radius:2px;cursor:pointer;font-family:PingFangSC-Medium;font-size:14px;opacity:.6}.header-container .header-body .logout{float:right;color:#fff;opacity:.6;font-family:Avenir-Medium;margin-right:40px}.header-container .header-body .language-switch:hover{opacity:1}.header-container .header-body .language-switch-primary{border:1px solid #fff;color:#fff}.header-container .header-body .language-switch-normal{border:1px solid #333;color:#333}@media screen and (max-width:640px){.header-container .header-body .logo{margin-left:20px}.header-container .header-body .language-switch{margin-right:20px}.header-container .header-body .header-menu ul{display:none}.header-container .header-body .header-menu .header-menu-toggle{display:inline-block;margin-right:20px}.header-container .header-body .header-menu-open ul{background-color:#f8f8f8;display:inline-block;position:absolute;right:0;top:66px;z-index:100}.header-container .header-body .header-menu-open li{width:200px;display:list-item;padding-left:30px;list-style:none;line-height:40px;margin-right:0}.header-container .header-body .header-menu-open li a{color:#333;display:inline-block;width:100%}.header-container .header-body .header-menu-open li:hover{background:#2e3034}.header-container .header-body .header-menu-open li:hover a{color:#fff;opactiy:1}.header-container .header-body .header-menu-open .menu-item-normal-active,.header-container .header-body .header-menu-open .menu-item-primary-active{background:#2e3034}.header-container .header-body .header-menu-open .menu-item-normal-active a,.header-container .header-body .header-menu-open .menu-item-primary-active a{color:#fff;opactiy:1}}.bone{width:24px;height:2px;position:relative}.bone:before{left:0}.bone:after,.bone:before{position:absolute;content:"";width:6px;height:6px;border-radius:50%;top:-2px}.bone:after{right:0}.bone-dark,.bone-dark:after,.bone-dark:before{background-color:#1161f6}.bone-light,.bone-light:after,.bone-light:before{background-color:#fff;opacity:.8}.footer-container{background:#f8f8f8}.footer-container .footer-body{max-width:1280px;margin:0 auto;padding:40px 40px 0}@media screen and (max-width:640px){.footer-container .footer-body{padding-left:20px;padding-right:20px}}.footer-container .footer-body img{display:block;width:125px;height:26px;margin-bottom:40px}.footer-container .footer-body .cols-container .col{display:inline-block;box-sizing:border-box;vertical-align:top}.footer-container .footer-body .cols-container .col-12{width:50%;padding-right:125px}.footer-container .footer-body .cols-container .col-6{width:25%}.footer-container .footer-body .cols-container h3{font-family:Avenir-Heavy;font-size:18px;color:#333;line-height:18px;margin-bottom:20px}.footer-container .footer-body .cols-container p{font-family:Avenir-Medium;font-size:12px;color:#999;line-height:18px}.footer-container .footer-body .cols-container dl{font-family:Avenir-Heavy;line-height:18px}.footer-container .footer-body .cols-container dt{font-weight:700;font-size:18px;color:#333;margin-bottom:20px}.footer-container .footer-body .cols-container dd{padding:0;margin:0}.footer-container .footer-body .cols-container dd a{text-decoration:none;display:block;font-size:14px;color:#999;margin:10px 0}.footer-container .footer-body .cols-container dd a:hover{color:#2e3034}.footer-container .footer-body .copyright{margin-top:44px;border-top:1px solid #ccc;min-height:60px;line-height:20px;text-align:center;font-family:Avenir-Medium;font-size:12px;color:#999;display:flex;align-items:center}.footer-container .footer-body .copyright span{display:inline-block;margin:0 auto}@media screen and (max-width:640px){.footer-container .footer-body .cols-container .col{width:100%;text-align:center;padding:0}}.button{box-sizing:border-box;display:inline-block;height:48px;line-height:48px;min-width:140px;font-family:Avenir-Heavy;font-size:16px;color:#fff;text-align:center;border-radius:4px;text-decoration:none}.button-primary{background:#4190ff}.button-normal{background:transparent;border:1px solid #fff}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2:before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{color:#0366d6;text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom:1px solid #dfe2e5}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{clear:both}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{font-size:11px;border:1px solid #c6cbd1;border-bottom-color:#959da5;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eaecef}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body code{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.markdown-body pre code{display:block;overflow-x:auto;padding:.5em;background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-link,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute,.hljs-builtin-name{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212}.hljs-addition,.hljs-deletion{display:inline-block;width:100%}.hljs-deletion{background-color:#600}*{padding:0;margin:0}a{text-decoration:none}h1,h2,h3,h4,h5,h6{font-weight:400}.home-page .top-section{height:720px}.home-page .top-section .vertical-middle{width:100%}.home-page .top-section .product-logo{margin:0 auto}.home-page .top-section .button-area,.home-page .top-section .product-desc{text-align:center}.home-page .top-section .button-area .button:first-child{margin-right:20px}.home-page .top-section .version-note{text-align:center;margin:22px 0 10px}.home-page .top-section .version-note a{text-decoration:none;display:inline-block;font-family:Avenir-Heavy;font-size:14px;color:#fff;text-align:center;background:#46484b;border-radius:2px;line-height:24px;padding:0 6px;margin-right:10px}.home-page .top-section .release-date{font-family:Avenir-Medium;font-size:12px;color:#999;text-align:center}.home-page .function-section{max-width:832px;margin:0 auto;box-sizing:border-box;padding:82px 0}.home-page .function-section h3{font-family:Avenir-Heavy;font-size:36px;text-align:center;font-weight:400}.home-page .function-section .bone{margin:0 auto 45px}.home-page .function-section .func-item{margin-bottom:30px;position:relative}.home-page .function-section .func-item .col{display:inline-flex;align-items:center;vertical-align:middle;margin:0 auto;width:50%;max-width:750px;min-height:325px}.home-page .function-section .func-item .col img{width:325px}.home-page .function-section .func-item .col h4{font-weight:400;font-family:Avenir-Heavy;font-size:24px;color:#333;margin-bottom:20px}.home-page .function-section .func-item .col p{opacity:.8;font-family:Avenir-Medium;font-size:18px;color:#999;margin:0}.home-page .function-section .func-item .img{display:inline-block;text-align:center}@media screen and (max-width:830px){.home-page .function-section .func-item{text-align:center}.home-page .function-section .func-item .col{width:100%}.home-page .function-section .func-item .img{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);opacity:.1}}.home-page .feature-section{background:#2e3034}.home-page .feature-section .feature-section-body{max-width:1280px;margin:0 auto;position:relative;padding:80px 40px;color:#fff}.home-page .feature-section .feature-section-body h3{font-family:Avenir-Heavy;font-size:36px;text-align:center;margin:0;font-weight:400}.home-page .feature-section .feature-section-body .bone{margin:0 auto 45px}.home-page .feature-section .feature-section-body .feature-list{list-style:none;padding:0;margin:0}.home-page .feature-section .feature-section-body .feature-list .feature-list-item{vertical-align:top;display:inline-block;margin-bottom:48px;width:50%}.home-page .feature-section .feature-section-body .feature-list .feature-list-item ul{list-style:disc;padding-left:14px}.home-page .feature-section .feature-section-body .feature-list .feature-list-item ul li{font-family:Avenir-Medium;font-size:14px;color:#999}.home-page .feature-section .feature-section-body .feature-list .feature-list-item img{vertical-align:top;width:34px;margin-right:20px}.home-page .feature-section .feature-section-body .feature-list .feature-list-item div{display:inline-block;width:80%}.home-page .feature-section .feature-section-body .feature-list .feature-list-item div h4{font-family:Avenir-Heavy;font-size:20px;margin:5px 0 20px}.home-page .feature-section .feature-section-body .feature-list .feature-list-item div p{font-family:Avenir-Medium;font-size:14px;line-height:20px;color:#999}@media screen and (max-width:768px){.home-page .feature-section .feature-section-body .feature-list .feature-list-item{width:100%}}@media screen and (max-width:640px){.home-page .feature-section-body{padding-left:20px;padding-right:20px}}.product-nav-list li.selected a{background-color:#f4f6f8}.main-container{height:calc(100vh - 66px)}.main-container .left-panel,.main-container .right-panel{float:left;height:100%}.main-container .left-panel{width:180px;background-color:#eaedf1}.main-container .right-panel{width:calc(100% - 180px);padding:10px;overflow:scroll}.main-container .nav-title{margin:0;text-align:center;font-size:14px;font-weight:700;line-height:70px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background-color:#d9dee4}.main-container .nav-title span{margin-left:5px}.main-container .nav-menu{padding:0;background:transparent;border:0;line-height:40px}.main-container .nav-menu .first-menu>.next-menu-item-inner,.main-container .nav-menu div.next-menu-item{color:#333}.main-container .nav-menu .next-menu-item-inner{height:40px;color:#666}.main-container .nav-menu .current-path{background-color:#f2f3f7}.main-container .go-back{text-align:center;color:#546478;font-size:20px;font-weight:700;padding:10px 0;margin-top:14px;cursor:pointer}.next-card,.next-card:after,.next-card:before{box-sizing:border-box}.next-card[dir=rtl] .next-card-extra{left:0;right:auto}.next-card[dir=rtl] .next-card-title:before{right:0;left:auto}.next-card[dir=rtl] .next-card-subtitle{float:left;padding-right:8px;padding-left:0}.next-card[dir=rtl] .next-card-head-show-bullet .next-card-title{padding-left:0;padding-right:8px}.next-card,.next-card *,.next-card :after,.next-card :before{box-sizing:border-box}.next-card{min-width:100px;border:1px solid #dcdee3;border-radius:3px;box-shadow:none;background:#fff;overflow:hidden}.next-card-head{background:#fff;padding-left:16px;padding-right:16px}.next-card-head-show-bullet .next-card-title{padding-left:8px}.next-card-head-show-bullet .next-card-title:before{content:"";display:inline-block;height:16px;width:3px;background:#5584ff;position:absolute;left:0;top:calc(50% - 8px)}.next-card-head-main{position:relative;margin-top:8px;margin-bottom:0;height:40px;line-height:40px}.next-card-title{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:80%;height:100%;color:#333;font-size:16px;font-weight:400}.next-card-subtitle{font-size:12px;color:#666;padding-left:8px}.next-card-extra{position:absolute;right:0;top:0;height:100%;font-size:12px;color:#5584ff}.next-card-body{padding-bottom:12px;padding-left:16px;padding-right:16px}.next-card-show-divider .next-card-head-main{border-bottom:1px solid #e6e7eb}.next-card-show-divider .next-card-body{padding-top:12px}.next-card-hide-divider .next-card-body{padding-top:0}.next-card—free{padding:0}.next-card-content{overflow:hidden;transition:all .3s ease;position:relative}.next-card-footer .next-icon{transition:all .1s linear}.next-card-footer .next-icon.expand{transform-origin:50% 47%;transform:rotate(180deg)}.next-card-header{background:#fff;padding:0 16px;margin-bottom:12px;margin-top:12px}.next-card-media,.next-card-media>*{display:block;background-size:cover;background-repeat:no-repeat;background-position:50%;object-fit:cover;width:100%}.next-card-header-titles{overflow:hidden}.next-card-header-extra{float:right;text-align:right}.next-card-header-extra .next--btn{margin-left:12px;vertical-align:middle}.next-card-header-title{color:#333;font-size:16px;font-weight:400;line-height:1.5}.next-card-header-subtitle{font-size:12px;color:#666}.next-card-actions{display:block;padding:12px 16px}.next-card-actions .next-btn:not(:last-child){margin-right:12px;vertical-align:middle}.next-card-divider{border-style:none;width:100%;margin:0;position:relative}.next-card-divider:before{content:"";display:block;border-bottom:1px solid #e6e7eb}.next-card-divider--inset{padding:0 16px}.next-card-content-container{margin-top:12px;padding-bottom:12px;padding-left:16px;padding-right:16px;font-size:12px;line-height:1.5;color:#666}@keyframes slashStar{0%{opacity:1}to{opacity:0}}.home-page .top-section{position:relative;height:100vh}.home-page .top-section .login-panel{position:absolute;right:40px;width:480px;height:540px;top:90px;border:0}.home-page .top-section .login-panel input,.home-page .top-section .login-panel input::-webkit-input-placeholder{font-size:16px}.home-page .top-section .login-panel .login-header{width:100%;line-height:45px;font-size:32px;margin-top:58px;text-align:center}.home-page .top-section .login-panel .login-form{width:360px;margin:80px auto auto}.home-page .top-section .login-panel .login-form input{height:60px}.home-page .top-section .login-panel .login-form button{width:100%;height:60px;font-size:16px;background:#4190ff 100%;color:#fff;border:0}.home-page .top-section .animation{position:absolute;width:6px;height:6px;border-radius:50%;background-color:#1be1f6}.home-page .top-section .animation1{left:15%;top:70%;animation:slashStar 2s ease-in-out .3s infinite}.home-page .top-section .animation2{left:34%;top:35%;animation:slashStar 2s ease-in-out 1.2s infinite}.home-page .top-section .animation3{left:53%;top:20%;animation:slashStar 2s ease-in-out .5s infinite}.home-page .top-section .animation4{left:72%;top:64%;animation:slashStar 2s ease-in-out .8s infinite}.home-page .top-section .animation5{left:87%;top:30%;animation:slashStar 2s ease-in-out 1.5s infinite}.home-page .top-section .vertical-middle{position:absolute;left:0;top:50%;margin-top:-47px;transform:translateY(-50%)}.home-page .top-section .product-area{width:600px;margin-left:40px}.home-page .top-section .product-logo{display:block;width:257px;height:50px;margin:0}.home-page .top-section .product-desc{opacity:.8;font-family:Avenir-Medium;font-size:24px;color:#fff;max-width:780px;margin:12px auto 30px;text-align:left}.next-table{position:relative}.next-table,.next-table *,.next-table :after,.next-table :before{box-sizing:border-box}.next-table.next-table-small .next-table-prerow .next-table-cell-wrapper,.next-table.next-table-small td .next-table-cell-wrapper,.next-table.next-table-small th .next-table-cell-wrapper{padding:8px}.next-table table{border-collapse:collapse;border-spacing:0;width:100%;background:#fff}.next-table table tr:first-child td{border-top-width:0}.next-table th{padding:0;background:#ebecf0;color:#333;text-align:left;font-weight:400;border:1px solid #dcdee3}.next-table th .next-table-cell-wrapper{padding:12px 16px;overflow:hidden;text-overflow:ellipsis;word-break:break-all}.next-table th.next-table-prerow .next-table-cell-wrapper{padding:12px 16px}.next-table-affix{z-index:1;overflow:hidden}.next-table-header-resizable{position:relative}.next-table-header-resizable .next-table-resize-handler{position:absolute;right:0;top:0;bottom:0;width:3px;background:transparent;cursor:ew-resize}.next-table td{padding:0;border:1px solid #dcdee3}.next-table td .next-table-cell-wrapper{padding:12px 16px;overflow:hidden;text-overflow:ellipsis;word-break:break-all}.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow,.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow,.next-table td .next-table-cell-wrapper .next-table-tree-placeholder{margin-right:8px;outline:0;cursor:pointer}.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow .next-icon-remote,.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow:before{width:12px;font-size:12px;line-height:inherit}.next-table td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow:before{content:""}.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow .next-icon-remote,.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow:before{width:12px;font-size:12px;line-height:inherit}.next-table td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow:before{content:""}.next-table td.next-table-prerow .next-table-cell-wrapper{padding:12px 16px}.next-table .next-table-expanded .next-table-cell-wrapper,.next-table .next-table-selection .next-table-cell-wrapper{overflow:visible}.next-table.no-header table tr:first-child td{border-top-width:1px}.next-table.only-bottom-border{border-width:0}.next-table.only-bottom-border .next-table-expanded-row td,.next-table.only-bottom-border .next-table-expanded-row th,.next-table.only-bottom-border td,.next-table.only-bottom-border th{border-width:0 0 1px}.next-table.only-bottom-border table tr td:first-child,.next-table.only-bottom-border table tr th:first-child{border-left-width:0}.next-table-loading{display:block}.next-table.zebra tr:nth-child(odd) td{background:#fff}.next-table.zebra tr:nth-child(2n) td{background:#f7f8fa}.next-table.zebra .next-table-cell.hovered,.next-table.zebra .next-table-row.hovered td,.next-table.zebra .next-table-row.selected td{background:#f2f3f7;color:#333}.next-table-empty{color:#a0a2ad;padding:32px 0;text-align:center}.next-table-expanded-row td{border-width:0}.next-table-expanded-row td:first-child{border-left-width:1px}.next-table-expanded-row td:last-child{border-right-width:1px}.next-table-expanded-row:last-child td{border-bottom-width:1px}.next-table-expanded-row .next-table .last td{border-bottom-width:0}.next-table-filter-footer{margin:10px 10px 0}.next-table-filter-footer button{margin-right:5px}.next-table-row{transition:all .1s linear;background:#fff;color:#333}.next-table-row.hidden{display:none}.next-table-cell.hovered,.next-table-row.hovered,.next-table-row.selected{background:#f2f3f7;color:#333}.next-table-tree-placeholder{display:inline-block;width:12px}.last .next-table-expanded-row td{border-bottom-width:1px}.next-table-body,.next-table-header{overflow:auto;font-size:12px}.next-table-header{margin-bottom:-20px;padding-bottom:20px;overflow:-moz-scrollbars-none;-ms-overflow-style:none;scrollbar-width:none}.next-table-header::-webkit-scrollbar{display:none}.next-table-body{font-size:12px;position:relative}.next-table-fixed{border:1px solid #dcdee3}.next-table-fixed table{table-layout:fixed}.next-table-fixed .next-table-header{background:#ebecf0}.next-table-fixed table tr td:first-child,.next-table-fixed table tr th:first-child{border-left-width:0}.next-table-fixed .next-table-header th{border-top-width:0}.next-table-fixed .next-table-header tr th:last-child{border-right-width:0}.next-table-fixed .next-table-body td{border-top-width:0}.next-table-fixed .next-table-body tr:last-child td{border-bottom-width:0}.next-table-fixed .next-table-body tr td:last-child{border-right-width:0}.next-table-fixed.next-table-group table tr td:first-child,.next-table-fixed.next-table-group table tr th:first-child{border-left-width:1px}.next-table-fixed.next-table-group .next-table-header th{border-top-width:1px}.next-table-fixed.next-table-group .next-table-header tr th:last-child{border-right-width:1px}.next-table-fixed.next-table-group .next-table-body td{border-top-width:1px}.next-table-fixed.next-table-group .next-table-body tr:last-child td{border-bottom-width:1px}.next-table-fixed.next-table-group .next-table-body tr td:last-child{border-right-width:1px}.next-table-lock .next-table-body{overflow-x:auto;overflow-y:visible}.next-table-group{border-width:0}.next-table-group .next-table-body{margin-top:8px}.next-table-group .next-table-body table{margin-bottom:8px}.next-table-group .next-table-body table tr:first-child td{border-top-width:1px}.next-table-group .next-table-group-footer td,.next-table-group .next-table-group-header td{background:#ebecf0;color:#333}.next-table-group .next-table-row.hovered,.next-table-group .next-table-row.selected{background:#fff;color:#333}.next-table-lock{position:relative}.next-table-lock table{table-layout:fixed}.next-table-header-inner{overflow:unset}.next-table-wrap-empty .next-table-lock-left td,.next-table-wrap-empty .next-table-lock-right td{border:none}.next-table-wrap-empty .next-table-lock-left .next-table-empty,.next-table-wrap-empty .next-table-lock-right .next-table-empty{display:none}.next-table-wrap-empty>.next-table-inner>.next-table-body>table{table-layout:auto}.next-table-lock-left,.next-table-lock-right{position:absolute;left:0;top:0;z-index:1;border:0;transition:box-shadow .3s ease;overflow:hidden}.next-table-lock-left table,.next-table-lock-right table{width:auto}.next-table-lock-left .next-table-body,.next-table-lock-right .next-table-body{overflow-y:scroll;overflow-x:hidden;margin-right:-20px;padding-right:0}.next-table-lock-right{right:0;left:auto}.next-table-lock-right table tr td:first-child,.next-table-lock-right table tr th:first-child{border-left-width:1px}.next-table-lock-right.shadow{box-shadow:-2px 0 3px rgba(0,0,0,.12)}.next-table-lock-left.shadow{box-shadow:2px 0 3px rgba(0,0,0,.12)}.next-table-filter{line-height:1}.next-table-sort{position:relative;width:16px;display:inline-block;line-height:1}.next-table-sort:focus{outline:0}.next-table-sort>a:before{content:" ";display:inline-block;vertical-align:middle}.next-table-sort .next-icon{position:absolute;left:-2px;color:#333}.next-table-sort .next-icon .next-icon-remote,.next-table-sort .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-table-sort .current .next-icon{color:#5584ff}.next-table-sort .next-icon-ascending{left:2px}.next-table-filter{cursor:pointer;width:20px;display:inline-block}.next-table-filter:focus{outline:0}.next-table-filter .next-icon{color:#333}.next-table-filter .next-icon .next-icon-remote,.next-table-filter .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-table-header-icon{margin-left:8px}.next-table-expanded-ctrl{cursor:pointer}.next-table-expanded-ctrl:focus{outline:0}.next-table-expanded-ctrl.disabled{color:#999}.next-table-expanded-ctrl .next-table-expand-unfold .next-icon-remote,.next-table-expanded-ctrl .next-table-expand-unfold:before{width:12px;font-size:12px;line-height:inherit}.next-table-expanded-ctrl .next-table-expand-unfold:before{content:""}.next-table-expanded-ctrl .next-table-expand-fold .next-icon-remote,.next-table-expanded-ctrl .next-table-expand-fold:before{width:12px;font-size:12px;line-height:inherit}.next-table-expanded-ctrl .next-table-expand-fold:before{content:""}.next-table[dir=rtl] th{text-align:right}.next-table[dir=rtl] .next-table-header-resizable .next-table-resize-handler{right:auto;left:0}.next-table[dir=rtl] td .next-table-cell-wrapper .next-icon-arrow-down.next-table-tree-arrow,.next-table[dir=rtl] td .next-table-cell-wrapper .next-icon-arrow-right.next-table-tree-arrow,.next-table[dir=rtl] td .next-table-cell-wrapper .next-table-tree-placeholder{margin-left:3px;margin-right:0;float:right}.next-table[dir=rtl] .next-table-expanded-row td:first-child{border-left-width:0;border-right-width:1px}.next-table[dir=rtl] .next-table-expanded-row td:last-child{border-left-width:1px;border-right-width:0}.next-table[dir=rtl].only-bottom-border .next-table-expanded-row td,.next-table[dir=rtl].only-bottom-border .next-table-expanded-row th{border-width:0 0 1px}.next-table[dir=rtl] .next-table-filter-footer button{margin-left:5px;margin-right:0}.next-table[dir=rtl] .next-table-lock-left,.next-table[dir=rtl] .next-table-lock-right{left:auto;right:0}.next-table[dir=rtl] .next-table-lock-right{right:auto;left:0}.next-table[dir=rtl] .next-table-lock-right table tr td:first-child,.next-table[dir=rtl] .next-table-lock-right table tr th:first-child{border-right-width:1px}.next-table[dir=rtl] .next-table-lock-right.shadow{box-shadow:2px 0 3px rgba(0,0,0,.12)}.next-table[dir=rtl] .next-table-lock-left.shadow{box-shadow:-2px 0 3px rgba(0,0,0,.12)}.next-table[dir=rtl] .next-table-sort .next-icon{right:0;left:auto}.next-table[dir=rtl] .next-table-sort .next-icon-ascending{right:4px;left:auto}.next-table[dir=rtl] .next-table-filter{margin-right:5px;margin-left:0}.next-table-fixed[dir=rtl] table tr td:first-child,.next-table-fixed[dir=rtl] table tr th:first-child{border-left-width:1px;border-right-width:0}.next-table-fixed[dir=rtl] .next-table-body tr td:last-child,.next-table-fixed[dir=rtl] .next-table-header tr th:last-child{border-left-width:1px}.next-balloon{position:absolute;max-width:300px;border-style:solid;border-radius:3px;font-size:12px;font-weight:400;animation-duration:.3s;animation-timing-function:ease-in-out;word-wrap:break-word;z-index:0}.next-balloon,.next-balloon *,.next-balloon :after,.next-balloon :before{box-sizing:border-box}.next-balloon:focus,.next-balloon :focus{outline:0}.next-balloon-primary{color:#333;border-color:#4494f9;background-color:#e3f2fd;box-shadow:0 1px 3px 0 rgba(0,0,0,.12);border-width:1px}.next-balloon-primary .next-balloon-close{position:absolute;top:12px;right:12px;font-size:12px;cursor:pointer;color:#999}.next-balloon-primary .next-balloon-close .next-icon{width:12px;height:12px;line-height:12px}.next-balloon-primary .next-balloon-close .next-icon:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-balloon-primary .next-balloon-close :hover{color:#333}.next-balloon-primary:after{position:absolute;width:12px;height:12px;content:"";transform:rotate(45deg);box-sizing:content-box!important;border:1px solid #4494f9;background-color:#e3f2fd;z-index:-1}.next-balloon-primary.next-balloon-top:after{top:-7px;left:calc(50% + -7px);border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-right:after{top:calc(50% + -7px);right:-7px;border-left:none;border-bottom:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-bottom:after{bottom:-7px;left:calc(50% + -7px);border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-left:after{top:calc(50% + -7px);left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-left-top:after{top:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-left-bottom:after{bottom:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-right-top:after{top:12px;right:-7px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-right-bottom:after{right:-7px;bottom:12px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-top-left:after{top:-7px;left:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-top-right:after{top:-7px;right:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-bottom-left:after{bottom:-7px;left:12px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-primary.next-balloon-bottom-right:after{right:12px;bottom:-7px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal{color:#333;border-color:#dcdee3;background-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);border-width:1px}.next-balloon-normal .next-balloon-close{position:absolute;top:12px;right:12px;font-size:12px;cursor:pointer;color:#999}.next-balloon-normal .next-balloon-close .next-icon{width:12px;height:12px;line-height:12px}.next-balloon-normal .next-balloon-close .next-icon:before{width:12px;height:12px;font-size:12px;line-height:12px}.next-balloon-normal .next-balloon-close :hover{color:#666}.next-balloon-normal:after{position:absolute;width:12px;height:12px;content:"";transform:rotate(45deg);box-sizing:content-box!important;border:1px solid #dcdee3;background-color:#fff;z-index:-1}.next-balloon-normal.next-balloon-top:after{top:-7px;left:calc(50% + -7px);border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-right:after{top:calc(50% + -7px);right:-7px;border-left:none;border-bottom:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-bottom:after{bottom:-7px;left:calc(50% + -7px);border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-left:after{top:calc(50% + -7px);left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-left-top:after{top:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-left-bottom:after{bottom:12px;left:-7px;border-top:none;border-right:none;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-right-top:after{top:12px;right:-7px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-right-bottom:after{right:-7px;bottom:12px;border-bottom:none;border-left:none;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-top-left:after{top:-7px;left:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-top-right:after{top:-7px;right:12px;border-right:none;border-bottom:none;box-shadow:-1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-bottom-left:after{bottom:-7px;left:12px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon-normal.next-balloon-bottom-right:after{right:12px;bottom:-7px;border-top:none;border-left:none;box-shadow:1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon.visible{display:block}.next-balloon.hidden{display:none}.next-balloon-medium{padding:16px}.next-balloon-closable{padding:16px 40px 16px 16px}.next-balloon-tooltip{box-sizing:border-box;position:absolute;max-width:300px;border-radius:3px;font-size:12px;font-weight:400;z-index:0;color:#333;background-color:#f2f3f7;box-shadow:none;border:1px solid #dcdee3}.next-balloon-tooltip *,.next-balloon-tooltip :after,.next-balloon-tooltip :before{box-sizing:border-box}.next-balloon-tooltip:after{position:absolute;width:12px;height:12px;content:"";transform:rotate(45deg);box-sizing:content-box!important;border:1px solid #dcdee3;background-color:#f2f3f7;z-index:-1}.next-balloon-tooltip-top:after{top:-7px;left:calc(50% + -7px);border-right:none;border-bottom:none}.next-balloon-tooltip-right:after{top:calc(50% + -7px);right:-7px;border-left:none;border-bottom:none}.next-balloon-tooltip-bottom:after{bottom:-7px;left:calc(50% + -7px);border-top:none;border-left:none}.next-balloon-tooltip-left:after{top:calc(50% + -7px);left:-7px;border-top:none;border-right:none}.next-balloon-tooltip-left-top:after{top:12px;left:-7px;border-top:none;border-right:none}.next-balloon-tooltip-left-bottom:after{bottom:12px;left:-7px;border-top:none;border-right:none}.next-balloon-tooltip-right-top:after{top:12px;right:-7px;border-bottom:none;border-left:none}.next-balloon-tooltip-right-bottom:after{right:-7px;bottom:12px;border-bottom:none;border-left:none}.next-balloon-tooltip-top-left:after{top:-7px;left:12px;border-right:none;border-bottom:none}.next-balloon-tooltip-top-right:after{top:-7px;right:12px;border-right:none;border-bottom:none}.next-balloon-tooltip-bottom-left:after{bottom:-7px;left:12px;border-top:none;border-left:none}.next-balloon-tooltip-bottom-right:after{right:12px;bottom:-7px;border-top:none;border-left:none}.next-balloon-tooltip.visible{display:block}.next-balloon-tooltip.hidden{display:none}.next-balloon-tooltip-medium{padding:8px}.next-balloon[dir=rtl].next-balloon-primary .next-balloon-close{left:12px;right:auto}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-right:after{left:-7px;right:auto;border-right:none;border-top:none;border-left:inherit;border-bottom:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-left-bottom:after,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-left-top:after,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-left:after{right:-7px;left:auto;border-left:none;border-bottom:none;border-right:inherit;border-top:inherit;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-right-bottom:after,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-right-top:after{left:-7px;right:auto;border-right:none;border-top:none;border-bottom:inherit;border-left:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-top-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-top-right:after{right:auto;left:12px}.next-balloon[dir=rtl].next-balloon-primary.next-balloon-bottom-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-normal .next-balloon-close,.next-balloon[dir=rtl].next-balloon-primary.next-balloon-bottom-right:after{left:12px;right:auto}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-right:after{left:-7px;right:auto;border-right:none;border-top:none;border-left:inherit;border-bottom:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-left-bottom:after,.next-balloon[dir=rtl].next-balloon-normal.next-balloon-left-top:after,.next-balloon[dir=rtl].next-balloon-normal.next-balloon-left:after{right:-7px;left:auto;border-left:none;border-bottom:none;border-right:inherit;border-top:inherit;box-shadow:1px -1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-right-bottom:after,.next-balloon[dir=rtl].next-balloon-normal.next-balloon-right-top:after{left:-7px;right:auto;border-right:none;border-top:none;border-bottom:inherit;border-left:inherit;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1)}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-top-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-top-right:after{right:auto;left:12px}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-bottom-left:after{right:12px;left:auto}.next-balloon[dir=rtl].next-balloon-normal.next-balloon-bottom-right:after{left:12px;right:auto}.next-balloon[dir=rtl].next-balloon-closable{padding:16px 16px 16px 40px}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-right:after{left:-7px;right:auto;border-top:none;border-right:none;border-left:inherit;border-bottom:inherit}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-left-bottom:after,.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-left-top:after,.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-left:after{right:-7px;left:auto;border-top:inherit;border-right:inherit;border-left:none;border-bottom:none}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-right-bottom:after,.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-right-top:after{left:-7px;right:auto;border-top:none;border-right:none;border-left:inherit;border-bottom:inherit}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-top-left:after{right:12px;left:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-top-right:after{left:12px;right:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-bottom-left:after{right:12px;left:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-bottom-right:after{left:12px;right:auto}.next-balloon-tooltip[dir=rtl].next-balloon-tooltip-medium{padding:8px}@keyframes fadeInRightForTag{0%{opacity:0;transform:rotate(45deg) translateX(20px)}to{opacity:1;transform:rotate(45deg) translateX(0)}}.next-tag>.next-tag-body{overflow:hidden;text-overflow:ellipsis}.next-tag-checkable.next-tag-level-secondary{color:#333;border-color:transparent;background-color:transparent}.next-tag-checkable.next-tag-level-secondary:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-secondary:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-secondary:not(.disabled):not([disabled]):hover{color:#5584ff}.next-tag-default.next-tag-level-primary{color:#666;border-color:#ebecf0;background-color:#ebecf0}.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]).hover,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):focus,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):hover{color:#333;border-color:#e2e4e8;background-color:#e2e4e8}.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-default.next-tag-level-primary:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-default.next-tag-level-primary,.next-tag-default.next-tag-level-primary[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-default.next-tag-level-primary>.next-tag-close-btn,.next-tag-default.next-tag-level-primary[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-default.next-tag-level-primary>.next-tag-close-btn{color:#666}.next-tag-closable.next-tag-level-primary{color:#666;border-color:#ebecf0;background-color:#ebecf0}.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]).hover,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):focus,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):hover{color:#333;border-color:#e2e4e8;background-color:#e2e4e8}.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-closable.next-tag-level-primary:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-closable.next-tag-level-primary,.next-tag-closable.next-tag-level-primary[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-closable.next-tag-level-primary>.next-tag-close-btn,.next-tag-closable.next-tag-level-primary[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-closable.next-tag-level-primary>.next-tag-close-btn{color:#666}.next-tag-checkable.next-tag-level-primary{color:#666;border-color:#ebecf0;background-color:#ebecf0}.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):hover{color:#333;border-color:#e2e4e8;background-color:#e2e4e8}.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-checkable.next-tag-level-primary,.next-tag-checkable.next-tag-level-primary[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-checkable.next-tag-level-primary>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-checkable.next-tag-level-primary>.next-tag-close-btn{color:#666}.next-tag-checkable.next-tag-level-primary.checked{color:#fff;border-color:#5584ff;background-color:#5584ff}.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):hover{color:#fff;border-color:#3e71f7;background-color:#3e71f7}.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#fff}.disabled.next-tag-checkable.next-tag-level-primary.checked,.next-tag-checkable.next-tag-level-primary.checked[disabled]{color:#ccc;border-color:#f7f8fa;background-color:#f7f8fa}.disabled.next-tag-checkable.next-tag-level-primary.checked>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked>.next-tag-close-btn,.next-tag-checkable.next-tag-level-primary.checked[disabled]>.next-tag-close-btn{color:#fff}.next-tag-default.next-tag-level-normal{color:#666;border-color:#c4c6cf;background-color:transparent}.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]).hover,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):focus,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):hover{color:#333;border-color:#a0a2ad;background-color:transparent}.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-default.next-tag-level-normal:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-default.next-tag-level-normal,.next-tag-default.next-tag-level-normal[disabled]{color:#ccc;border-color:#e6e7eb;background-color:#f7f8fa}.disabled.next-tag-default.next-tag-level-normal>.next-tag-close-btn,.next-tag-default.next-tag-level-normal[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-default.next-tag-level-normal>.next-tag-close-btn{color:#666}.next-tag-closable.next-tag-level-normal{color:#666;border-color:#c4c6cf;background-color:transparent}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover{color:#333;border-color:#a0a2ad;background-color:transparent}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover>.next-tag-close-btn,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus>.next-tag-close-btn,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover>.next-tag-close-btn{color:#333}.disabled.next-tag-closable.next-tag-level-normal,.next-tag-closable.next-tag-level-normal[disabled]{color:#ccc;border-color:#e6e7eb;background-color:transparent}.disabled.next-tag-closable.next-tag-level-normal>.next-tag-close-btn,.next-tag-closable.next-tag-level-normal[disabled]>.next-tag-close-btn{color:#ccc}.next-tag-closable.next-tag-level-normal>.next-tag-close-btn{color:#666}.next-tag-checkable.next-tag-level-normal.checked{color:#5584ff;border-color:#5584ff;background-color:transparent}.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):hover{color:#3e71f7;border-color:#3e71f7;background-color:transparent}.next-tag-checkable.next-tag-level-secondary.checked{color:#5584ff;border-color:#5584ff;background-color:transparent}.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):hover{color:#3e71f7;border-color:#3e71f7;background-color:transparent}.next-tag-checkable.next-tag-level-secondary.checked:before{position:absolute;content:"";-webkit-font-smoothing:antialiased;background-color:#5584ff;transform:rotate(45deg)}.next-tag-checkable.next-tag-level-secondary.checked:after{position:absolute;font-family:NextIcon;-webkit-font-smoothing:antialiased;content:"";transform:scale(.6);color:#fff}.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]).hover:before,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):focus:before,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):hover:before{background-color:#3e71f7}.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]).hover:after,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):focus:after,.next-tag-checkable.next-tag-level-secondary.checked:not(.disabled):not([disabled]):hover:after{color:#fff}.next-tag-checkable.next-tag-level-secondary.checked:disabled:before,.next-tag-checkable.next-tag-level-secondary.checked[disabled]:before{background-color:#e6e7eb}.next-tag-checkable.next-tag-level-secondary.checked:disabled:after,.next-tag-checkable.next-tag-level-secondary.checked[disabled]:after{color:#fff}.next-tag-checkable.next-tag-level-normal{color:#666;border-color:#c4c6cf;background-color:transparent}.next-tag-checkable.next-tag-level-normal:not(.disabled):not([disabled]).hover,.next-tag-checkable.next-tag-level-normal:not(.disabled):not([disabled]):focus,.next-tag-checkable.next-tag-level-normal:not(.disabled):not([disabled]):hover{color:#333;border-color:#c4c6cf;background-color:transparent}.disabled.next-tag-checkable.next-tag-level-normal,.next-tag-checkable.next-tag-level-normal[disabled]{color:#ccc;border-color:#e6e7eb;background-color:#f7f8fa}.next-tag-checkable.next-tag-level-normal.checked:before{position:absolute;content:"";-webkit-font-smoothing:antialiased;background-color:#5584ff;transform:rotate(45deg)}.next-tag-checkable.next-tag-level-normal.checked:after{position:absolute;font-family:NextIcon;-webkit-font-smoothing:antialiased;content:"";transform:scale(.6);color:#fff}.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]).hover:before,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):focus:before,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):hover:before{background-color:#3e71f7}.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]).hover:after,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):focus:after,.next-tag-checkable.next-tag-level-normal.checked:not(.disabled):not([disabled]):hover:after{color:#fff}.next-tag-checkable.next-tag-level-normal.checked:disabled:before,.next-tag-checkable.next-tag-level-normal.checked[disabled]:before{background-color:#e6e7eb}.next-tag-checkable.next-tag-level-normal.checked:disabled:after,.next-tag-checkable.next-tag-level-normal.checked[disabled]:after{color:#fff}.next-tag-closable.next-tag-level-normal:before{position:absolute;content:"";-webkit-font-smoothing:antialiased;background-color:#c4c6cf;transform:rotate(45deg)}.next-tag-closable.next-tag-level-normal:after{position:absolute;font-family:NextIcon;-webkit-font-smoothing:antialiased;content:"";transform:scale(.6);color:#fff}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover:before,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus:before,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover:before{background-color:#a0a2ad}.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]).hover:after,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):focus:after,.next-tag-closable.next-tag-level-normal:not(.disabled):not([disabled]):hover:after{color:#fff}.next-tag-closable.next-tag-level-normal:disabled:before,.next-tag-closable.next-tag-level-normal[disabled]:before{background-color:#e6e7eb}.next-tag-closable.next-tag-level-normal:disabled:after,.next-tag-closable.next-tag-level-normal[disabled]:after{color:#fff}.next-tag-group .next-tag-large,.next-tag-group .next-tag-medium{margin-right:8px;margin-bottom:8px}.next-tag-group .next-tag-small{margin-right:4px;margin-bottom:4px}.next-tag{display:inline-block;max-width:100%;vertical-align:middle;border-width:1px;border-radius:3px;box-shadow:none;border-style:solid;overflow:hidden;white-space:nowrap;transition:all .1s linear;font-size:0;outline:0}.next-tag,.next-tag *,.next-tag :after,.next-tag :before{box-sizing:border-box}.next-tag>.next-tag-body{position:relative;display:inline-block;height:100%;text-align:center;vertical-align:middle;max-width:100%;user-select:none}.next-tag>.next-tag-body>a{text-decoration:none;color:inherit}.next-tag>.next-tag-body>a:before{content:" ";position:absolute;display:block;top:0;left:0;right:0;bottom:0}.next-tag>.next-tag-body .next-icon{line-height:1;vertical-align:middle}.next-tag>.next-tag-body .next-icon:before{font-size:inherit}.next-tag.next-tag-body-pointer{cursor:pointer}.next-tag.disabled,.next-tag[disabled]{cursor:not-allowed;pointer-events:none}.next-tag-blue{background-color:#4494f9;border-color:#4494f9;color:#fff}.next-tag-blue-inverse{background-color:rgba(68,148,249,.25);border-color:#4494f9;color:#4494f9}.next-tag-green{background-color:#46bc15;border-color:#46bc15;color:#fff}.next-tag-green-inverse{background-color:rgba(70,188,21,.25);border-color:#46bc15;color:#46bc15}.next-tag-orange{background-color:#ff9300;border-color:#ff9300;color:#fff}.next-tag-orange-inverse{background-color:rgba(255,147,0,.25);border-color:#ff9300;color:#ff9300}.next-tag-red{background-color:#ff3000;border-color:#ff3000;color:#fff}.next-tag-red-inverse{background-color:rgba(255,48,0,.25);border-color:#ff3000;color:#ff3000}.next-tag-turquoise{background-color:#01c1b2;border-color:#01c1b2;color:#fff}.next-tag-turquoise-inverse{background-color:rgba(1,193,178,.25);border-color:#01c1b2;color:#01c1b2}.next-tag-yellow{background-color:#fccc12;border-color:#fccc12;color:#fff}.next-tag-yellow-inverse{background-color:rgba(252,204,18,.25);border-color:#fccc12;color:#fccc12}.next-tag-large{height:40px;padding:0;line-height:38px;font-size:0}.next-tag-large>.next-tag-body{font-size:16px;padding:0 16px;min-width:48px}.next-tag-large.next-tag-closable>.next-tag-body{padding:0 0 0 16px;max-width:calc(100% - 40px)}.next-tag-large[dir=rtl].next-tag-closable>.next-tag-body{padding:0 16px 0 0}.next-tag-large.next-tag-closable>.next-tag-close-btn{margin-left:12px;padding-right:16px}.next-tag-large.next-tag-closable>.next-tag-close-btn .next-icon .next-icon-remote,.next-tag-large.next-tag-closable>.next-tag-close-btn .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-tag-large[dir=rtl]>.next-tag-close-btn{margin-right:12px;margin-left:0;padding-right:0;padding-left:16px}.next-tag-medium{height:28px;padding:0;line-height:26px;font-size:0}.next-tag-medium>.next-tag-body{font-size:14px;padding:0 12px;min-width:40px}.next-tag-medium.next-tag-closable>.next-tag-body{padding:0 0 0 12px;max-width:calc(100% - 28px)}.next-tag-medium[dir=rtl].next-tag-closable>.next-tag-body{padding:0 12px 0 0}.next-tag-medium.next-tag-closable>.next-tag-close-btn{margin-left:8px;padding-right:12px}.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon .next-icon-remote,.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-tag-medium.next-tag-closable>.next-tag-close-btn .next-icon:before{width:16px;font-size:16px}}.next-tag-medium[dir=rtl]>.next-tag-close-btn{margin-right:8px;margin-left:0;padding-right:0;padding-left:12px}.next-tag-small{height:20px;padding:0;line-height:18px;font-size:0}.next-tag-small>.next-tag-body{font-size:12px;padding:0 8px;min-width:28px}.next-tag-small.next-tag-closable>.next-tag-body{padding:0 0 0 8px;max-width:calc(100% - 24px)}.next-tag-small[dir=rtl].next-tag-closable>.next-tag-body{padding:0 8px 0 0}.next-tag-small.next-tag-closable>.next-tag-close-btn{margin-left:8px;padding-right:8px}.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon .next-icon-remote,.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-tag-small.next-tag-closable>.next-tag-close-btn .next-icon:before{width:16px;font-size:16px}}.next-tag-small[dir=rtl]>.next-tag-close-btn{margin-right:8px;margin-left:0;padding-right:0;padding-left:8px}.next-tag-default{cursor:default}.next-tag-closable{position:relative}.next-tag-closable>.next-tag-close-btn{display:inline-block;vertical-align:middle;height:100%;text-align:center;cursor:pointer}.next-tag-checkable{cursor:pointer;position:relative;border-radius:3px}.next-tag-checkable.checked:before{animation:fadeInRightForTag .4s cubic-bezier(.78,.14,.15,.86)}.next-tag-checkable.checked:after{animation:zoomIn .4s cubic-bezier(.78,.14,.15,.86)}.next-tag-checkable.next-tag-small:not(.next-tag-level-primary):before{right:-10px;bottom:-10px;width:20px;height:20px}.next-tag-checkable.next-tag-small:not(.next-tag-level-primary):after{font-size:8px;line-height:8px;right:0;bottom:0}.next-tag-checkable.next-tag-medium:not(.next-tag-level-primary):before{right:-14px;bottom:-14px;width:28px;height:28px}.next-tag-checkable.next-tag-medium:not(.next-tag-level-primary):after{font-size:12px;line-height:12px;right:0;bottom:0}.next-tag-checkable.next-tag-large:not(.next-tag-level-primary):before{right:-18px;bottom:-18px;width:36px;height:36px}.next-tag-checkable.next-tag-large:not(.next-tag-level-primary):after{font-size:16px;line-height:16px;right:0;bottom:0}.next-tag-checkable.next-tag-level-secondary.disabled,.next-tag-checkable.next-tag-level-secondary[disabled]{color:#ccc;border-color:#e6e7eb;background-color:#f7f8fa}.next-tag-zoom-appear,.next-tag-zoom-enter{animation:fadeInLeft .4s cubic-bezier(.78,.14,.15,.86);animation-fill-mode:both}.next-tag-zoom-leave{animation:zoomOut .3s ease-in;animation-fill-mode:both}.next-select{display:inline-block;font-size:0;vertical-align:middle}.next-select,.next-select *,.next-select :after,.next-select :before{box-sizing:border-box}.next-select-trigger{min-width:100px;outline:0;transition:all .1s linear}.next-select-trigger .next-input-label{flex:0 0 auto;width:auto}.next-select-trigger .next-select-values{display:block;width:100%;flex:1 1 0;overflow:hidden}.next-select-trigger .next-select-values>em{font-style:inherit}.next-select-trigger .next-select-values input{padding-left:0;padding-right:0}.next-select-trigger .next-input-control{flex:0 0 auto;width:auto}.next-select-trigger .next-input-control>*{display:inline-block;width:auto}.next-select-trigger .next-input-control>.next-select-arrow{padding-right:0}.next-select-trigger .next-input.next-disabled em{color:#ccc}.next-select-trigger .next-input.next-disabled .next-select-arrow{cursor:not-allowed}.next-select-trigger .next-select-clear{display:none}.next-select-trigger.next-has-clear:hover .next-select-clear{display:inline-block}.next-select-trigger.next-has-clear:hover .next-select-arrow{display:none}.next-select .next-select-inner{display:inline-flex;align-items:center;width:100%;min-width:100px;outline:0;color:#333}.next-select .next-select-inner .next-tag{line-height:1;margin-right:4px;margin-bottom:3px;padding-left:4px;padding-right:4px}.next-select .next-select-inner .next-input-inner{width:auto}.next-select-trigger-search{position:relative;display:inline-block;vertical-align:top;overflow:hidden;width:100%;max-width:100%}.next-select-trigger-search>input,.next-select-trigger-search>span{display:block;font-size:inherit;font-family:inherit;letter-spacing:inherit;white-space:nowrap;overflow:hidden}.next-select-trigger-search input{position:absolute;background-color:transparent;width:100%;height:100%!important;z-index:1;left:0;border:0;outline:0;margin:0;padding:0;cursor:inherit}.next-select-trigger-search>span{position:relative;visibility:hidden;white-space:pre;max-width:100%;z-index:-1}.next-select-single.next-no-search{cursor:pointer}.next-select-single.next-has-search.next-active .next-select-values>em{display:none}.next-select-single.next-inactive .next-select-values>em+.next-select-trigger-search,.next-select-single.next-no-search .next-select-values>em+.next-select-trigger-search{width:1px;opacity:0;filter:alpha(opacity=0)}.next-select-single.next-inactive .next-select-trigger-search input,.next-select-single.next-no-search .next-select-trigger-search input{color:transparent}.next-select-single .next-select-values{display:inline-flex;align-items:center}.next-select-single .next-select-values>em{vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.next-select-multiple .next-select-compact{position:relative;white-space:nowrap}.next-select-multiple .next-select-compact .next-select-trigger-search{width:auto}.next-select-multiple .next-select-compact .next-select-tag-compact{position:absolute;top:0;right:0;z-index:1;padding:0 4px 0 16px;color:#333;background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff 10px)}.next-select-multiple .next-select-values,.next-select-tag .next-select-values{margin-bottom:-3px;height:auto!important}.next-select-multiple .next-select-trigger-search,.next-select-tag .next-select-trigger-search{margin-bottom:3px}.next-select-multiple .next-tag+.next-select-trigger-search,.next-select-tag .next-tag+.next-select-trigger-search{width:auto;min-width:1px}.next-select-multiple .next-input,.next-select-tag .next-input{height:auto;align-items:start}.next-select-multiple.next-small .next-select-values,.next-select-tag.next-small .next-select-values{min-height:18px;padding-top:2px;padding-bottom:2px;line-height:14px}.next-select-multiple.next-small .next-select-values-compact,.next-select-tag.next-small .next-select-values-compact{height:20px!important}.next-select-multiple.next-small .next-tag,.next-select-tag.next-small .next-tag{border:0;padding-top:0;padding-bottom:0;height:14px}.next-select-multiple.next-small .next-tag-body,.next-select-multiple.next-small .next-tag .next-tag-body,.next-select-multiple.next-small .next-tag .next-tag-close-btn,.next-select-tag.next-small .next-tag-body,.next-select-tag.next-small .next-tag .next-tag-body,.next-select-tag.next-small .next-tag .next-tag-close-btn{line-height:14px}.next-select-multiple.next-small .next-input-control,.next-select-multiple.next-small .next-input-label,.next-select-multiple.next-small .next-select-tag-compact,.next-select-tag.next-small .next-input-control,.next-select-tag.next-small .next-input-label,.next-select-tag.next-small .next-select-tag-compact{line-height:18px}.next-select-multiple.next-medium .next-select-values,.next-select-tag.next-medium .next-select-values{min-height:26px;padding-top:3px;padding-bottom:3px;line-height:20px}.next-select-multiple.next-medium .next-select-values-compact,.next-select-tag.next-medium .next-select-values-compact{height:28px!important}.next-select-multiple.next-medium .next-tag,.next-select-tag.next-medium .next-tag{padding-top:1px;padding-bottom:1px;height:20px}.next-select-multiple.next-medium .next-tag .next-tag-body,.next-select-multiple.next-medium .next-tag .next-tag-close-btn,.next-select-tag.next-medium .next-tag .next-tag-body,.next-select-tag.next-medium .next-tag .next-tag-close-btn{line-height:18px}.next-select-multiple.next-medium .next-input-control,.next-select-multiple.next-medium .next-input-label,.next-select-multiple.next-medium .next-select-tag-compact,.next-select-tag.next-medium .next-input-control,.next-select-tag.next-medium .next-input-label,.next-select-tag.next-medium .next-select-tag-compact{line-height:26px}.next-select-multiple.next-large .next-select-values,.next-select-tag.next-large .next-select-values{min-height:38px;padding-top:7px;padding-bottom:7px;line-height:24px}.next-select-multiple.next-large .next-select-values-compact,.next-select-tag.next-large .next-select-values-compact{height:40px!important}.next-select-multiple.next-large .next-tag,.next-select-tag.next-large .next-tag{padding-top:3px;padding-bottom:3px;height:24px}.next-select-multiple.next-large .next-tag .next-tag-body,.next-select-multiple.next-large .next-tag .next-tag-close-btn,.next-select-tag.next-large .next-tag .next-tag-body,.next-select-tag.next-large .next-tag .next-tag-close-btn{line-height:18px}.next-select-multiple.next-large .next-input-control,.next-select-multiple.next-large .next-input-label,.next-select-multiple.next-large .next-select-tag-compact,.next-select-tag.next-large .next-input-control,.next-select-tag.next-large .next-input-label,.next-select-tag.next-large .next-select-tag-compact{line-height:38px}.next-select.next-no-search .next-select-trigger-search input{color:transparent}.next-select-auto-complete{width:160px}.next-select-auto-complete .next-input{width:100%}.next-select-auto-complete .next-input .next-input-hint-wrap{padding-right:1px}.next-select-auto-complete .next-input .next-select-arrow{padding-left:0}.next-select.next-active .next-select-arrow .next-icon-arrow-down{transform:rotate(180deg)}.next-select-arrow{cursor:pointer;width:auto!important;text-align:center;transition:all .1s linear}.next-select-popup-wrap{animation-duration:.3s;animation-timing-function:ease}.next-select-menu-wrapper{max-height:260px;overflow:auto;border:1px solid #dcdee3;border-radius:3px;box-shadow:none}.next-select-menu-wrapper .next-select-menu{max-height:none;border:none}.next-select-menu{max-height:260px;overflow:auto}.next-select-menu .next-select-menu-empty-content{padding-left:8px;padding-right:8px;color:#999}.next-select-menu.next-select-auto-complete-menu.next-select-menu-empty{display:none}.next-select-menu .next-menu-item-text .next-icon{vertical-align:middle}.next-select-all{display:block;cursor:pointer;padding:0 8px;margin:0 12px 8px;border-bottom:1px solid #dcdee3}.next-select-all:hover{color:#3e71f7}.next-select-all .next-menu-icon-selected.next-icon{display:inline-block!important;top:auto;color:#5584ff}.next-select-highlight{color:#5584ff;font-size:12px}.next-select-in-ie.next-select-trigger .next-select-values{overflow:visible}.next-select-in-ie.next-select-trigger .next-input-control,.next-select-in-ie.next-select-trigger .next-input-label{width:1px}.next-select-in-ie.next-select-trigger .next-input-control>*{display:table-cell;width:1%}.next-select-in-ie.next-select-trigger .next-select-arrow{display:table-cell}.next-select-in-ie.next-select-trigger .next-select-clear{display:none}.next-select-in-ie.next-select-trigger.next-select-multiple .next-select-inner,.next-select-in-ie.next-select-trigger.next-select-tag .next-select-inner{vertical-align:top}.next-select-in-ie.next-select-trigger .next-select-inner,.next-select-in-ie.next-select-trigger.next-select-single .next-select-values{display:inline-table}.next-select-in-ie.next-select-trigger.next-select-single .next-input.next-small .next-select-values{line-height:20px}.next-select-in-ie.next-select-trigger.next-select-single .next-input.next-medium .next-select-values{line-height:28px}.next-select-in-ie.next-select-trigger.next-select-single .next-input.next-large .next-select-values{line-height:40px}.next-select-in-ie.next-select-trigger .next-select-trigger-search>span{max-width:100px}.next-select-in-ie.next-select-trigger.next-select-single.next-select-in-ie-fixwidth .next-select-values{position:relative}.next-select-in-ie.next-select-trigger.next-select-single.next-select-in-ie-fixwidth .next-select-values>em{position:absolute;display:inline-block;height:100%;line-height:1;vertical-align:middle;overflow:hidden;left:4px;right:0;top:30%}.next-select-in-ie.next-select-trigger.next-select-single.next-inactive .next-select-values>em+.next-select-trigger-search,.next-select-in-ie.next-select-trigger.next-select-single.next-no-search .next-select-values>em+.next-select-trigger-search{filter:alpha(opacity=0);font-size:0}.next-select-in-ie.next-select-trigger.next-no-search .next-select-trigger-search input,.next-select-in-ie.next-select-trigger.next-select-single.next-inactive .next-select-trigger-search input,.next-select-in-ie.next-select-trigger.next-select-single.next-no-search .next-select-trigger-search input{color:inherit}.next-select.next-select-multiple[dir=rtl] .next-select-compact .next-select-tag-compact{left:0;right:auto;padding:0 16px 0 4px;background:linear-gradient(270deg,hsla(0,0%,100%,0),#fff 10px)}.new-config-form{margin-top:36px}.more-item.hide{display:none}.next-tabs{width:100%}.next-tabs,.next-tabs *,.next-tabs :after,.next-tabs :before{box-sizing:border-box}.next-tabs-bar{outline:none}.next-tabs-bar-popup{overflow-y:auto;max-height:480px}.next-tabs-nav-container{position:relative}.next-tabs-nav-container:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-tabs-nav-wrap{overflow:hidden}.next-tabs-nav-scroll{overflow:hidden;white-space:nowrap}.next-tabs-scrollable .next-tabs-nav-scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.next-tabs-scrollable .next-tabs-nav-scroll::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;-webkit-appearance:none;opacity:0!important}.next-tabs-nav{display:inline-block;position:relative;transition:all .3s ease;list-style:none;padding:0;margin:0}.next-tabs-nav-appear,.next-tabs-nav-enter{animation:fadeInLeft .4s cubic-bezier(.78,.14,.15,.86);animation-fill-mode:both}.next-tabs-nav-leave{animation:fadeOutLeft .2s cubic-bezier(.78,.14,.15,.86);animation-fill-mode:both}.next-tabs-tab{display:inline-block;position:relative;transition:all .1s linear}.next-tabs-tab-inner{position:relative;cursor:pointer;text-decoration:none}.next-tabs-tab:before{content:"";position:absolute;transition:all .3s ease}.next-tabs-tab.active{font-weight:400}.next-tabs-tab .next-tabs-tab-close{color:#666}.next-tabs-tab .next-tabs-tab-close:hover{color:#333}.next-tabs-tab.active .next-tabs-tab-close{color:#5584ff}.next-tabs-tab.disabled .next-tabs-tab-close{color:#dcdee3}.next-tabs-tab:focus{outline:none}.next-tabs-tabpane{visibility:hidden;opacity:0}.next-tabs-tabpane.active{visibility:visible;opacity:1;height:auto}.next-tabs-tabpane.hidden{overflow:hidden;height:0!important;margin:0!important;padding:0!important;border:0!important}.next-tabs-btn-down,.next-tabs-btn-next,.next-tabs-btn-prev{position:absolute;top:0;cursor:pointer;padding:0;border:0;outline:none;height:100%;background-color:transparent;border-color:transparent}.next-tabs-btn-down,.next-tabs-btn-down.visited,.next-tabs-btn-down:link,.next-tabs-btn-down:visited,.next-tabs-btn-next,.next-tabs-btn-next.visited,.next-tabs-btn-next:link,.next-tabs-btn-next:visited,.next-tabs-btn-prev,.next-tabs-btn-prev.visited,.next-tabs-btn-prev:link,.next-tabs-btn-prev:visited{color:#666}.next-tabs-btn-down.active,.next-tabs-btn-down.hover,.next-tabs-btn-down:active,.next-tabs-btn-down:focus,.next-tabs-btn-down:hover,.next-tabs-btn-next.active,.next-tabs-btn-next.hover,.next-tabs-btn-next:active,.next-tabs-btn-next:focus,.next-tabs-btn-next:hover,.next-tabs-btn-prev.active,.next-tabs-btn-prev.hover,.next-tabs-btn-prev:active,.next-tabs-btn-prev:focus,.next-tabs-btn-prev:hover{color:#333;background-color:transparent;border-color:transparent;text-decoration:none}.next-tabs-btn-down.disabled,.next-tabs-btn-next.disabled,.next-tabs-btn-prev.disabled{cursor:not-allowed;color:#dcdee3}.next-tabs-btn-next{right:8px}.next-tabs-btn-prev{right:32px}.next-tabs-btn-down{right:8px}.next-tabs-content{overflow:hidden}.next-tabs-vertical>.next-tabs-bar .next-tabs-nav{width:100%}.next-tabs-vertical>.next-tabs-bar .next-tabs-tab{display:block}.next-tabs.next-medium .next-tabs-nav-container-scrolling{padding-right:60px}.next-tabs.next-medium .next-tabs-tab-inner{font-size:12px;padding:12px 16px}.next-tabs.next-medium .next-tabs-tab-inner .next-icon{line-height:1}.next-tabs.next-medium .next-tabs-tab-inner .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-tab-inner .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-tabs.next-medium .next-tabs-tab-inner .next-tabs-tab-close{padding-left:8px}.next-tabs.next-medium .next-tabs-tab-inner .next-tabs-tab-close .next-icon-remote,.next-tabs.next-medium .next-tabs-tab-inner .next-tabs-tab-close:before{width:12px;font-size:12px;line-height:inherit}.next-tabs.next-medium .next-tabs-btn-down .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-btn-down .next-icon:before,.next-tabs.next-medium .next-tabs-btn-next .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-btn-next .next-icon:before,.next-tabs.next-medium .next-tabs-btn-prev .next-icon .next-icon-remote,.next-tabs.next-medium .next-tabs-btn-prev .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-tabs.next-small .next-tabs-nav-container-scrolling{padding-right:56px}.next-tabs.next-small .next-tabs-tab-inner{font-size:12px;padding:8px 12px}.next-tabs.next-small .next-tabs-tab-inner .next-icon{line-height:1}.next-tabs.next-small .next-tabs-tab-inner .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-tab-inner .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close{padding-left:8px}.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close .next-icon-remote,.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close{transform:scale(.5);margin-left:-4px;margin-right:-4px}.next-tabs.next-small .next-tabs-tab-inner .next-tabs-tab-close:before{width:16px;font-size:16px}}.next-tabs.next-small .next-tabs-btn-down .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-btn-down .next-icon:before,.next-tabs.next-small .next-tabs-btn-next .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-btn-next .next-icon:before,.next-tabs.next-small .next-tabs-btn-prev .next-icon .next-icon-remote,.next-tabs.next-small .next-tabs-btn-prev .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-tabs-pure>.next-tabs-bar{border-bottom:1px solid #dcdee3;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container{margin-bottom:-1px;box-shadow:none}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab{color:#666;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab:hover{cursor:pointer;color:#333;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab.active{z-index:1;color:#5584ff;background-color:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#dcdee3;background:transparent}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab:before{border-radius:0;width:0;border-bottom:2px solid #5584ff;left:50%;bottom:0}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-container .next-tabs-tab.active:before{width:100%;left:0}.next-tabs-wrapped>.next-tabs-bar{background:transparent}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab{color:#666;background-color:#f2f3f7}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab:hover{cursor:pointer;color:#333;background-color:#ebecf0}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.active{z-index:1;color:#5584ff;background-color:#fff}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#ccc;background:#f7f8fa}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab .next-tabs-tab-close{color:#666}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab .next-tabs-tab-close:hover{color:#333}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.active .next-tabs-tab-close{color:#5584ff}.next-tabs-wrapped>.next-tabs-bar .next-tabs-tab.disabled .next-tabs-tab-close{color:#dcdee3}.next-tabs-wrapped:after,.next-tabs-wrapped:before{content:"";display:table}.next-tabs-wrapped:after{clear:both}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar,.next-tabs-wrapped>.next-tabs-content{position:relative}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab{margin-right:4px;border-radius:3px 3px 0 0;border:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab.active{border-color:#dcdee3 #dcdee3 #fff}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;width:0;border-top:2px solid #5584ff;left:50%;top:-1px}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab.active:before{width:calc(100% - 6px);left:3px}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-tab.active{border-width:1px}.next-tabs-wrapped.next-tabs-top>.next-tabs-bar:before{content:"";position:absolute;top:100%;width:100%;height:0;border-bottom:1px solid #dcdee3;transform:translateY(-1px);display:block}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar{position:relative}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab{margin-right:4px;border:1px solid #dcdee3;border-radius:0 0 3px 3px}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab.active{border-color:#fff #dcdee3 #dcdee3}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;width:0;border-bottom:2px solid #5584ff;left:50%;bottom:-1px}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-tab.active:before{width:calc(100% - 6px);left:3px}.next-tabs-wrapped.next-tabs-bottom>.next-tabs-content{top:1px;border-bottom:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar{float:left}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab{float:none;margin-bottom:4px;border-radius:3px 0 0 3px;border:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab.active{border-color:#dcdee3 #fff #dcdee3 #dcdee3}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;height:0;border-left:2px solid #5584ff;top:50%;left:-1px}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab.active:before{height:calc(100% - 6px);top:3px}.next-tabs-wrapped.next-tabs-left>.next-tabs-bar .next-tabs-tab.active{border-width:1px}.next-tabs-wrapped.next-tabs-left>.next-tabs-content{right:1px;border-left:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar{float:right}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab{float:none;margin-bottom:4px;border-radius:0 3px 3px 0;border:1px solid #dcdee3}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab:hover{border-color:#c4c6cf}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab.active{border-color:#dcdee3 #dcdee3 #dcdee3 #fff}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab:before{border-radius:3px;height:0;border-right:2px solid #5584ff;top:50%;right:-1px}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab.active:before{height:calc(100% - 6px);top:3px}.next-tabs-wrapped.next-tabs-right>.next-tabs-bar .next-tabs-tab.active{border-width:1px}.next-tabs-wrapped.next-tabs-right>.next-tabs-content{right:-1px;border-right:1px solid #dcdee3}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab{transition:background-color .1s linear;border-top:1px solid #c4c6cf;border-bottom:1px solid #c4c6cf;border-left:1px solid #c4c6cf;color:#333;background-color:#f2f3f7}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab:first-child{border-radius:3px 0 0 3px}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab:last-child{border-radius:0 3px 3px 0;border-right:1px solid #c4c6cf}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.active{margin-right:-1px;border-right:1px solid;border-color:#5584ff}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.disabled{border-color:#e6e7eb}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab:hover{z-index:1;margin-right:-1px;border-right:1px solid;border-color:#c4c6cf;cursor:pointer;color:#333;background-color:#ebecf0}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.active{z-index:1;color:#fff;background-color:#5584ff}.next-tabs-capsule>.next-tabs-bar .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#ccc;background:#f7f8fa}.next-tabs-text>.next-tabs-bar .next-tabs-tab{color:#666;background-color:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab:hover{cursor:pointer;color:#333;background-color:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab.active{z-index:1;color:#5584ff;background-color:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab.disabled{pointer-events:none;cursor:default;color:#ccc;background:transparent}.next-tabs-text>.next-tabs-bar .next-tabs-tab:not(:last-child):after{content:"";position:absolute;right:0;top:calc(50% - 4px);width:1px;height:8px;background-color:#dcdee3}.next-tabs-pure>.next-tabs-bar{position:relative}.next-tabs-pure>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-capsule>.next-tabs-bar{position:relative}.next-tabs-capsule>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs-text>.next-tabs-bar{position:relative}.next-tabs-text>.next-tabs-bar .next-tabs-nav-extra{position:absolute;top:50%;right:0;transform:translateY(-50%)}.next-tabs[dir=rtl].next-medium .next-tabs-nav-container-scrolling{padding-left:60px;padding-right:0}.next-tabs[dir=rtl].next-medium .next-tabs-tab-close{padding-right:8px;padding-left:0}.next-tabs[dir=rtl].next-small .next-tabs-nav-container-scrolling{padding-left:56px;padding-right:0}.next-tabs[dir=rtl].next-small .next-tabs-tab-close{padding-right:8px;padding-left:0}.next-tabs[dir=rtl].next-tabs-wrapped.next-tabs-bottom>.next-tabs-bar .next-tabs-nav-extra,.next-tabs[dir=rtl].next-tabs-wrapped.next-tabs-top>.next-tabs-bar .next-tabs-nav-extra,.next-tabs[dir=rtl]>.next-tabs-bar .next-tabs-nav-extra{right:auto;left:0}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab{border:1px solid #c4c6cf;border-left:0}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab:first-child{border-left:0;border-radius:0 3px 3px 0}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab:last-child{border-radius:3px 0 0 3px;border-left:1px solid #c4c6cf}.next-tabs[dir=rtl].next-tabs-capsule>.next-tabs-bar .next-tabs-tab.active{margin-left:-1px;margin-right:auto;border-left:1px solid;border-color:#5584ff}.next-tabs[dir=rtl] .next-tabs-btn-next{left:8px;right:auto}.next-tabs[dir=rtl] .next-tabs-btn-prev{left:32px;right:auto}.next-tabs[dir=rtl] .next-tabs-btn-down{left:8px;right:auto}.next-tabs-text[dir=rtl]>.next-tabs-bar .next-tabs-tab:not(:last-child):after{content:"";position:absolute;left:0;right:auto}.config-editor{padding:10px}.config-editor .func-title{overflow:hidden;height:50px;width:100%;font-weight:500;margin-bottom:9px;font-size:18px;line-height:36px;color:#73777a}.config-editor .form{display:table}.config-editor .form .next-form-item{display:table-row}.config-editor .form .next-form-item .next-form-item-label{white-space:nowrap;word-break:keep-all}.config-editor .form .next-form-item .next-form-item-control,.config-editor .form .next-form-item .next-select{width:100%}.config-editor .form .next-form-item .next-form-item-control,.config-editor .form .next-form-item .next-form-item-label{display:table-cell}.config-editor .form .next-form-item-control{padding-bottom:12px}.config-editor .form .next-checkbox-label{color:#73777a;font-weight:400}.config-editor .form .next-radio-label{color:#73777a}.config-editor .form .switch{color:#33cde5;cursor:pointer;user-select:none}.config-editor .form .help-label>*{display:inline-block}.config-editor .form .help-label>i{color:#1dc11d;margin:0 .25em}.config-editor .button-list{text-align:right}.config-editor .button-list button{margin-left:1em;font-size:14px}.next-pagination[dir=rtl] .next-pagination-total{margin-right:0;margin-left:16px}.next-pagination[dir=rtl] .next-pagination-jump-go{margin-left:0;margin-right:4px}.next-pagination[dir=rtl] .next-pagination-size-selector-title{margin-right:0;margin-left:4px}.next-pagination[dir=rtl] .next-pagination-size-selector-btn.next-btn-text+.next-pagination-size-selector-btn{border-left:none;border-right:1px solid #dcdee3}.next-pagination[dir=rtl] .next-pagination-pages+.next-pagination-size-selector,.next-pagination[dir=rtl] .next-pagination-size-selector+.next-pagination-pages{margin-left:0;margin-right:40px}.next-pagination[dir=rtl].next-start .next-pagination-pages{float:left}.next-pagination[dir=rtl].next-end .next-pagination-pages,.next-pagination[dir=rtl].next-start .next-pagination-size-selector{float:right}.next-pagination[dir=rtl].next-end .next-pagination-size-selector{float:left}.next-pagination[dir=rtl].next-small .next-pagination-list{margin:0 4px}.next-pagination[dir=rtl].next-small .next-pagination-total{line-height:20px;vertical-align:middle}.next-pagination[dir=rtl].next-small .next-pagination-item{padding:0 6px;border-width:1px;border-radius:3px}.next-pagination[dir=rtl].next-small .next-pagination-item+.next-pagination-item{margin:0 4px 0 0}.next-pagination[dir=rtl].next-small .next-pagination-ellipsis{height:20px;line-height:20px;margin-left:8px;margin-right:8px}.next-pagination[dir=rtl].next-small .next-pagination-ellipsis .next-icon-remote,.next-pagination[dir=rtl].next-small .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination[dir=rtl].next-small .next-pagination-display,.next-pagination[dir=rtl].next-small .next-pagination-display em,.next-pagination[dir=rtl].next-small .next-pagination-jump-text{font-size:12px}.next-pagination[dir=rtl].next-small .next-pagination-jump-input{width:28px}.next-pagination[dir=rtl].next-small .next-pagination-size-selector-title{height:20px;line-height:20px;font-size:12px;vertical-align:middle}.next-pagination[dir=rtl].next-small .next-pagination-size-selector-btn{padding:0 8px}.next-pagination[dir=rtl].next-small .next-pagination-item.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-small .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination[dir=rtl].next-small .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-small .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination[dir=rtl].next-medium .next-pagination-list{margin:0 4px}.next-pagination[dir=rtl].next-medium .next-pagination-total{line-height:28px;vertical-align:middle}.next-pagination[dir=rtl].next-medium .next-pagination-item{padding:0 10px;border-width:1px;border-radius:3px}.next-pagination[dir=rtl].next-medium .next-pagination-item+.next-pagination-item{margin:0 4px 0 0}.next-pagination[dir=rtl].next-medium .next-pagination-ellipsis{height:28px;line-height:28px;margin-left:8px;margin-right:8px}.next-pagination[dir=rtl].next-medium .next-pagination-ellipsis .next-icon-remote,.next-pagination[dir=rtl].next-medium .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination[dir=rtl].next-medium .next-pagination-display,.next-pagination[dir=rtl].next-medium .next-pagination-display em,.next-pagination[dir=rtl].next-medium .next-pagination-jump-text{font-size:12px}.next-pagination[dir=rtl].next-medium .next-pagination-jump-input{width:36px}.next-pagination[dir=rtl].next-medium .next-pagination-size-selector-title{height:28px;line-height:28px;font-size:12px;vertical-align:middle}.next-pagination[dir=rtl].next-medium .next-pagination-size-selector-btn{padding:0 12px}.next-pagination[dir=rtl].next-medium .next-pagination-item.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-medium .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination[dir=rtl].next-medium .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-medium .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination[dir=rtl].next-large .next-pagination-list{margin:0 8px}.next-pagination[dir=rtl].next-large .next-pagination-total{line-height:40px;vertical-align:middle}.next-pagination[dir=rtl].next-large .next-pagination-item{padding:0 15px;border-width:1px;border-radius:3px}.next-pagination[dir=rtl].next-large .next-pagination-item+.next-pagination-item{margin:0 8px 0 0}.next-pagination[dir=rtl].next-large .next-pagination-ellipsis{height:40px;line-height:40px;margin-left:8px;margin-right:8px}.next-pagination[dir=rtl].next-large .next-pagination-ellipsis .next-icon-remote,.next-pagination[dir=rtl].next-large .next-pagination-ellipsis:before{width:16px;font-size:16px;line-height:inherit}.next-pagination[dir=rtl].next-large .next-pagination-display,.next-pagination[dir=rtl].next-large .next-pagination-display em,.next-pagination[dir=rtl].next-large .next-pagination-jump-text{font-size:16px}.next-pagination[dir=rtl].next-large .next-pagination-jump-input{width:48px}.next-pagination[dir=rtl].next-large .next-pagination-size-selector-title{height:40px;line-height:40px;font-size:16px;vertical-align:middle}.next-pagination[dir=rtl].next-large .next-pagination-size-selector-btn{padding:0 16px}.next-pagination[dir=rtl].next-large .next-pagination-item.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-large .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination[dir=rtl].next-large .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination[dir=rtl].next-large .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination{font-size:0}.next-pagination,.next-pagination *,.next-pagination :after,.next-pagination :before{box-sizing:border-box}.next-pagination:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-pagination-total{display:inline-block;font-size:14px;margin-right:16px}.next-pagination-pages{display:inline-block}.next-pagination-list{display:inline-block;vertical-align:top}.next-pagination .next-pagination-item:not([disabled]){display:inline-block;border-style:solid;border-color:#c4c6cf;background:#fff;color:#333;box-shadow:none}.next-pagination .next-pagination-item.next-current{border-color:#5584ff;background:#5584ff;color:#fff;box-shadow:none}.next-pagination .next-pagination-item.next-current:focus,.next-pagination .next-pagination-item.next-current:hover{border-color:transparent;background:#3e71f7;color:#fff;box-shadow:none}.next-pagination-ellipsis{display:inline-block;color:#999;vertical-align:top}.next-pagination-display{display:inline-block;margin:0 16px;color:#333;vertical-align:middle}.next-pagination-display em{font-style:normal;color:#5584ff}.next-pagination-jump-text{display:inline-block;vertical-align:middle;color:#999}.next-pagination-jump-input{margin:0 4px;vertical-align:top}.next-pagination-jump-go{margin-left:4px;vertical-align:top}.next-pagination-size-selector{display:inline-block;position:relative}.next-pagination-size-selector-title{margin-right:4px;color:#999}.next-pagination-size-selector-filter{display:inline-block;vertical-align:middle}.next-pagination-size-selector-dropdown{vertical-align:top;min-width:64px}.next-pagination-size-selector-dropdown .next-select-inner,.next-pagination-size-selector-popup{min-width:64px}.next-pagination-size-selector-btn.next-btn-text{height:auto;line-height:normal;color:#666;border-radius:0}.next-pagination-size-selector-btn.next-btn-text.next-current{color:#5584ff}.next-pagination-size-selector-btn.next-btn-text+.next-pagination-size-selector-btn{border-left:1px solid #dcdee3}.next-pagination-pages+.next-pagination-size-selector,.next-pagination-size-selector+.next-pagination-pages{margin-left:40px}.next-pagination.next-hide{display:none}.next-pagination.next-start .next-pagination-pages{float:right}.next-pagination.next-end .next-pagination-pages,.next-pagination.next-start .next-pagination-size-selector{float:left}.next-pagination.next-end .next-pagination-size-selector{float:right}.next-pagination.next-small .next-pagination-list{margin:0 4px}.next-pagination.next-small .next-pagination-total{line-height:20px;vertical-align:middle}.next-pagination.next-small .next-pagination-item{padding:0 6px;border-width:1px;border-radius:3px}.next-pagination.next-small .next-pagination-item+.next-pagination-item{margin:0 0 0 4px}.next-pagination.next-small .next-pagination-ellipsis{height:20px;line-height:20px;margin-left:8px;margin-right:8px}.next-pagination.next-small .next-pagination-ellipsis .next-icon-remote,.next-pagination.next-small .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination.next-small .next-pagination-display,.next-pagination.next-small .next-pagination-display em,.next-pagination.next-small .next-pagination-jump-text{font-size:12px}.next-pagination.next-small .next-pagination-jump-input{width:28px}.next-pagination.next-small .next-pagination-size-selector-title{height:20px;line-height:20px;font-size:12px;vertical-align:middle}.next-pagination.next-small .next-pagination-size-selector-btn{padding:0 8px}.next-pagination.next-small .next-pagination-item.next-next:not([disabled]) i,.next-pagination.next-small .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination.next-small .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination.next-small .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination.next-small.next-arrow-only .next-pagination-item.next-next,.next-pagination.next-small.next-arrow-only .next-pagination-item.next-prev{width:20px;padding:0}.next-pagination.next-small.next-arrow-only .next-pagination-item.next-next .next-icon,.next-pagination.next-small.next-arrow-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-small.next-arrow-prev-only .next-pagination-item.next-prev{width:20px;padding:0}.next-pagination.next-small.next-arrow-prev-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-small.next-no-border .next-pagination-item.next-next,.next-pagination.next-small.next-no-border .next-pagination-item.next-prev{padding:0;border:none;background-color:transparent;box-shadow:none}.next-pagination.next-small.next-no-border .next-pagination-item.next-next .next-icon,.next-pagination.next-small.next-no-border .next-pagination-item.next-prev .next-icon{margin:0}.next-pagination.next-small.next-no-border .next-pagination-item.next-next:not([disabled]):hover i,.next-pagination.next-small.next-no-border .next-pagination-item.next-prev:not([disabled]):hover i{color:#5584ff}.next-pagination.next-small.next-no-border .next-pagination-display{margin:0 8px}.next-pagination.next-small.next-mini .next-pagination-item.next-prev{margin-right:4px}.next-pagination.next-small.next-mini .next-pagination-item.next-next{margin-left:4px}.next-pagination.next-medium .next-pagination-list{margin:0 4px}.next-pagination.next-medium .next-pagination-total{line-height:28px;vertical-align:middle}.next-pagination.next-medium .next-pagination-item{padding:0 10px;border-width:1px;border-radius:3px}.next-pagination.next-medium .next-pagination-item+.next-pagination-item{margin:0 0 0 4px}.next-pagination.next-medium .next-pagination-ellipsis{height:28px;line-height:28px;margin-left:8px;margin-right:8px}.next-pagination.next-medium .next-pagination-ellipsis .next-icon-remote,.next-pagination.next-medium .next-pagination-ellipsis:before{width:12px;font-size:12px;line-height:inherit}.next-pagination.next-medium .next-pagination-display,.next-pagination.next-medium .next-pagination-display em,.next-pagination.next-medium .next-pagination-jump-text{font-size:12px}.next-pagination.next-medium .next-pagination-jump-input{width:36px}.next-pagination.next-medium .next-pagination-size-selector-title{height:28px;line-height:28px;font-size:12px;vertical-align:middle}.next-pagination.next-medium .next-pagination-size-selector-btn{padding:0 12px}.next-pagination.next-medium .next-pagination-item.next-next:not([disabled]) i,.next-pagination.next-medium .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination.next-medium .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination.next-medium .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-next,.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-prev{width:28px;padding:0}.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-next .next-icon,.next-pagination.next-medium.next-arrow-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-medium.next-arrow-prev-only .next-pagination-item.next-prev{width:28px;padding:0}.next-pagination.next-medium.next-arrow-prev-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-medium.next-no-border .next-pagination-item.next-next,.next-pagination.next-medium.next-no-border .next-pagination-item.next-prev{padding:0;border:none;background-color:transparent;box-shadow:none}.next-pagination.next-medium.next-no-border .next-pagination-item.next-next .next-icon,.next-pagination.next-medium.next-no-border .next-pagination-item.next-prev .next-icon{margin:0}.next-pagination.next-medium.next-no-border .next-pagination-item.next-next:not([disabled]):hover i,.next-pagination.next-medium.next-no-border .next-pagination-item.next-prev:not([disabled]):hover i{color:#5584ff}.next-pagination.next-medium.next-no-border .next-pagination-display{margin:0 12px}.next-pagination.next-medium.next-mini .next-pagination-item.next-prev{margin-right:4px}.next-pagination.next-medium.next-mini .next-pagination-item.next-next{margin-left:4px}.next-pagination.next-large .next-pagination-list{margin:0 8px}.next-pagination.next-large .next-pagination-total{line-height:40px;vertical-align:middle}.next-pagination.next-large .next-pagination-item{padding:0 15px;border-width:1px;border-radius:3px}.next-pagination.next-large .next-pagination-item+.next-pagination-item{margin:0 0 0 8px}.next-pagination.next-large .next-pagination-ellipsis{height:40px;line-height:40px;margin-left:8px;margin-right:8px}.next-pagination.next-large .next-pagination-ellipsis .next-icon-remote,.next-pagination.next-large .next-pagination-ellipsis:before{width:16px;font-size:16px;line-height:inherit}.next-pagination.next-large .next-pagination-display,.next-pagination.next-large .next-pagination-display em,.next-pagination.next-large .next-pagination-jump-text{font-size:16px}.next-pagination.next-large .next-pagination-jump-input{width:48px}.next-pagination.next-large .next-pagination-size-selector-title{height:40px;line-height:40px;font-size:16px;vertical-align:middle}.next-pagination.next-large .next-pagination-size-selector-btn{padding:0 16px}.next-pagination.next-large .next-pagination-item.next-next:not([disabled]) i,.next-pagination.next-large .next-pagination-item.next-prev:not([disabled]) i{color:#666}.next-pagination.next-large .next-pagination-item:hover.next-next:not([disabled]) i,.next-pagination.next-large .next-pagination-item:hover.next-prev:not([disabled]) i{color:#333}.next-pagination.next-large.next-arrow-only .next-pagination-item.next-next,.next-pagination.next-large.next-arrow-only .next-pagination-item.next-prev{width:40px;padding:0}.next-pagination.next-large.next-arrow-only .next-pagination-item.next-next .next-icon,.next-pagination.next-large.next-arrow-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-large.next-arrow-prev-only .next-pagination-item.next-prev{width:40px;padding:0}.next-pagination.next-large.next-arrow-prev-only .next-pagination-item.next-prev .next-icon{margin:0 auto}.next-pagination.next-large.next-no-border .next-pagination-item.next-next,.next-pagination.next-large.next-no-border .next-pagination-item.next-prev{padding:0;border:none;background-color:transparent;box-shadow:none}.next-pagination.next-large.next-no-border .next-pagination-item.next-next .next-icon,.next-pagination.next-large.next-no-border .next-pagination-item.next-prev .next-icon{margin:0}.next-pagination.next-large.next-no-border .next-pagination-item.next-next:not([disabled]):hover i,.next-pagination.next-large.next-no-border .next-pagination-item.next-prev:not([disabled]):hover i{color:#5584ff}.next-pagination.next-large.next-no-border .next-pagination-display{margin:0 16px}.next-pagination.next-large.next-mini .next-pagination-item.next-prev{margin-right:8px}.next-pagination.next-large.next-mini .next-pagination-item.next-next{margin-left:8px}.next-progress-circle[dir=rtl] .next-progress-circle-container{transform:scaleX(-1)}.next-progress-line[dir=rtl] .next-progress-line-overlay{left:auto;right:0}.next-progress-line,.next-progress-line *,.next-progress-line :after,.next-progress-line :before{box-sizing:border-box}.next-progress-line{width:100%;display:inline-block;position:relative}.next-progress-line-container{display:inline-block;width:100%;vertical-align:middle}.next-progress-line-underlay{position:relative;width:100%;background-color:#ebecf0}.next-progress-line-overlay{position:absolute;left:0;top:0;transition:all .3s ease}.next-progress-line-overlay-normal{background-color:#5584ff}.next-progress-line-overlay-success{background-color:#46bc15}.next-progress-line-overlay-error,.next-progress-line-overlay-started{background-color:#ff3000}.next-progress-line-overlay-middle{background-color:#ff9300}.next-progress-line-overlay-finishing{background-color:#46bc15}.next-progress-line.next-small .next-progress-line-underlay{border-radius:20px;height:4px}.next-progress-line.next-small .next-progress-line-overlay{height:4px;border-radius:20px;top:50%;margin-top:-2px}.next-progress-line.next-small .next-progress-line-text{font-size:12px;line-height:4px}.next-progress-line.next-medium .next-progress-line-underlay{border-radius:20px;height:8px}.next-progress-line.next-medium .next-progress-line-overlay{height:8px;border-radius:20px;top:50%;margin-top:-4px}.next-progress-line.next-medium .next-progress-line-text{font-size:12px;line-height:8px}.next-progress-line.next-large .next-progress-line-underlay{border-radius:20px;height:12px}.next-progress-line.next-large .next-progress-line-overlay{height:12px;border-radius:20px;top:50%;margin-top:-6px}.next-progress-line.next-large .next-progress-line-text{font-size:12px;line-height:12px}.next-progress-line-show-info .next-progress-line-container{padding-right:60px;margin-right:-60px}.next-progress-line-show-info .next-progress-line-text{width:50px;text-align:left;margin-left:10px;vertical-align:middle;display:inline-block;color:#333}.next-progress-line-show-border .next-progress-line-underlay{border:1px solid #dcdee3}.next-progress-line-show-border.next-small .next-progress-line-underlay{border-radius:20px;height:6px}.next-progress-line-show-border.next-small .next-progress-line-overlay{height:4px;border-radius:20px;top:50%;margin-top:-2px}.next-progress-line-show-border.next-small .next-progress-line-text{font-size:12px;line-height:6px}.next-progress-line-show-border.next-medium .next-progress-line-underlay{border-radius:20px;height:10px}.next-progress-line-show-border.next-medium .next-progress-line-overlay{height:8px;border-radius:20px;top:50%;margin-top:-4px}.next-progress-line-show-border.next-medium .next-progress-line-text{font-size:12px;line-height:10px}.next-progress-line-show-border.next-large .next-progress-line-underlay{border-radius:20px;height:14px}.next-progress-line-show-border.next-large .next-progress-line-overlay{height:12px;border-radius:20px;top:50%;margin-top:-6px}.next-progress-line-show-border.next-large .next-progress-line-text{font-size:12px;line-height:14px}.next-progress-circle,.next-progress-circle *,.next-progress-circle :after,.next-progress-circle :before{box-sizing:border-box}.next-progress-circle{position:relative;display:inline-block}.next-progress-circle-underlay{stroke-width:8px;stroke:#ebecf0}.next-progress-circle-overlay{transition:all .3s ease;stroke-linecap:round;stroke-width:8px}.next-progress-circle-overlay-normal{stroke:#5584ff}.next-progress-circle-overlay-success{stroke:#46bc15}.next-progress-circle-overlay-error,.next-progress-circle-overlay-started{stroke:#ff3000}.next-progress-circle-overlay-middle{stroke:#ff9300}.next-progress-circle-overlay-finishing{stroke:#46bc15}.next-progress-circle.next-small{width:100px;height:100px;font-size:20px}.next-progress-circle.next-medium{width:116px;height:116px;font-size:24px}.next-progress-circle.next-large{width:132px;height:132px;font-size:36px}.next-progress-circle-text{display:block;position:absolute;width:100%;top:50%;left:0;text-align:center;line-height:1;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:transform .3s ease;color:#333}.next-upload-list[dir=rtl].next-upload-list-text .next-upload-list-item{padding:4px 8px 4px 36px}.next-upload-list[dir=rtl].next-upload-list-text .next-icon{left:12px;right:auto}.next-upload-list[dir=rtl].next-upload-list-image .next-icon-close{float:left;margin-left:4px;margin-right:0}.next-upload-list[dir=rtl].next-upload-list-image .next-upload-list-item-thumbnail{float:right;margin-left:8px;margin-right:0}.next-upload-list[dir=rtl].next-upload-list-image .next-upload-list-item-progress{margin-right:56px;margin-left:20px}.next-upload,.next-upload *,.next-upload :after,.next-upload :before{box-sizing:border-box}.next-upload-inner{outline:0;display:inline-block}.next-upload-inner.next-hidden{display:none}.next-upload-list{overflow:hidden}.next-upload-list,.next-upload-list *,.next-upload-list :after,.next-upload-list :before{box-sizing:border-box}.next-upload-list-item{position:relative}.next-upload-list-item.next-hidden{display:none}.next-upload-list-item-name{text-decoration:none}.next-upload.next-disabled{border-color:#e6e7eb!important;color:#ccc!important}.next-upload.next-disabled .next-icon-close{cursor:not-allowed!important}.next-upload.next-disabled .next-upload-inner *{color:#ccc!important;border-color:#e6e7eb!important;cursor:not-allowed!important}.next-upload-list-text .next-upload-list-item{background-color:#f2f3f7;padding:4px 36px 4px 8px;height:40px;line-height:32px;font-size:12px;overflow:hidden;transition:all .1s linear;border-radius:0}.next-upload-list-text .next-upload-list-item:not(:last-child){margin-bottom:4px}.next-upload-list-text .next-upload-list-item .next-icon{position:absolute;top:0;right:12px;color:#999;cursor:pointer;text-align:center;transition:all .1s linear;line-height:40px}.next-upload-list-text .next-upload-list-item .next-icon .next-icon-remote,.next-upload-list-text .next-upload-list-item .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-upload-list-text .next-upload-list-item:hover{background-color:#f2f3f7}.next-upload-list-text .next-upload-list-item:hover .next-icon{color:#666}.next-upload-list-text .next-upload-list-item-name-wrap{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin-right:4px}.next-upload-list-text .next-upload-list-item-name{color:#333;transition:all .1s linear}.next-upload-list-text .next-upload-list-item-size{color:#999;margin-left:8px}.next-upload-list-text .next-upload-list-item-uploading{line-height:16px}.next-upload-list-text .next-upload-list-item-uploading .next-upload-list-item-progress{line-height:0;padding-top:4px;padding-bottom:4px}.next-upload-list-text .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-underlay{height:8px}.next-upload-list-text .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-overlay{height:8px;margin-top:-4px}.next-upload-list-text .next-upload-list-item-done{line-height:32px}.next-upload-list-text .next-upload-list-item-done:hover .next-upload-list-item-name,.next-upload-list-text .next-upload-list-item-done:hover .next-upload-list-item-size{color:#5584ff}.next-upload-list-text .next-upload-list-item-error{background-color:#ffece4!important}.next-upload-list-text .next-upload-list-item-error.next-upload-list-item-error-with-msg{line-height:16px}.next-upload-list-text .next-upload-list-item-error-msg{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#ff3000}.next-upload-list-image .next-upload-list-item{box-sizing:content-box;border:1px solid #dcdee3;background-color:#fff;padding:8px;height:48px;line-height:48px;font-size:12px;transition:all .1s linear;overflow:hidden;border-radius:0}.next-upload-list-image .next-upload-list-item:not(:last-child){margin-bottom:4px}.next-upload-list-image .next-upload-list-item:after{visibility:hidden;display:block;height:0;font-size:0;content:"\0020";clear:both}.next-upload-list-image .next-upload-list-item .next-icon-close{float:right;margin-right:4px;cursor:pointer;color:#999;text-align:center}.next-upload-list-image .next-upload-list-item .next-icon-close .next-icon-remote,.next-upload-list-image .next-upload-list-item .next-icon-close:before{width:12px;font-size:12px;line-height:inherit}.next-upload-list-image .next-upload-list-item:hover{border-color:#5584ff}.next-upload-list-image .next-upload-list-item:hover .next-icon-close{color:#666}.next-upload-list-image .next-upload-list-item-name{display:block;color:#333;margin-left:56px;margin-right:20px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:all .1s linear}.next-upload-list-image .next-upload-list-item-size{color:#999;margin-left:8px}.next-upload-list-image .next-upload-list-item-done:hover .next-upload-list-item-name,.next-upload-list-image .next-upload-list-item-done:hover .next-upload-list-item-size{color:#5584ff}.next-upload-list-image .next-upload-list-item-thumbnail{float:left;width:48px;height:48px;color:#ccc;border:1px solid #dcdee3;border-radius:0;background-color:#f2f3f7;margin-right:8px;vertical-align:middle;text-align:center;overflow:hidden;box-sizing:border-box}.next-upload-list-image .next-upload-list-item-thumbnail img{width:100%;height:100%}.next-upload-list-image .next-upload-list-item-thumbnail .next-icon{display:block;margin:0;line-height:48px}.next-upload-list-image .next-upload-list-item-thumbnail .next-icon .next-icon-remote,.next-upload-list-image .next-upload-list-item-thumbnail .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-upload-list-image .next-upload-list-item-error{border-color:#ff3000!important;background-color:#fff}.next-upload-list-image .next-upload-list-item-uploading{background-color:#fff}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-name{height:24px;line-height:24px}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-progress{margin-left:56px;margin-right:20px;line-height:0;padding-top:8px;padding-bottom:8px}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-underlay{height:8px}.next-upload-list-image .next-upload-list-item-uploading .next-upload-list-item-progress .next-progress-line-overlay{height:8px;margin-top:-4px}.next-upload-list-image .next-upload-list-item-error-with-msg .next-upload-list-item-error-msg,.next-upload-list-image .next-upload-list-item-error-with-msg .next-upload-list-item-name{height:24px;line-height:24px}.next-upload-list-image .next-upload-list-item-error-with-msg .next-upload-list-item-error-msg{margin-left:56px;margin-right:20px;color:#ff3000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.next-upload-list-card{display:inline-block}.next-upload-list-card .next-upload-list-item{vertical-align:middle;float:left}.next-upload-list-card .next-upload-list-item:not(:last-child){margin-right:12px}.next-upload-list-card .next-upload-list-item-wrapper{position:relative;border:1px solid #c4c6cf;width:100px;height:100px;padding:0;background-color:transparent}.next-upload-list-card .next-upload-list-item-thumbnail{display:table;text-align:center;vertical-align:middle;width:100%;height:100%;color:#ccc;font-size:12px}.next-upload-list-card .next-upload-list-item-thumbnail img{width:100%;height:100%}.next-upload-list-card .next-upload-list-item-thumbnail img:focus{outline:0}.next-upload-list-card .next-upload-list-item-thumbnail .next-icon{width:100%}.next-upload-list-card .next-upload-list-item-thumbnail .next-icon .next-icon-remote,.next-upload-list-card .next-upload-list-item-thumbnail .next-icon:before{width:48px;font-size:48px;line-height:inherit}.next-upload-list-card .next-upload-list-item-handler{display:table-cell;width:100%;vertical-align:middle}.next-upload-list-card .next-upload-list-item-name{display:block;width:100px;text-align:center;margin-top:4px;font-size:12px;color:#666;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.next-upload-list-card .next-upload-list-item-progress{position:absolute;font-size:0;bottom:0;left:0;width:100%}.next-upload-list-card .next-upload-list-item-progress .next-progress-line-underlay{border-radius:0;height:8px}.next-upload-list-card .next-upload-list-item-progress .next-progress-line-overlay{border-radius:0;height:8px;margin-top:-4px}.next-upload-list-card .next-upload-list-item-uploading .next-upload-list-item-wrapper{background-color:#f7f8fa}.next-upload-list-card .next-upload-list-item:hover .next-upload-tool{opacity:.8}.next-upload-list-card .next-upload-list-item .next-upload-tool{position:absolute;z-index:1;background-color:rgba(0,0,0,.7);transition:all .1s linear;opacity:0;width:100%;height:28px;left:0;bottom:0}.next-upload-list-card .next-upload-list-item .next-upload-tool .next-icon{width:49%;text-align:center;line-height:28px;color:#fff}.next-upload-list-card .next-upload-list-item .next-upload-tool .next-icon .next-icon-remote,.next-upload-list-card .next-upload-list-item .next-upload-tool .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-upload-list-card .next-upload-list-item .next-upload-tool.next-noclose .next-icon{width:100%}.next-upload-list-card .next-upload-list-item .next-upload-tool-close{cursor:pointer}.next-upload-list-card .next-upload-list-item .next-upload-tool-download-icon{border-right:1px solid #fff}.next-upload-list-card .next-upload-list-item-error .next-upload-list-item-wrapper{border-color:#ff3000}.next-upload-card{border:1px dashed #c4c6cf;width:100px;height:100px;background-color:#fff;text-align:center;cursor:pointer;transition:border-color .1s linear;display:table-cell;vertical-align:middle}.next-upload-card .next-icon{color:#c4c6cf}.next-upload-card .next-icon .next-icon-remote,.next-upload-card .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-upload-card .next-upload-text{font-size:12px;margin-top:12px;color:#666;outline:none}.next-upload-card:hover{border-color:#5584ff}.next-upload-card:hover .next-icon,.next-upload-card:hover .next-upload-text{color:#5584ff}.next-upload-dragable .next-upload-inner{display:block}.next-upload-dragable .next-upload-drag{border:1px dashed #c4c6cf;transition:border-color .1s linear;cursor:pointer;border-radius:3px;background-color:transparent;text-align:center;margin-bottom:4px}.next-upload-dragable .next-upload-drag-icon{margin:20px 0 0;color:#666}.next-upload-dragable .next-upload-drag-icon .next-upload-drag-upload-icon:before{content:"";font-size:24px}.next-upload-dragable .next-upload-drag-text{margin:12px 0 0;font-size:14px;color:#666}.next-upload-dragable .next-upload-drag-hint{margin:4px 0 20px;font-size:12px;color:#999}.next-upload-dragable .next-upload-drag-over{border-color:#5584ff}.next-collapse[dir=rtl] .next-collapse-panel-title{padding:8px 28px 8px 0}.next-collapse[dir=rtl] .next-collapse-panel-icon{left:inherit;right:12px;transform:rotate(270deg);margin-left:0;margin-right:0}.next-collapse[dir=rtl] .next-collapse-panel-icon .next-icon-remote,.next-collapse[dir=rtl] .next-collapse-panel-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-collapse[dir=rtl] .next-collapse-panel-icon{transform:scale(.5) rotate(270deg);margin-left:-4px;margin-right:-4px}.next-collapse[dir=rtl] .next-collapse-panel-icon:before{width:16px;font-size:16px}}.next-collapse{border:1px solid #dcdee3;border-radius:3px}.next-collapse,.next-collapse *,.next-collapse :after,.next-collapse :before{box-sizing:border-box}.next-collapse:focus,.next-collapse :focus{outline:0}.next-collapse-panel:not(:first-child){border-top:1px solid #dcdee3}.next-collapse .next-collapse-panel-icon{position:absolute;color:#333;transition:transform .1s linear;left:12px;margin-top:-2px;transform:rotate(90deg);margin-left:0;margin-right:0}.next-collapse .next-collapse-panel-icon .next-icon-remote,.next-collapse .next-collapse-panel-icon:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-collapse .next-collapse-panel-icon{transform:scale(.5) rotate(90deg);margin-left:-4px;margin-right:-4px}.next-collapse .next-collapse-panel-icon:before{width:16px;font-size:16px}}.next-collapse-panel-title{position:relative;line-height:20px;background:#f2f3f7;font-size:14px;font-weight:400;color:#333;cursor:pointer;padding:8px 0 8px 28px;transition:background .1s linear}.next-collapse-panel-title:hover{background:#ebecf0;color:#333;font-weight:400}.next-collapse-panel-title:hover .next-collapse-panel-icon{color:#333}.next-collapse-panel-content{height:0;padding:0 16px;background:#fff;font-size:12px;color:#666;transition:all .3s ease;opacity:0}.next-collapse-panel-expanded>.next-collapse-panel-content{display:block;padding:12px 16px;height:auto;opacity:1}.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded{transform:rotate(180deg);margin-left:0;margin-right:0}.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded .next-icon-remote,.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded:before{width:8px;font-size:8px;line-height:inherit}@media (-webkit-min-device-pixel-ratio:0) and (min-resolution:0.001dpcm){.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded{transform:scale(.5) rotate(180deg);margin-left:-4px;margin-right:-4px}.next-collapse .next-collapse-panel-icon.next-collapse-panel-icon-expanded:before{width:16px;font-size:16px}}.next-collapse-disabled,.next-collapse-panel-disabled:not(:first-child){border-color:#e6e7eb}.next-collapse-panel-disabled>.next-collapse-panel-title{cursor:not-allowed;color:#ccc;background:#f2f3f7}.next-collapse-panel-disabled .next-collapse-panel-icon{color:#ccc}.next-collapse-panel-disabled .next-collapse-panel-title:hover{font-weight:400}.next-collapse-panel-disabled .next-collapse-panel-title:hover .next-collapse-panel-icon{color:#ccc}.next-collapse-panel-disabled:hover{color:#ccc;background:#f2f3f7}.next-search-simple[dir=rtl].next-large .next-search-icon{margin-left:12px;margin-right:0}.next-search-simple[dir=rtl].next-medium .next-search-icon{margin-left:8px;margin-right:0}.next-search-simple[dir=rtl].next-normal .next-search-left .next-search-left-addon{border-left:1px solid #c4c6cf;border-right:none}.next-search-simple[dir=rtl].next-dark .next-search-left{border-color:#c4c6cf}.next-search-simple[dir=rtl].next-dark .next-search-left .next-search-left-addon{border-right:1px solid #c4c6cf}.next-search-simple[dir=rtl].next-dark:hover .next-search-left{border-color:#c4c6cf}.next-search-simple[dir=rtl].next-dark .next-search-icon{color:#999}.next-search-simple[dir=rtl].next-dark .next-search-icon:hover{color:#666}.next-search-normal[dir=rtl] .next-search-left{border-left:none;border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-left-radius:0;border-bottom-left-radius:0}.next-search-normal[dir=rtl] .next-search-btn.next-btn{border-radius:3px 0 0 3px!important}.next-search-normal[dir=rtl] .next-input{border-radius:0 3px 3px 0}.next-search-normal[dir=rtl].next-primary .next-input{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:1px;border-bottom-right-radius:1px}.next-search-normal[dir=rtl].next-primary .next-search-left .next-search-left-addon{border-left:1px solid #e6e7eb;border-right:none}.next-search-normal[dir=rtl].next-secondary .next-input{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:1px;border-bottom-right-radius:1px}.next-search-normal[dir=rtl].next-secondary .next-search-left .next-search-left-addon{border-left:1px solid #e6e7eb;border-right:none}.next-search-normal[dir=rtl].next-normal .next-input{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:1px;border-bottom-right-radius:1px}.next-search-normal[dir=rtl].next-normal .next-search-left .next-search-left-addon{border-left:1px solid #e6e7eb;border-right:none}.next-search-normal[dir=rtl].next-dark .next-search-left .next-search-left-addon{border-left:1px solid #5584ff;border-right:none}.next-search{width:100%;display:inline-block}.next-search,.next-search *,.next-search :after,.next-search :before{box-sizing:border-box}.next-search .next-input,.next-search .next-select{border:none}.next-search .next-select .next-input,.next-search .next-select .next-input .next-input-text-field{height:auto}.next-search .next-search-left{border-style:solid;transition:all .1s linear}.next-search .next-search-left-addon .next-input,.next-search .next-search-left-addon .next-select-trigger-search{min-height:100%;border-bottom-right-radius:0;border-top-right-radius:0}.next-search .next-search-left-addon .next-select-values{line-height:1}.next-search .next-search-left-addon.next-input-group-addon .next-select{margin:0}.next-search .next-search-left-addon+.next-search-input .next-input{border-bottom-left-radius:0;border-top-left-radius:0}.next-search .next-search-input{width:100%}.next-search .next-search-btn{box-shadow:none}.next-search-normal{width:600px}.next-search-normal .next-search-left{border-top-left-radius:3px;border-bottom-left-radius:3px}.next-search-normal .next-input{border-radius:3px 0 0 3px}.next-search-normal .next-btn{border-radius:0 3px 3px 0}.next-search-normal.next-primary .next-search-left{border-color:#5584ff}.next-search-normal.next-primary .next-search-left .next-search-left-addon{border-right:1px solid #e6e7eb}.next-search-normal.next-primary:hover .next-btn,.next-search-normal.next-primary:hover .next-search-left{border-color:#5584ff}.next-search-normal.next-primary .next-search-btn{background:#5584ff;border-color:#5584ff;color:#fff}.next-search-normal.next-primary .next-search-btn:hover{background:#3e71f7;border-color:#5584ff;color:#fff}.next-search-normal.next-primary .next-search-btn .next-icon,.next-search-normal.next-primary .next-search-btn .next-icon:hover{color:#fff}.next-search-normal.next-primary.next-large{box-shadow:none}.next-search-normal.next-primary.next-large .next-search-btn,.next-search-normal.next-primary.next-large .next-search-left{border-width:2px;height:60px}.next-search-normal.next-primary.next-large .next-search-input{height:56px;overflow-y:hidden}.next-search-normal.next-primary.next-large .next-search-input input{height:56px;line-height:56px \0}.next-search-normal.next-primary.next-large .next-select{height:56px}.next-search-normal.next-primary.next-large .next-search-btn{font-size:16px}.next-search-normal.next-primary.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-primary.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-primary.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-primary.next-medium{box-shadow:none}.next-search-normal.next-primary.next-medium .next-search-btn,.next-search-normal.next-primary.next-medium .next-search-left{border-width:2px;height:40px}.next-search-normal.next-primary.next-medium .next-search-input{height:36px;overflow-y:hidden}.next-search-normal.next-primary.next-medium .next-search-input input{height:36px;line-height:36px \0}.next-search-normal.next-primary.next-medium .next-select{height:36px}.next-search-normal.next-primary.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-primary.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-primary.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-primary.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-primary .next-input{border-top-left-radius:1px;border-bottom-left-radius:1px}.next-search-normal.next-secondary .next-search-left{border-color:#c4c6cf}.next-search-normal.next-secondary .next-search-left .next-search-left-addon{border-right:1px solid #e6e7eb}.next-search-normal.next-secondary:hover .next-btn,.next-search-normal.next-secondary:hover .next-search-left{border-color:#5584ff}.next-search-normal.next-secondary .next-search-btn{background:#5584ff;border-color:#5584ff;color:#fff}.next-search-normal.next-secondary .next-search-btn:hover{background:#3e71f7;border-color:#5584ff;color:#fff}.next-search-normal.next-secondary .next-search-btn .next-icon,.next-search-normal.next-secondary .next-search-btn .next-icon:hover{color:#fff}.next-search-normal.next-secondary.next-large{box-shadow:none}.next-search-normal.next-secondary.next-large .next-search-btn,.next-search-normal.next-secondary.next-large .next-search-left{border-width:1px;height:60px}.next-search-normal.next-secondary.next-large .next-search-input{height:58px;overflow-y:hidden}.next-search-normal.next-secondary.next-large .next-search-input input{height:58px;line-height:58px \0}.next-search-normal.next-secondary.next-large .next-select{height:58px}.next-search-normal.next-secondary.next-large .next-search-btn{font-size:16px}.next-search-normal.next-secondary.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-secondary.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-secondary.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-secondary.next-medium{box-shadow:none}.next-search-normal.next-secondary.next-medium .next-search-btn,.next-search-normal.next-secondary.next-medium .next-search-left{border-width:1px;height:40px}.next-search-normal.next-secondary.next-medium .next-search-input{height:38px;overflow-y:hidden}.next-search-normal.next-secondary.next-medium .next-search-input input{height:38px;line-height:38px \0}.next-search-normal.next-secondary.next-medium .next-select{height:38px}.next-search-normal.next-secondary.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-secondary.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-secondary.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-secondary.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-secondary .next-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.next-search-normal.next-normal .next-search-left{border-color:#c4c6cf}.next-search-normal.next-normal .next-search-left .next-search-left-addon{border-right:1px solid #e6e7eb}.next-search-normal.next-normal:hover .next-btn,.next-search-normal.next-normal:hover .next-search-left{border-color:#a0a2ad}.next-search-normal.next-normal .next-search-btn{background:#f7f8fa;border-color:#c4c6cf;color:#666}.next-search-normal.next-normal .next-search-btn:hover{background:#ebecf0;border-color:#a0a2ad;color:#333}.next-search-normal.next-normal .next-search-btn .next-icon{color:#666}.next-search-normal.next-normal .next-search-btn .next-icon:hover{color:#333}.next-search-normal.next-normal.next-large{box-shadow:none}.next-search-normal.next-normal.next-large .next-search-btn,.next-search-normal.next-normal.next-large .next-search-left{border-width:1px;height:60px}.next-search-normal.next-normal.next-large .next-search-input{height:58px;overflow-y:hidden}.next-search-normal.next-normal.next-large .next-search-input input{height:58px;line-height:58px \0}.next-search-normal.next-normal.next-large .next-select{height:58px}.next-search-normal.next-normal.next-large .next-search-btn{font-size:16px}.next-search-normal.next-normal.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-normal.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-normal.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-normal.next-medium{box-shadow:none}.next-search-normal.next-normal.next-medium .next-search-btn,.next-search-normal.next-normal.next-medium .next-search-left{border-width:1px;height:40px}.next-search-normal.next-normal.next-medium .next-search-input{height:38px;overflow-y:hidden}.next-search-normal.next-normal.next-medium .next-search-input input{height:38px;line-height:38px \0}.next-search-normal.next-normal.next-medium .next-select{height:38px}.next-search-normal.next-normal.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-normal.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-normal.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-normal.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-normal .next-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.next-search-normal.next-dark .next-search-left{border-color:#5584ff}.next-search-normal.next-dark .next-search-left .next-search-left-addon{border-right:1px solid #5584ff}.next-search-normal.next-dark:hover .next-btn,.next-search-normal.next-dark:hover .next-search-left{border-color:#5584ff}.next-search-normal.next-dark .next-search-btn{background:#5584ff;border-color:#5584ff;color:#fff}.next-search-normal.next-dark .next-search-btn:hover{background:#3e71f7;border-color:#5584ff;color:#fff}.next-search-normal.next-dark .next-search-btn .next-icon,.next-search-normal.next-dark .next-search-btn .next-icon:hover,.next-search-normal.next-dark .next-select-inner,.next-search-normal.next-dark input{color:#fff}.next-search-normal.next-dark .next-input,.next-search-normal.next-dark .next-select{background:hsla(0,0%,100%,0)}.next-search-normal.next-dark.next-large{box-shadow:none}.next-search-normal.next-dark.next-large .next-search-btn,.next-search-normal.next-dark.next-large .next-search-left{border-width:1px;height:60px}.next-search-normal.next-dark.next-large .next-search-input{height:58px;overflow-y:hidden}.next-search-normal.next-dark.next-large .next-search-input input{height:58px;line-height:58px \0}.next-search-normal.next-dark.next-large .next-select{height:58px}.next-search-normal.next-dark.next-large .next-search-btn{font-size:16px}.next-search-normal.next-dark.next-large .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-dark.next-large .next-search-btn .next-icon:before{width:24px;font-size:24px;line-height:inherit}.next-search-normal.next-dark.next-large .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal.next-dark.next-medium{box-shadow:none}.next-search-normal.next-dark.next-medium .next-search-btn,.next-search-normal.next-dark.next-medium .next-search-left{border-width:1px;height:40px}.next-search-normal.next-dark.next-medium .next-search-input{height:38px;overflow-y:hidden}.next-search-normal.next-dark.next-medium .next-search-input input{height:38px;line-height:38px \0}.next-search-normal.next-dark.next-medium .next-select{height:38px}.next-search-normal.next-dark.next-medium .next-search-btn{font-size:16px}.next-search-normal.next-dark.next-medium .next-search-btn .next-icon .next-icon-remote,.next-search-normal.next-dark.next-medium .next-search-btn .next-icon:before{width:16px;font-size:16px;line-height:inherit}.next-search-normal.next-dark.next-medium .next-search-btn .next-search-btn-text{display:inline-block;padding-left:0}.next-search-normal:not([dir=rtl]) .next-search-left{border-right:none}.next-search-simple{width:300px;box-shadow:none;border-radius:3px}.next-search-simple .next-search-icon{cursor:pointer;transition:all .1s linear}.next-search-simple .next-input,.next-search-simple .next-search-left{border-radius:3px}.next-search-simple.next-large .next-search-icon{margin-right:12px}.next-search-simple.next-medium .next-search-icon{margin-right:8px}.next-search-simple.next-normal .next-search-left{border-color:#c4c6cf}.next-search-simple.next-normal .next-search-left .next-search-left-addon{border-right:1px solid #c4c6cf}.next-search-simple.next-normal:hover .next-search-left{border-color:#a0a2ad}.next-search-simple.next-normal .next-search-icon{color:#999}.next-search-simple.next-normal .next-search-icon:hover{color:#666}.next-search-simple.next-normal .next-search-left{border-width:1px}.next-search-simple.next-normal.next-large .next-search-icon .next-icon-remote,.next-search-simple.next-normal.next-large .next-search-icon:before{width:20px;font-size:20px;line-height:inherit}.next-search-simple.next-normal.next-medium .next-search-icon .next-icon-remote,.next-search-simple.next-normal.next-medium .next-search-icon:before{width:12px;font-size:12px;line-height:inherit}.next-search-simple.next-dark .next-search-left{border-color:#c4c6cf}.next-search-simple.next-dark .next-search-left .next-search-left-addon{border-right:1px solid #c4c6cf}.next-search-simple.next-dark:hover .next-search-left{border-color:#c4c6cf}.next-search-simple.next-dark .next-search-icon{color:#999}.next-search-simple.next-dark .next-search-icon:hover{color:#666}.next-search-simple.next-dark .next-select-inner,.next-search-simple.next-dark input{color:#fff}.next-search-simple.next-dark .next-input,.next-search-simple.next-dark .next-select{background:hsla(0,0%,100%,0)}.next-search-simple.next-dark .next-search-left{border-width:1px}.next-search-simple.next-dark.next-large .next-search-icon .next-icon-remote,.next-search-simple.next-dark.next-large .next-search-icon:before{width:20px;font-size:20px;line-height:inherit}.next-search-simple.next-dark.next-medium .next-search-icon .next-icon-remote,.next-search-simple.next-dark.next-medium .next-search-icon:before{width:12px;font-size:12px;line-height:inherit}.next-search-simple .next-select.next-large{height:38px}.next-search-simple .next-select.next-medium{height:26px}.next-transfer{display:inline-block}.next-transfer,.next-transfer *,.next-transfer :after,.next-transfer :before{box-sizing:border-box}.next-transfer-panel{display:inline-block;border:1px solid #dcdee3;border-radius:3px;background-color:#fff;vertical-align:middle}.next-transfer-panel-header{padding:8px 20px;border-bottom:1px solid #dcdee3;background-color:#f7f8fa;color:#333;font-size:12px}.next-transfer-panel-search{padding:0 4px;margin-top:8px;margin-bottom:0;width:100%}.next-transfer .next-transfer-panel-list{width:180px;height:160px;padding:0;border:none;box-shadow:none;border-radius:0;overflow-y:auto}.next-transfer-panel-not-found-container{display:table;width:100%;height:100%}.next-transfer-panel-not-found{display:table-cell;vertical-align:middle;text-align:center;color:#999;font-size:14px}.next-transfer-panel-item.next-focused{transition:background-color .1s linear}.next-transfer-panel-item:not(.next-disabled).next-simple:hover{color:#5584ff}.next-transfer-panel-item.next-insert-before:before{position:absolute;top:0;left:0;content:"";width:100%;border-top:1px solid #5584ff}.next-transfer-panel-item.next-insert-after:after{position:absolute;left:0;bottom:0;content:"";width:100%;border-bottom:1px solid #5584ff}.next-transfer-panel-footer{position:relative;padding:8px 20px;border-top:1px solid #dcdee3;background-color:#fff;font-size:0;box-shadow:none}.next-transfer-panel-count{margin-left:4px;font-size:12px;vertical-align:middle;color:#333}.next-transfer-panel-move-all{font-size:12px;color:#5584ff;cursor:pointer}.next-transfer-panel-move-all.next-disabled{color:#ccc;cursor:not-allowed}.next-transfer-operations{display:inline-block;vertical-align:middle;margin:0 20px}.next-transfer-move.next-icon{color:#c4c6cf}.next-transfer-operation.next-btn{display:block}.next-transfer-operation.next-btn+.next-transfer-operation.next-btn{margin-top:8px}.next-transfer-operation.next-btn .next-icon .next-icon-remote,.next-transfer-operation.next-btn .next-icon:before{width:12px;font-size:12px;line-height:inherit}.next-slick{position:relative;display:block;-webkit-touch-callout:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.next-slick,.next-slick *,.next-slick :after,.next-slick :before{box-sizing:border-box}.next-slick-initialized .next-slick-slide{display:block}.next-slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0;transform:translateZ(0)}.next-slick-list:focus{outline:none}.next-slick-list.dragging{cursor:pointer;cursor:hand}.next-slick-track{position:relative;top:0;left:0;display:block;transform:translateZ(0)}.next-slick-slide{float:left;height:100%;min-height:1px;outline:0;transition:all .1s linear}.next-slick[dir=rtl] .next-slick-slide{float:right}.next-slick-slide img{display:block}.next-slick-arrow{display:block;position:absolute;cursor:pointer;text-align:center;transition:all .1s linear}.next-slick-arrow.inner{color:#fff;background:#000;opacity:.2;padding:0;border:none}.next-slick-arrow.inner:focus,.next-slick-arrow.inner:hover{color:#fff;background:#000;opacity:.4}.next-slick-arrow.inner.disabled{color:#ccc;background:#f7f8fa;opacity:.5}.next-slick-arrow.outer{color:#666;background:transparent;opacity:.32;padding:0;border:none;border-radius:0}.next-slick-arrow.outer:focus,.next-slick-arrow.outer:hover{color:#333;background:transparent;opacity:.32}.next-slick-arrow.outer.disabled{color:#ccc;background:transparent;opacity:.32}.next-slick-arrow.disabled{cursor:not-allowed}.next-slick-dots{display:block;position:absolute;margin:0;padding:0}.next-slick-dots-item{position:relative;display:inline-block;cursor:pointer}.next-slick-dots-item button{cursor:pointer;border:0 solid #fff;outline:none;padding:0;height:8px;width:8px;border-radius:50%;background:rgba(0,0,0,.32)}.next-slick-dots-item button:hover{background-color:rgba(0,0,0,.32);border-color:#fff}.next-slick-dots-item button:focus,.next-slick-dots-item button:hover{background:hsla(0,0%,100%,.5)}.next-slick-dots-item.active button{background:#5584ff;border-color:#fff;animation:zoom .3s cubic-bezier(.86,0,.07,1)}.next-slick-dots.hoz{width:100%;bottom:12px;left:0;text-align:center}.next-slick-dots.hoz .next-slick-dots-item{margin:0 4px}.next-slick-dots.ver{width:16px;top:0;right:20px;bottom:0;display:flex;justify-content:center;flex-direction:column}.next-slick-dots.ver .next-slick-dots-item{margin:0}.next-slick.next-slick-hoz.next-slick-outer{padding:0 24px}.next-slick.next-slick-hoz .next-slick-arrow.medium{width:28px;height:56px;line-height:56px}.next-slick.next-slick-hoz .next-slick-arrow.medium .next-icon .next-icon-remote,.next-slick.next-slick-hoz .next-slick-arrow.medium .next-icon:before{width:20px;font-size:20px;line-height:inherit}.next-slick.next-slick-hoz .next-slick-arrow.medium.inner{top:calc((100% - 56px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.medium.inner.next-slick-prev{left:0}.next-slick.next-slick-hoz .next-slick-arrow.medium.inner.next-slick-next{right:0}.next-slick.next-slick-hoz .next-slick-arrow.medium.outer{top:calc((100% - 56px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.medium.outer.next-slick-prev{left:-4px}.next-slick.next-slick-hoz .next-slick-arrow.medium.outer.next-slick-next{right:-4px}.next-slick.next-slick-hoz .next-slick-arrow.large{width:48px;height:96px;line-height:96px}.next-slick.next-slick-hoz .next-slick-arrow.large .next-icon .next-icon-remote,.next-slick.next-slick-hoz .next-slick-arrow.large .next-icon:before{width:32px;font-size:32px;line-height:inherit}.next-slick.next-slick-hoz .next-slick-arrow.large.inner{top:calc((100% - 96px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.large.inner.next-slick-prev{left:0}.next-slick.next-slick-hoz .next-slick-arrow.large.inner.next-slick-next{right:0}.next-slick.next-slick-hoz .next-slick-arrow.large.outer{top:calc((100% - 96px)/2)}.next-slick.next-slick-hoz .next-slick-arrow.large.outer.next-slick-prev{left:-8px}.next-slick.next-slick-hoz .next-slick-arrow.large.outer.next-slick-next{right:-8px}.next-slick.next-slick-ver.next-slick-outer{padding:24px 0}.next-slick.next-slick-ver .next-slick-slide{display:block;height:auto}.next-slick.next-slick-ver .next-slick-arrow.medium{width:56px;height:28px;line-height:28px}.next-slick.next-slick-ver .next-slick-arrow.medium .next-icon .next-icon-remote,.next-slick.next-slick-ver .next-slick-arrow.medium .next-icon:before{width:20px;font-size:20px;line-height:inherit}.next-slick.next-slick-ver .next-slick-arrow.medium.inner{left:calc((100% - 56px)/2)}.next-slick.next-slick-ver .next-slick-arrow.medium.inner.next-slick-prev{top:0}.next-slick.next-slick-ver .next-slick-arrow.medium.inner.next-slick-next{bottom:0}.next-slick.next-slick-ver .next-slick-arrow.medium.outer{left:calc((100% - 56px)/2)}.next-slick.next-slick-ver .next-slick-arrow.medium.outer.next-slick-prev{top:-4px}.next-slick.next-slick-ver .next-slick-arrow.medium.outer.next-slick-next{bottom:-4px}.next-slick.next-slick-ver .next-slick-arrow.large{width:96px;height:48px;line-height:48px}.next-slick.next-slick-ver .next-slick-arrow.large .next-icon .next-icon-remote,.next-slick.next-slick-ver .next-slick-arrow.large .next-icon:before{width:32px;font-size:32px;line-height:inherit}.next-slick.next-slick-ver .next-slick-arrow.large.inner{left:calc((100% - 96px)/2)}.next-slick.next-slick-ver .next-slick-arrow.large.inner.next-slick-prev{top:0}.next-slick.next-slick-ver .next-slick-arrow.large.inner.next-slick-next{bottom:0}.next-slick.next-slick-ver .next-slick-arrow.large.outer{left:calc((100% - 96px)/2)}.next-slick.next-slick-ver .next-slick-arrow.large.outer.next-slick-prev{top:-16px}.next-slick.next-slick-ver .next-slick-arrow.large.outer.next-slick-next{bottom:-16px}.next-pagination-size-selector{position:static!important}.configuration-table{margin-bottom:20px}.next-sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;margin:-1px}.next-switch:after[dir=rtl]{content:" ";transition:all .1s linear;transform-origin:right center}.next-switch-medium[dir=rtl]:after,.next-switch-small[dir=rtl]:after{right:100%;transform:translateX(100%)}.next-switch-on[dir=rtl]>.next-switch-children{right:10px;left:auto;color:#fff}.next-switch-on[disabled][dir=rtl]:after{left:0;right:100%;box-shadow:1px 1px 3px 0 rgba(0,0,0,.12)}.next-switch-on.next-switch-small[dir=rtl]>.next-switch-children{right:6px;left:auto}.next-switch-off[dir=rtl]:after{right:0;transform:translateX(0);box-shadow:-1px 0 3px 0 rgba(0,0,0,.12)}.next-switch-off[dir=rtl]>.next-switch-children{left:10px;right:auto}.next-switch-off.next-switch-small[dir=rtl]>.next-switch-children{left:5px;right:auto}.next-switch{outline:none;text-align:left;transition:all .1s linear;overflow:hidden;cursor:pointer}.next-switch,.next-switch *,.next-switch :after,.next-switch :before{box-sizing:border-box}.next-switch:after{content:" ";transition:all .1s linear;transform-origin:left center}.next-switch-medium{width:56px;height:26px;border-radius:20px}.next-switch-medium:after{border:1px solid transparent;position:absolute;left:100%;transform:translateX(-100%);width:24px;height:24px;border-radius:20px;box-sizing:border-box}.next-switch-medium>.next-switch-children{font-size:12px;height:24px;line-height:24px}.next-switch-small{position:relative;display:inline-block;width:44px;height:22px}.next-switch-small,.next-switch-small:after{border:1px solid transparent;border-radius:20px}.next-switch-small:after{position:absolute;left:100%;transform:translateX(-100%);width:20px;height:20px;box-sizing:border-box}.next-switch-small>.next-switch-children{font-size:12px;position:absolute;height:20px;line-height:20px}.next-switch-on{background-color:#5584ff}.next-switch-on:after{box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#fff;border-color:transparent}.next-switch-on>.next-switch-children{left:10px}.next-switch-on:focus,.next-switch-on:hover{background-color:#3e71f7}.next-switch-on:focus:after,.next-switch-on:hover:after{background-color:#fff}.next-switch-on.next-switch-small>.next-switch-children{left:6px}.next-switch-on[disabled]{background-color:#ebecf0;cursor:not-allowed}.next-switch-on[disabled]:after{right:0;box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#f7f8fa;border-color:#e6e7eb}.next-switch-on[disabled]>.next-switch-children{color:#ccc}.next-switch-off{background-color:#fff;border-color:#c4c6cf}.next-switch-off:focus,.next-switch-off:hover{background-color:#f2f3f7;border-color:#c4c6cf}.next-switch-off:after{left:0;transform:translateX(0);box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#fff;border-color:transparent}.next-switch-off:after:focus,.next-switch-off:after:hover{background-color:#fff}.next-switch-off>.next-switch-children{right:10px;color:#999}.next-switch-off[disabled]{background-color:#f7f8fa;cursor:not-allowed}.next-switch-off[disabled]:after{box-shadow:1px 1px 3px 0 rgba(0,0,0,.12);background-color:#f7f8fa;border-color:#e6e7eb}.next-switch-off[disabled]>.next-switch-children{color:#c4c6cf}.next-switch-off.next-switch-small>.next-switch-children{right:5px}.service-management .page-title{height:30px;width:100%;line-height:30px;margin:0 0 20px;padding:0 0 0 10px;border-left:3px solid #09c;color:#ccc}.service-management .title-item{font-size:14px;color:#000;margin-right:8px}.service-management .next-switch-off{background-color:#f2f3f7;border-color:#c4c6cf}.service-detail .header-btn{float:right;margin-left:20px}.service-detail .edit-btn{margin-right:10px}.service-detail .next-form-item{margin-bottom:10px}.service-detail .loading{position:relative;width:100%}.service-detail .pagination{float:right;margin-top:15px}.service-detail .cluster-card{margin-bottom:30px}.cluster-edit-dialog .next-form-item,.instance-edit-dialog .next-form-item,.service-detail-edit-dialog .next-form-item{margin-bottom:10px}.cluster-edit-dialog .next-col-fixed-12,.instance-edit-dialog .next-col-fixed-12,.service-detail-edit-dialog .next-col-fixed-12{flex:1}.cluster-edit-dialog .next-switch-off,.instance-edit-dialog .next-switch-off,.service-detail-edit-dialog .next-switch-off{background-color:#f2f3f7;border-color:#c4c6cf}.cluster-edit-dialog .in-select,.cluster-edit-dialog .in-text,.instance-edit-dialog .in-select,.instance-edit-dialog .in-text,.service-detail-edit-dialog .in-select,.service-detail-edit-dialog .in-text{width:120px}.service-detail-edit-dialog{width:600px}.full-width{width:100%}.subscriber-list .page-title{height:30px;width:100%;line-height:30px;margin:0 0 20px;padding:0 0 0 10px;border-left:3px solid #09c;color:#ccc}.subscriber-list .title-item{font-size:14px;color:#000;margin-right:8px}.cluster-management .page-title{height:30px;width:100%;line-height:30px;margin:0 0 20px;padding:0 0 0 10px;border-left:3px solid #09c;color:#ccc}.cluster-management .title-item{font-size:14px;color:#000;margin-right:8px}:global(#root),body,html{height:100%}:global(.mainwrapper){position:absolute!important;top:0;bottom:0;left:0;right:0}:global(.sideleft){float:left;background-color:#eaedf1;position:absolute;top:0;bottom:0;z-index:2;overflow:hidden;width:180px}:global(.sideleft .toptitle){width:100%;height:70px;line-height:70px;background:#d9dee4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;text-indent:20px}:global(.maincontainer){position:absolute;width:auto;top:0;bottom:0;left:180px;right:0;overflow:hidden;overflow-y:auto;-o-transition:all .2s ease;-ms-transition:all .2s ease;-moz-transition:all .2s ease;-webkit-transition:all .2s ease}:global(.viewFramework-product-navbar .product-nav-list li .active){background-color:#fff!important}.clearfix:after{content:".";clear:both;display:block;height:0;overflow:hidden;visibility:hidden}.clearfix{zoom:1}.layouttitle{height:40px;width:200px;background-color:#09c;color:#fff;line-height:40px;text-align:center;margin:0;padding:0;font-weight:700}.linknav{height:30px;line-height:30px;text-align:center}.righttitle{height:40px;background-color:#000;width:100%;font-weight:700}.product-nav-icon{padding:15px 0 0;height:70px;margin:0}.envcontainer{padding-left:15px;margin-right:auto;margin-left:auto;max-height:450px;overflow:scroll;margin-bottom:100px;display:none;top:50px;left:230px;position:fixed;z-index:99999;width:435px;height:auto;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.envtop{height:50px;line-height:50px;position:fixed;top:0;left:320px;z-index:999;background-color:transparent;-webkit-font-smoothing:antialiased}.envcontainer-top{padding-left:15px;margin-right:auto;margin-left:auto;max-height:450px;overflow:auto;margin-bottom:100px;display:none;top:50px;left:0;position:absolute;z-index:99999;width:435px;height:auto;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.envcontainer-top .row{margin:0!important}.envcontainer-top .active{background-color:#546478}.envcontainer dl dd.active{background-color:#546478;color:#fff}.current-env{display:block;padding:0;font-size:14px;margin:0 0 5px;text-align:center}.current-env a{color:#666;text-decoration:none}.product-nav-title{height:70px;line-height:70px;margin:0;text-align:center;padding:0;font-size:14px;background:#d9dee4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.console-title{padding:16px 0}.topbar-nav-item-title{margin:0 0 10px 31px;color:#666;font-weight:700}.dl{height:100%;width:125px;overflow:auto;margin:0 15px 15px 0}.dd{height:24px;line-height:24px;overflow-x:hidden;padding-left:12px;margin-left:20px}.active{color:#fff}.dd:hover{cursor:pointer;opacity:.7;filter:70}.cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:700;color:#5a5cad}.cm-s-xq-light span.cm-atom{color:#6c8cd5}.cm-s-xq-light span.cm-number{color:#164}.cm-s-xq-light span.cm-def{text-decoration:underline}.cm-s-xq-light span.cm-type,.cm-s-xq-light span.cm-variable,.cm-s-xq-light span.cm-variable-2,.cm-s-xq-light span.cm-variable-3{color:#000}.cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.cm-s-xq-light span.cm-string{color:red}.cm-s-xq-light span.cm-meta{color:#ff0}.cm-s-xq-light span.cm-qualifier{color:grey}.cm-s-xq-light span.cm-builtin{color:#7ea656}.cm-s-xq-light span.cm-bracket{color:#cc7}.cm-s-xq-light span.cm-tag{color:#3f7f7f}.cm-s-xq-light span.cm-attribute{color:#7f007f}.cm-s-xq-light span.cm-error{color:red}.cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important;background:#ff0}.CodeMirror{border:1px solid #eee}.CodeMirror-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;height:auto;z-index:9999}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:infobackground;border:1px solid #000;border-radius:4px 4px 4px 4px;color:infotext;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-position:0 100%;background-repeat:repeat-x}.CodeMirror-lint-mark-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==")}.CodeMirror-lint-mark-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-error,.CodeMirror-lint-marker-warning{background-position:50%;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{padding-left:18px;background-position:0 0;background-repeat:no-repeat}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=")}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=")}.CodeMirror-lint-marker-multiple{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:100% 100%;width:100%;height:100%}@media (min-width:992px){.modal-lg{width:980px}}@media (min-width:768px) and (max-width:992px){.modal-lg{width:750px}}.modal-body table.narrow-table td{padding:8px 0}.add-on.form-control{margin-left:-4px;box-shadow:none;font-size:28px;line-height:32px;padding:0;vertical-align:top}.text-break{word-wrap:break-word;word-break:break-all;white-space:normal}.form-inline{margin-bottom:20px}.console-title{min-height:70px}.form-horizontal .form-group .checkbox{margin-left:0;margin-right:10px}.combox_border,.combox_select{border:1px solid #c2c2c2;width:245px}.combox_border{height:auto;display:inline-block;position:relative}.combox_input{border:0;padding-left:5px;width:85%;vertical-align:middle}.form-inline .combox_input.form-control{width:85%}.combox_button{width:12%;color:#666;text-align:center;vertical-align:middle;cursor:pointer;border-left:1px solid #c2c2c2}ul.combox_select{border-top:0;padding:0;position:absolute;left:-1px;top:20px;display:none;background:#fff;max-height:300px;overflow-y:auto}ul.combox_select li{overflow:hidden;height:30px;line-height:30px;cursor:pointer}ul.combox_select li a{display:block;line-height:28px;padding:0 8px;text-decoration:none;color:#666}ul.combox_select li a:hover{text-decoration:none;background:#f5f5f5}#combox-appanme.combox_border,#combox-appanme .combox_select{width:158px}#combox-appanme .form-control{height:30px}input.error,textarea.error{border:1px solid red}.form-inline .form-group{position:relative}label.error{margin:4px 0;color:red;font-weight:400;position:absolute;right:15px;bottom:-26px}ins{background-color:#c6ffc6;text-decoration:none}del{background-color:#ffc6c6}form.vertical-margin-lg .form-group{margin-bottom:22px}.namespacewrapper{padding:5px 15px;overflow:hidden;background-color:#eee}.xrange-container{position:relative;border:1px solid #ccc;margin:0;padding:0}.xrange-container .cocofont,.xrange-container .iconfont{cursor:pointer}.xrange-container .label{display:flex;align-items:center;text-align:center;justify-content:space-between;cursor:pointer}.xrange-container .label.is-button{display:flex;border:1px solid #e6ebef;height:32px;padding:6px 12px;background-color:#f5f5f6}.xrange-container .label.is-button>i{font-size:13px}.xrange-container .label.is-empty{padding:0}.xrange-container .label.is-empty.is-button{padding:6px 12px}.xrange-container .label.is-empty>i{font-size:15px;margin-right:0}.xrange-container .label.is-empty>span,.xrange-container .label.is-empty b{display:none}.xrange-container .label>i{font-size:13px;text-align:center}.xrange-container .label>b{padding-top:3px}.xrange-container .label>span{min-width:100px;display:inline-flex;margin-bottom:8px}.xrange-layer{position:fixed;left:0;top:0;width:100%;height:100%;z-index:990;background-color:rgba(0,0,0,.05)}.xrange-panel{display:none;position:relative;right:1px;top:-8px;z-index:1000;border:1px solid #e6e7eb;border-radius:0;box-shadow:1px 1px 3px 0 transparent;width:111px;min-height:302px;background-color:#fff}.xrange-panel.visible{display:block}.xrange-panel .quick-list{display:flex;flex-direction:column;justify-content:space-around;box-sizing:content-box!important;align-items:center}.xrange-panel .quick-list>span{flex:0 0 auto;width:100%;line-height:20px;padding:6px 0 6px 27px;font-size:12px;-webkit-user-select:none;cursor:pointer}.xrange-panel .quick-list>span+span{margin-left:0}.xrange-panel .quick-list>span.active{background-color:#f2f3f7;color:#333;cursor:default}.xrange-panel .xrange-panel-footer{display:flex;align-items:center;justify-content:space-between;height:60px;background-color:#fff;position:absolute;top:300px;left:-539px;min-width:648px;padding:12px 108px 12px 12px}.xrange-panel .xrange-panel-footer .fn-left,.xrange-panel .xrange-panel-footer .fn-right{flex:0 0 auto}.xrange-panel .xrange-panel-footer button+button{margin-left:8px}.xrange-panel .picker-container{display:none;position:relative;margin-top:16px}.xrange-panel .picker-container .next-range-picker-panel{top:-273px!important;left:-540px!important;position:absolute!important;animation:none!important;z-index:999999;border-color:#e6ebef}.next-calendar-card .next-calendar-range-body{background:#fff!important;min-height:227px!important}.xrange-panel .picker-container+.next-range-picker{display:none}.xrange-panel .picker-container .next-date-picker-quick-tool{display:none!important}.xrange-panel.show-picker .picker-container{display:block;min-height:5px}.dingding{background:url(https://g.alicdn.com/cm-design/arms/1.1.27/styles/arms/images/dingding.png) no-repeat 0}.dingding,.wangwang{display:inline-block;padding:5px 0 5px 30px;height:24px;vertical-align:middle}.wangwang{background:url(https://g.alicdn.com/cm-design/arms/1.1.27/styles/arms/images/wangwang.png) no-repeat 0;background-size:24px}@media screen and (min-width:768px){.region-group-list{max-width:784px}}@media screen and (min-width:992px){.region-group-list{max-width:862px}}@media screen and (min-width:1200px){.region-group-list{max-width:600px}}@media screen and (min-width:1330px){.region-group-list{max-width:700px}}@media screen and (min-width:1500px){.region-group-list{max-width:1000px}}.next-switch-medium{position:relative;display:inline-block;border:1px solid transparent;width:48px!important;height:26px!important;border-radius:15px!important}.next-switch-medium>.next-switch-trigger{border:1px solid transparent;position:absolute;left:33px!important;width:24px!important;height:24px!important;border-radius:15px!important}.aliyun-advice{bottom:98px!important}.next-switch-medium>.next-switch-children{font-size:12px!important;position:absolute;height:24px!important;line-height:24px!important}.next-switch-on>.next-switch-trigger{box-shadow:1px 1px 3px 0 rgba(0,0,0,.32)!important;background-color:#fff;border-color:transparent;position:absolute;right:0!important}.next-switch-on>.next-switch-children{left:2px!important;font-size:12px!important;color:#fff}.next-switch-on[disabled]>.next-switch-trigger{position:absolute;right:0!important;box-shadow:1px 1px 3px 0 rgba(0,0,0,.32)!important;background-color:#e6e7eb;border-color:transparent}.next-switch-off>.next-switch-children{right:-6px;color:#979a9c!important}.next-switch-off[disabled]>.next-switch-trigger{left:0!important;box-shadow:1px 1px 3px 0 rgba(0,0,0,.32)!important;background-color:#e6e7eb;border-color:transparent}.next-switch-off>.next-switch-trigger{left:0!important;box-shadow:1px 1px 3px 0 rgba(0,0,0,.32);background-color:#fff;border-color:transparent}.next-switch-off,.next-switch-on{width:58px!important}.next-switch-on{position:relative}.next-menu .next-menu-icon-select{position:absolute;left:4px;top:0;color:#73777a!important}.next-table-cell-wrapper{hyphens:auto!important;word-break:break-word!important}.dash-page-container{height:100%;min-width:980px}.dash-page-container:after{content:"";display:table;clear:both}.dash-left-container{position:relative;float:left;width:77.52%;height:100%}.dash-title-show{width:100%;height:106px;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12);margin-bottom:19px;padding-top:20px;padding-bottom:20px;overflow:hidden}.dash-title-item{float:left;height:49px;width:33%;border-right:1px solid #ebecec;line-height:49px;padding-left:30px;padding-right:30px}.dash-title-word{height:19px;line-height:19px;font-size:14px;color:#73777a}.dash-title-num{height:45px;font-size:32px}.dash-title-item:last-child{border:none!important}.dash-menu-list{width:100%;height:104px;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12);margin-bottom:19px}.dash-menu-item{position:relative;float:left;width:33.33%;border-right:1px solid #eee;height:100%;padding-top:20px;padding-bottom:20px;cursor:pointer}.dash-menu-item.disabled{cursor:not-allowed;opacity:.7}.dash-menu-item:last-child{border:none}.dash-menu-item:hover{box-shadow:0 3px 6px 0 rgba(0,0,0,.12)}.dash-menu-conent-wrapper{padding-left:60px;padding-right:40px}.dash-menu-pic{position:absolute;width:32px;left:20px}.dash-menu-content-title{height:19px;line-height:19px;color:#373d41;margin-bottom:5px}.dash-menu-content-word{font-size:12px;color:#73777a}.dash-scene-wrapper{width:100%;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12);margin-bottom:20px}.dash-scene-title{position:relative;padding-left:20px;height:50px;line-height:50px;border-bottom:1px solid #f0f0f0}.dash-sceneitem{width:100%;height:80px;padding-top:24px}.dash-scenitem-out{border-bottom:1px solid #eee;height:100%}.dash-sceneitem:hover{box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 4px 0 rgba(0,0,0,.12);border-bottom:1px solid #f0f0f0}.dash-sceneitem-progresswrapper{position:relative;width:256px;height:6px}.dash-sceneitem-progresswrapper.green{background-color:#e2f5cf}.dash-sceneitem-progresswrapper.red{background-color:#ffe6e5}.dash-sceneitem-progresswrapper.green .dash-sceneitem-progressinner{height:100%;background-color:#a6e22e}.dash-sceneitem-progresswrapper.red .dash-sceneitem-progressinner{height:100%;background-color:#eb4c4d}.dash-sceneitem-iconshow{position:absolute;right:0;top:5px}.dash-sceneitem:hover.dash-sceneitem-out{border:none}.dash-sceneitem:after{display:table;content:"";clear:both}.dash-sceneitem-title{float:left;height:32.8px;padding-top:5px;width:14.47%;border-right:1px solid #f0f0f0;overflow:hidden;text-overflow:ellipsis}.scene-nomore-data{position:absolute;text-align:center;left:0;right:0;color:#eee;font-size:12px}.dash-sceneitem-content{position:relative;float:left;padding-top:5px;padding-left:30px;width:85.53%}.scene-title-link{position:absolute;right:20px;top:0;font-size:10px}.dash-bottom-show{width:100%;height:42px;line-height:42px;margin-top:18px;text-align:center;background-color:#fff;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12)}.dash-right-container{float:right;height:100%;width:22.44%;padding:10px;background-color:#fff}.dash-bottom-item,.dash-vl{color:#979a9c;margin-right:10px}.dash-doc{background-color:#fff;height:178px;width:100%;margin-bottom:14px}.dash-doc-title{width:100%;height:68px;line-height:68px;padding-left:20px;padding-right:20px;border-bottom:1px solid #eee}.dash-doc-content{width:100%;padding:15px}.dash-card-contentwrappers{width:100%;height:230px;margin-bottom:14px;background-color:#fff;border:1px solid #eee;box-shadow:0 0 0 0 hsla(0,0%,85.1%,.5),0 0 2px 0 rgba(0,0,0,.12)}.dash-card-title{width:100%;height:39px;line-height:39px;margin:0;padding-left:24px;padding-right:24px;color:#4a4a4a;border-bottom:1px solid #eee}.dash-card-contentlist{padding:20px}.dash-card-contentitem{position:relative;text-align:left;font-size:12px;margin-bottom:10px}.next-slick-dots-item button{height:4px!important;width:35px!important;border-radius:10px!important}.next-table-row.hovered{background-color:#f5f7f9!important}.alert-success-text{color:#4a4a4a;font-size:14px;margin:10px 0}.alert-success{border-color:#e0e0e0!important}.row-bg-green{background-color:#e4fdda}.row-bg-light-green{background-color:#e3fff8}.row-bg-orange{background-color:#fff3e0}.row-bg-red{background-color:#ffece4}
\ No newline at end of file
diff --git a/console/src/main/resources/static/js/main.js b/console/src/main/resources/static/js/main.js
index 8a92c4d1856..3577c5eefb7 100644
--- a/console/src/main/resources/static/js/main.js
+++ b/console/src/main/resources/static/js/main.js
@@ -1,19 +1,13 @@
-!function(n){var a={};function r(e){if(a[e])return a[e].exports;var t=a[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=n,r.c=a,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)r.d(n,a,function(e){return t[e]}.bind(null,a));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=422)}([function(e,t,n){"use strict";e.exports=n(428)},function(e,t,n){"use strict";n.d(t,"b",function(){return N}),n.d(t,"d",function(){return Y}),n.d(t,"c",function(){return P});n(52);var a=n(27),g=n.n(a),u=n(70),d=n(81),y=n(58),v=n(38),r=n(97),c=n.n(r),o=n(62),_=n.n(o);function b(){var e=window.location.href;localStorage.removeItem("token");var t=e.split("#")[0];console.log("base_url",t),window.location="".concat(t,"#/login")}var s,l,i,f,p,h,m,w,M,k,x,S,E,T,L,C=window,D=(s={},{once:function(e,t){this.listen.call(this,e,t,!0)},listen:function(e,t,n){var a=2>>0,a;for(a=0;a0){for(n=0;n=0;return(o?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+a}var j=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,I=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,A={},R={};function H(e,t,n,a){var r=a;if(typeof a==="string"){r=function(){return this[a]()}}if(e){R[e]=r}if(t){R[t[0]]=function(){return P(r.apply(this,arguments),t[1],t[2])}}if(n){R[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),e)}}}function F(e){if(e.match(/\[[\s\S]/)){return e.replace(/^\[|\]$/g,"")}return e.replace(/\\/g,"")}function z(a){var r=a.match(j),e,o;for(e=0,o=r.length;e=0&&I.test(e)){e=e.replace(I,a);I.lastIndex=0;n-=1}return e}var V={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function U(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];if(t||!n){return t}this._longDateFormat[e]=n.match(j).map(function(e){if(e==="MMMM"||e==="MM"||e==="DD"||e==="dddd"){return e.slice(1)}return e}).join("");return this._longDateFormat[e]}var K="Invalid date";function q(){return this._invalidDate}var G="%d",J=/\d{1,2}/;function $(e){return this._ordinal.replace("%d",e)}var X={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Q(e,t,n,a){var r=this._relativeTime[n];return L(r)?r(e,t,n,a):r.replace(/%d/i,e)}function Z(e,t){var n=this._relativeTime[e>0?"future":"past"];return L(n)?n(t):n.replace(/%s/i,t)}var ee={};function te(e,t){var n=e.toLowerCase();ee[n]=ee[n+"s"]=ee[t]=e}function ne(e){return typeof e==="string"?ee[e]||ee[e.toLowerCase()]:undefined}function ae(e){var t={},n,a;for(a in e){if(l(e,a)){n=ne(a);if(n){t[n]=e[a]}}}return t}var re={};function oe(e,t){re[e]=t}function ie(e){var t=[],n;for(n in e){if(l(e,n)){t.push({unit:n,priority:re[n]})}}t.sort(function(e,t){return e.priority-t.priority});return t}function se(e){return e%4===0&&e%100!==0||e%400===0}function le(e){if(e<0){return Math.ceil(e)||0}else{return Math.floor(e)}}function ue(e){var t=+e,n=0;if(t!==0&&isFinite(t)){n=le(t)}return n}function de(t,n){return function(e){if(e!=null){fe(this,t,e);d.updateOffset(this,n);return this}else{return ce(this,t)}}}function ce(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function fe(e,t,n){if(e.isValid()&&!isNaN(n)){if(t==="FullYear"&&se(e.year())&&e.month()===1&&e.date()===29){n=ue(n);e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Qe(n,e.month()))}else{e._d["set"+(e._isUTC?"UTC":"")+t](n)}}}function pe(e){e=ne(e);if(L(this[e])){return this[e]()}return this}function he(e,t){if(typeof e==="object"){e=ae(e);var n=ie(e),a;for(a=0;a68?1900:2e3)};var mt=de("FullYear",true);function gt(){return se(this.year())}function yt(e,t,n,a,r,o,i){var s;if(e<100&&e>=0){s=new Date(e+400,t,n,a,r,o,i);if(isFinite(s.getFullYear())){s.setFullYear(e)}}else{s=new Date(e,t,n,a,r,o,i)}return s}function vt(e){var t,n;if(e<100&&e>=0){n=Array.prototype.slice.call(arguments);n[0]=e+400;t=new Date(Date.UTC.apply(null,n));if(isFinite(t.getUTCFullYear())){t.setUTCFullYear(e)}}else{t=new Date(Date.UTC.apply(null,arguments))}return t}function _t(e,t,n){var a=7+t-n,r=(7+vt(e,0,a).getUTCDay()-t)%7;return-r+a-1}function bt(e,t,n,a,r){var o=(7+n-a)%7,i=_t(e,a,r),s=1+7*(t-1)+o+i,l,u;if(s<=0){l=e-1;u=ht(l)+s}else if(s>ht(e)){l=e+1;u=s-ht(e)}else{l=e;u=s}return{year:l,dayOfYear:u}}function wt(e,t,n){var a=_t(e.year(),t,n),r=Math.floor((e.dayOfYear()-a-1)/7)+1,o,i;if(r<1){i=e.year()-1;o=r+Mt(i,t,n)}else if(r>Mt(e.year(),t,n)){o=r-Mt(e.year(),t,n);i=e.year()+1}else{i=e.year();o=r}return{week:o,year:i}}function Mt(e,t,n){var a=_t(e,t,n),r=_t(e+1,t,n);return(ht(e)-a+r)/7}function kt(e){return wt(e,this._week.dow,this._week.doy).week}H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),te("week","w"),te("isoWeek","W"),oe("week",5),oe("isoWeek",5),Ye("w",be),Ye("ww",be,ge),Ye("W",be),Ye("WW",be,ge),He(["w","ww","W","WW"],function(e,t,n,a){t[a.substr(0,1)]=ue(e)});var xt={dow:0,doy:6};function St(){return this._week.dow}function Et(){return this._week.doy}function Tt(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function Lt(e){var t=wt(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}function Ct(e,t){if(typeof e!=="string"){return e}if(!isNaN(e)){return parseInt(e,10)}e=t.weekdaysParse(e);if(typeof e==="number"){return e}return null}function Dt(e,t){if(typeof e==="string"){return t.weekdaysParse(e)%7||7}return isNaN(e)?null:e}function Ot(e,t){return e.slice(t,7).concat(e.slice(0,t))}H("d",0,"do","day"),H("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),H("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),H("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),te("day","d"),te("weekday","e"),te("isoWeekday","E"),oe("day",11),oe("weekday",11),oe("isoWeekday",11),Ye("d",be),Ye("e",be),Ye("E",be),Ye("dd",function(e,t){return t.weekdaysMinRegex(e)}),Ye("ddd",function(e,t){return t.weekdaysShortRegex(e)}),Ye("dddd",function(e,t){return t.weekdaysRegex(e)}),He(["dd","ddd","dddd"],function(e,t,n,a){var r=n._locale.weekdaysParse(e,a,n._strict);if(r!=null){t.d=r}else{m(n).invalidWeekday=e}}),He(["d","e","E"],function(e,t,n,a){t[a]=ue(e)});var Nt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Yt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Pt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),jt=Oe,It=Oe,At=Oe;function Rt(e,t){var n=i(this._weekdays)?this._weekdays:this._weekdays[e&&e!==true&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===true?Ot(n,this._week.dow):e?n[e.day()]:n}function Ht(e){return e===true?Ot(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Ft(e){return e===true?Ot(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function zt(e,t,n){var a,r,o,i=e.toLocaleLowerCase();if(!this._weekdaysParse){this._weekdaysParse=[];this._shortWeekdaysParse=[];this._minWeekdaysParse=[];for(a=0;a<7;++a){o=h([2e3,1]).day(a);this._minWeekdaysParse[a]=this.weekdaysMin(o,"").toLocaleLowerCase();this._shortWeekdaysParse[a]=this.weekdaysShort(o,"").toLocaleLowerCase();this._weekdaysParse[a]=this.weekdays(o,"").toLocaleLowerCase()}}if(n){if(t==="dddd"){r=$e.call(this._weekdaysParse,i);return r!==-1?r:null}else if(t==="ddd"){r=$e.call(this._shortWeekdaysParse,i);return r!==-1?r:null}else{r=$e.call(this._minWeekdaysParse,i);return r!==-1?r:null}}else{if(t==="dddd"){r=$e.call(this._weekdaysParse,i);if(r!==-1){return r}r=$e.call(this._shortWeekdaysParse,i);if(r!==-1){return r}r=$e.call(this._minWeekdaysParse,i);return r!==-1?r:null}else if(t==="ddd"){r=$e.call(this._shortWeekdaysParse,i);if(r!==-1){return r}r=$e.call(this._weekdaysParse,i);if(r!==-1){return r}r=$e.call(this._minWeekdaysParse,i);return r!==-1?r:null}else{r=$e.call(this._minWeekdaysParse,i);if(r!==-1){return r}r=$e.call(this._weekdaysParse,i);if(r!==-1){return r}r=$e.call(this._shortWeekdaysParse,i);return r!==-1?r:null}}}function Wt(e,t,n){var a,r,o;if(this._weekdaysParseExact){return zt.call(this,e,t,n)}if(!this._weekdaysParse){this._weekdaysParse=[];this._minWeekdaysParse=[];this._shortWeekdaysParse=[];this._fullWeekdaysParse=[]}for(a=0;a<7;a++){r=h([2e3,1]).day(a);if(n&&!this._fullWeekdaysParse[a]){this._fullWeekdaysParse[a]=new RegExp("^"+this.weekdays(r,"").replace(".","\\.?")+"$","i");this._shortWeekdaysParse[a]=new RegExp("^"+this.weekdaysShort(r,"").replace(".","\\.?")+"$","i");this._minWeekdaysParse[a]=new RegExp("^"+this.weekdaysMin(r,"").replace(".","\\.?")+"$","i")}if(!this._weekdaysParse[a]){o="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,"");this._weekdaysParse[a]=new RegExp(o.replace(".",""),"i")}if(n&&t==="dddd"&&this._fullWeekdaysParse[a].test(e)){return a}else if(n&&t==="ddd"&&this._shortWeekdaysParse[a].test(e)){return a}else if(n&&t==="dd"&&this._minWeekdaysParse[a].test(e)){return a}else if(!n&&this._weekdaysParse[a].test(e)){return a}}}function Bt(e){if(!this.isValid()){return e!=null?this:NaN}var t=this._isUTC?this._d.getUTCDay():this._d.getDay();if(e!=null){e=Ct(e,this.localeData());return this.add(e-t,"d")}else{return t}}function Vt(e){if(!this.isValid()){return e!=null?this:NaN}var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function Ut(e){if(!this.isValid()){return e!=null?this:NaN}if(e!=null){var t=Dt(e,this.localeData());return this.day(this.day()%7?t:t-7)}else{return this.day()||7}}function Kt(e){if(this._weekdaysParseExact){if(!l(this,"_weekdaysRegex")){Jt.call(this)}if(e){return this._weekdaysStrictRegex}else{return this._weekdaysRegex}}else{if(!l(this,"_weekdaysRegex")){this._weekdaysRegex=jt}return this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex}}function qt(e){if(this._weekdaysParseExact){if(!l(this,"_weekdaysRegex")){Jt.call(this)}if(e){return this._weekdaysShortStrictRegex}else{return this._weekdaysShortRegex}}else{if(!l(this,"_weekdaysShortRegex")){this._weekdaysShortRegex=It}return this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}}function Gt(e){if(this._weekdaysParseExact){if(!l(this,"_weekdaysRegex")){Jt.call(this)}if(e){return this._weekdaysMinStrictRegex}else{return this._weekdaysMinRegex}}else{if(!l(this,"_weekdaysMinRegex")){this._weekdaysMinRegex=At}return this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}}function Jt(){function e(e,t){return t.length-e.length}var t=[],n=[],a=[],r=[],o,i,s,l,u;for(o=0;o<7;o++){i=h([2e3,1]).day(o);s=Ie(this.weekdaysMin(i,""));l=Ie(this.weekdaysShort(i,""));u=Ie(this.weekdays(i,""));t.push(s);n.push(l);a.push(u);r.push(s);r.push(l);r.push(u)}t.sort(e);n.sort(e);a.sort(e);r.sort(e);this._weekdaysRegex=new RegExp("^("+r.join("|")+")","i");this._weekdaysShortRegex=this._weekdaysRegex;this._weekdaysMinRegex=this._weekdaysRegex;this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i");this._weekdaysShortStrictRegex=new RegExp("^("+n.join("|")+")","i");this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function $t(){return this.hours()%12||12}function Xt(){return this.hours()||24}function Qt(e,t){H(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Zt(e,t){return t._meridiemParse}function en(e){return(e+"").toLowerCase().charAt(0)==="p"}H("H",["HH",2],0,"hour"),H("h",["hh",2],0,$t),H("k",["kk",2],0,Xt),H("hmm",0,0,function(){return""+$t.apply(this)+P(this.minutes(),2)}),H("hmmss",0,0,function(){return""+$t.apply(this)+P(this.minutes(),2)+P(this.seconds(),2)}),H("Hmm",0,0,function(){return""+this.hours()+P(this.minutes(),2)}),H("Hmmss",0,0,function(){return""+this.hours()+P(this.minutes(),2)+P(this.seconds(),2)}),Qt("a",true),Qt("A",false),te("hour","h"),oe("hour",13),Ye("a",Zt),Ye("A",Zt),Ye("H",be),Ye("h",be),Ye("k",be),Ye("HH",be,ge),Ye("hh",be,ge),Ye("kk",be,ge),Ye("hmm",we),Ye("hmmss",Me),Ye("Hmm",we),Ye("Hmmss",Me),Re(["H","HH"],Ve),Re(["k","kk"],function(e,t,n){var a=ue(e);t[Ve]=a===24?0:a}),Re(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e);n._meridiem=e}),Re(["h","hh"],function(e,t,n){t[Ve]=ue(e);m(n).bigHour=true}),Re("hmm",function(e,t,n){var a=e.length-2;t[Ve]=ue(e.substr(0,a));t[Ue]=ue(e.substr(a));m(n).bigHour=true}),Re("hmmss",function(e,t,n){var a=e.length-4,r=e.length-2;t[Ve]=ue(e.substr(0,a));t[Ue]=ue(e.substr(a,2));t[Ke]=ue(e.substr(r));m(n).bigHour=true}),Re("Hmm",function(e,t,n){var a=e.length-2;t[Ve]=ue(e.substr(0,a));t[Ue]=ue(e.substr(a))}),Re("Hmmss",function(e,t,n){var a=e.length-4,r=e.length-2;t[Ve]=ue(e.substr(0,a));t[Ue]=ue(e.substr(a,2));t[Ke]=ue(e.substr(r))});var tn,nn=de("Hours",true);function an(e,t,n){if(e>11){return n?"pm":"PM"}else{return n?"am":"AM"}}var rn={calendar:N,longDateFormat:V,invalidDate:K,ordinal:G,dayOfMonthOrdinalParse:J,relativeTime:X,months:Ze,monthsShort:et,week:xt,weekdays:Nt,weekdaysMin:Pt,weekdaysShort:Yt,meridiemParse:/[ap]\.?m?\.?/i},on={},sn={},ln;function un(e,t){var n,a=Math.min(e.length,t.length);for(n=0;n0){r=fn(o.slice(0,n).join("-"));if(r){return r}if(a&&a.length>=n&&un(o,a)>=n-1){break}n--}t++}return ln}function fn(t){var e=null,n;if(on[t]===undefined&&typeof ui!=="undefined"&&ui&&ui.exports){try{e=ln._abbr;n=di;ci(486)("./"+t);pn(e)}catch(e){on[t]=null}}return on[t]}function pn(e,t){var n;if(e){if(o(t)){n=gn(e)}else{n=hn(e,t)}if(n){ln=n}else{if(typeof console!=="undefined"&&console.warn){console.warn("Locale "+e+" not found. Did you forget to load it?")}}}return ln._abbr}function hn(e,t){if(t!==null){var n,a=rn;t.abbr=e;if(on[e]!=null){T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change "+"an existing locale. moment.defineLocale(localeName, "+"config) should only be used for creating a new locale "+"See http://momentjs.com/guides/#/warnings/define-locale/ for more info.");a=on[e]._config}else if(t.parentLocale!=null){if(on[t.parentLocale]!=null){a=on[t.parentLocale]._config}else{n=fn(t.parentLocale);if(n!=null){a=n._config}else{if(!sn[t.parentLocale]){sn[t.parentLocale]=[]}sn[t.parentLocale].push({name:e,config:t});return null}}}on[e]=new O(D(a,t));if(sn[e]){sn[e].forEach(function(e){hn(e.name,e.config)})}pn(e);return on[e]}else{delete on[e];return null}}function mn(e,t){if(null!=t){var n,a,r=rn;null!=on[e]&&null!=on[e].parentLocale?on[e].set(D(on[e]._config,t)):(null!=(a=fn(e))&&(r=a._config),t=D(r,t),null==a&&(t.abbr=e),(n=new O(t)).parentLocale=on[e],on[e]=n),pn(e)}else null!=on[e]&&(null!=on[e].parentLocale?(on[e]=on[e].parentLocale,e===pn()&&pn(e)):null!=on[e]&&delete on[e]);return on[e]}function gn(e){var t;if(e&&e._locale&&e._locale._abbr){e=e._locale._abbr}if(!e){return ln}if(!i(e)){t=fn(e);if(t){return t}e=[e]}return cn(e)}function yn(){return E(on)}function vn(e){var t,n=e._a;if(n&&m(e).overflow===-2){t=n[We]<0||n[We]>11?We:n[Be]<1||n[Be]>Qe(n[ze],n[We])?Be:n[Ve]<0||n[Ve]>24||n[Ve]===24&&(n[Ue]!==0||n[Ke]!==0||n[qe]!==0)?Ve:n[Ue]<0||n[Ue]>59?Ue:n[Ke]<0||n[Ke]>59?Ke:n[qe]<0||n[qe]>999?qe:-1;if(m(e)._overflowDayOfYear&&(tBe)){t=Be}if(m(e)._overflowWeeks&&t===-1){t=Ge}if(m(e)._overflowWeekday&&t===-1){t=Je}m(e).overflow=t}return e}var _n=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,bn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wn=/Z|[+-]\d\d(?::?\d\d)?/,Mn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,false],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,false],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,false],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,false],["YYYY",/\d{4}/,false]],kn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],xn=/^\/?Date\((-?\d+)/i,Sn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,En={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Tn(e){var t,n,a=e._i,r=_n.exec(a)||bn.exec(a),o,i,s,l;if(r){m(e).iso=true;for(t=0,n=Mn.length;tht(i)||e._dayOfYear===0){m(e)._overflowDayOfYear=true}n=vt(i,0,e._dayOfYear);e._a[We]=n.getUTCMonth();e._a[Be]=n.getUTCDate()}for(t=0;t<3&&e._a[t]==null;++t){e._a[t]=a[t]=r[t]}for(;t<7;t++){e._a[t]=a[t]=e._a[t]==null?t===2?1:0:e._a[t]}if(e._a[Ve]===24&&e._a[Ue]===0&&e._a[Ke]===0&&e._a[qe]===0){e._nextDay=true;e._a[Ve]=0}e._d=(e._useUTC?vt:yt).apply(null,a);o=e._useUTC?e._d.getUTCDay():e._d.getDay();if(e._tzm!=null){e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm)}if(e._nextDay){e._a[Ve]=24}if(e._w&&typeof e._w.d!=="undefined"&&e._w.d!==o){m(e).weekdayMismatch=true}}function Rn(e){var t,n,a,r,o,i,s,l,u;t=e._w;if(t.GG!=null||t.W!=null||t.E!=null){o=1;i=4;n=jn(t.GG,e._a[ze],wt(qn(),1,4).year);a=jn(t.W,1);r=jn(t.E,1);if(r<1||r>7){l=true}}else{o=e._locale._week.dow;i=e._locale._week.doy;u=wt(qn(),o,i);n=jn(t.gg,e._a[ze],u.year);a=jn(t.w,u.week);if(t.d!=null){r=t.d;if(r<0||r>6){l=true}}else if(t.e!=null){r=t.e+o;if(t.e<0||t.e>6){l=true}}else{r=o}}if(a<1||a>Mt(n,o,i)){m(e)._overflowWeeks=true}else if(l!=null){m(e)._overflowWeekday=true}else{s=bt(n,a,r,o,i);e._a[ze]=s.year;e._dayOfYear=s.dayOfYear}}function Hn(e){if(e._f===d.ISO_8601){Tn(e);return}if(e._f===d.RFC_2822){Yn(e);return}e._a=[];m(e).empty=true;var t=""+e._i,n,a,r,o,i,s=t.length,l=0,u;r=B(e._f,e._locale).match(j)||[];for(n=0;n0){m(e).unusedInput.push(i)}t=t.slice(t.indexOf(a)+a.length);l+=a.length}if(R[o]){if(a){m(e).empty=false}else{m(e).unusedTokens.push(o)}Fe(o,a,e)}else if(e._strict&&!a){m(e).unusedTokens.push(o)}}m(e).charsLeftOver=s-l;if(t.length>0){m(e).unusedInput.push(t)}if(e._a[Ve]<=12&&m(e).bigHour===true&&e._a[Ve]>0){m(e).bigHour=undefined}m(e).parsedDateParts=e._a.slice(0);m(e).meridiem=e._meridiem;e._a[Ve]=Fn(e._locale,e._a[Ve],e._meridiem);u=m(e).era;if(u!==null){e._a[ze]=e._locale.erasConvertYear(u,e._a[ze])}An(e);vn(e)}function Fn(e,t,n){var a;if(n==null){return t}if(e.meridiemHour!=null){return e.meridiemHour(t,n)}else if(e.isPM!=null){a=e.isPM(n);if(a&&t<12){t+=12}if(!a&&t===12){t=0}return t}else{return t}}function zn(e){var t,n,a,r,o,i,s=false;if(e._f.length===0){m(e).invalidFormat=true;e._d=new Date(NaN);return}for(r=0;rthis?this:e}else{return y()}});function $n(e,t){var n,a;if(t.length===1&&i(t[0])){t=t[0]}if(!t.length){return qn()}n=t[0];for(a=1;athis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function ba(){if(!o(this._isDSTShifted)){return this._isDSTShifted}var e={},t;b(e,this);e=Vn(e);if(e._a){t=e._isUTC?h(e._a):qn(e._a);this._isDSTShifted=this.isValid()&&sa(e._a,t.toArray())>0}else{this._isDSTShifted=false}return this._isDSTShifted}function wa(){return this.isValid()?!this._isUTC:false}function Ma(){return this.isValid()?this._isUTC:false}function ka(){return this.isValid()?this._isUTC&&this._offset===0:false}d.updateOffset=function(){};var xa=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Sa=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ea(e,t){var n=e,a=null,r,o,i;if(oa(e)){n={ms:e._milliseconds,d:e._days,M:e._months}}else if(c(e)||!isNaN(+e)){n={};if(t){n[t]=+e}else{n.milliseconds=+e}}else if(a=xa.exec(e)){r=a[1]==="-"?-1:1;n={y:0,d:ue(a[Be])*r,h:ue(a[Ve])*r,m:ue(a[Ue])*r,s:ue(a[Ke])*r,ms:ue(ia(a[qe]*1e3))*r}}else if(a=Sa.exec(e)){r=a[1]==="-"?-1:1;n={y:Ta(a[2],r),M:Ta(a[3],r),w:Ta(a[4],r),d:Ta(a[5],r),h:Ta(a[6],r),m:Ta(a[7],r),s:Ta(a[8],r)}}else if(n==null){n={}}else if(typeof n==="object"&&("from"in n||"to"in n)){i=Ca(qn(n.from),qn(n.to));n={};n.ms=i.milliseconds;n.M=i.months}o=new ra(n);if(oa(e)&&l(e,"_locale")){o._locale=e._locale}if(oa(e)&&l(e,"_isValid")){o._isValid=e._isValid}return o}function Ta(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function La(e,t){var n={};n.months=t.month()-e.month()+(t.year()-e.year())*12;if(e.clone().add(n.months,"M").isAfter(t)){--n.months}n.milliseconds=+t-+e.clone().add(n.months,"M");return n}function Ca(e,t){var n;if(!(e.isValid()&&t.isValid())){return{milliseconds:0,months:0}}t=ca(t,e);if(e.isBefore(t)){n=La(e,t)}else{n=La(t,e);n.milliseconds=-n.milliseconds;n.months=-n.months}return n}function Da(r,o){return function(e,t){var n,a;if(t!==null&&!isNaN(+t)){T(o,"moment()."+o+"(period, number) is deprecated. Please use moment()."+o+"(number, period). "+"See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.");a=e;e=t;t=a}n=Ea(e,t);Oa(this,n,r);return this}}function Oa(e,t,n,a){var r=t._milliseconds,o=ia(t._days),i=ia(t._months);if(!e.isValid()){return}a=a==null?true:a;if(i){lt(e,ce(e,"Month")+i*n)}if(o){fe(e,"Date",ce(e,"Date")+o*n)}if(r){e._d.setTime(e._d.valueOf()+r*n)}if(a){d.updateOffset(e,o||i)}}Ea.fn=ra.prototype,Ea.invalid=aa;var Na=Da(1,"add"),Ya=Da(-1,"subtract");function Pa(e){return typeof e==="string"||e instanceof String}function ja(e){return M(e)||f(e)||Pa(e)||c(e)||Aa(e)||Ia(e)||e===null||e===undefined}function Ia(e){var t=s(e)&&!u(e),n=false,a=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],r,o;for(r=0;rn.valueOf()}else{return n.valueOf()9999){return W(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ")}if(L(Date.prototype.toISOString)){if(t){return this.toDate().toISOString()}else{return new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",W(n,"Z"))}}return W(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function Qa(){if(!this.isValid()){return"moment.invalid(/* "+this._i+" */)"}var e="moment",t="",n,a,r,o;if(!this.isLocal()){e=this.utcOffset()===0?"moment.utc":"moment.parseZone";t="Z"}n="["+e+'("]';a=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";r="-MM-DD[T]HH:mm:ss.SSS";o=t+'[")]';return this.format(n+a+r+o)}function Za(e){if(!e){e=this.isUtc()?d.defaultFormatUtc:d.defaultFormat}var t=W(this,e);return this.localeData().postformat(t)}function er(e,t){if(this.isValid()&&(M(e)&&e.isValid()||qn(e).isValid())){return Ea({to:this,from:e}).locale(this.locale()).humanize(!t)}else{return this.localeData().invalidDate()}}function tr(e){return this.from(qn(),e)}function nr(e,t){if(this.isValid()&&(M(e)&&e.isValid()||qn(e).isValid())){return Ea({from:this,to:e}).locale(this.locale()).humanize(!t)}else{return this.localeData().invalidDate()}}function ar(e){return this.to(qn(),e)}function rr(e){var t;if(e===undefined){return this._locale._abbr}else{t=gn(e);if(t!=null){this._locale=t}return this}}d.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",d.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var or=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){if(e===undefined){return this.localeData()}else{return this.locale(e)}});function ir(){return this._locale}var sr=1e3,lr=60*sr,ur=60*lr,dr=(365*400+97)*24*ur;function cr(e,t){return(e%t+t)%t}function fr(e,t,n){if(e<100&&e>=0){return new Date(e+400,t,n)-dr}else{return new Date(e,t,n).valueOf()}}function pr(e,t,n){if(e<100&&e>=0){return Date.UTC(e+400,t,n)-dr}else{return Date.UTC(e,t,n)}}function hr(e){var t,n;e=ne(e);if(e===undefined||e==="millisecond"||!this.isValid()){return this}n=this._isUTC?pr:fr;switch(e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf();t-=cr(t+(this._isUTC?0:this.utcOffset()*lr),ur);break;case"minute":t=this._d.valueOf();t-=cr(t,lr);break;case"second":t=this._d.valueOf();t-=cr(t,sr);break}this._d.setTime(t);d.updateOffset(this,true);return this}function mr(e){var t,n;e=ne(e);if(e===undefined||e==="millisecond"||!this.isValid()){return this}n=this._isUTC?pr:fr;switch(e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf();t+=ur-cr(t+(this._isUTC?0:this.utcOffset()*lr),ur)-1;break;case"minute":t=this._d.valueOf();t+=lr-cr(t,lr)-1;break;case"second":t=this._d.valueOf();t+=sr-cr(t,sr)-1;break}this._d.setTime(t);d.updateOffset(this,true);return this}function gr(){return this._d.valueOf()-(this._offset||0)*6e4}function yr(){return Math.floor(this.valueOf()/1e3)}function vr(){return new Date(this.valueOf())}function _r(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function br(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function wr(){return this.isValid()?this.toISOString():null}function Mr(){return g(this)}function kr(){return p({},m(this))}function xr(){return m(this).overflow}function Sr(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Er(e,t){var n,a,r,o=this._eras||gn("en")._eras;for(n=0,a=o.length;n=0){return o[a]}}}function Lr(e,t){var n=e.since<=e.until?+1:-1;if(t===undefined){return d(e.since).year()}else{return d(e.since).year()+(t-e.offset)*n}}function Cr(){var e,t,n,a=this.localeData().eras();for(e=0,t=a.length;eo){t=o}return Jr.call(this,e,t,n,a,r)}}function Jr(e,t,n,a,r){var o=bt(e,t,n,a,r),i=vt(o.year,0,o.dayOfYear);this.year(i.getUTCFullYear());this.month(i.getUTCMonth());this.date(i.getUTCDate());return this}function $r(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}H("N",0,0,"eraAbbr"),H("NN",0,0,"eraAbbr"),H("NNN",0,0,"eraAbbr"),H("NNNN",0,0,"eraName"),H("NNNNN",0,0,"eraNarrow"),H("y",["y",1],"yo","eraYear"),H("y",["yy",2],0,"eraYear"),H("y",["yyy",3],0,"eraYear"),H("y",["yyyy",4],0,"eraYear"),Ye("N",Ir),Ye("NN",Ir),Ye("NNN",Ir),Ye("NNNN",Ar),Ye("NNNNN",Rr),Re(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,a){var r=n._locale.erasParse(e,a,n._strict);if(r){m(n).era=r}else{m(n).invalidEra=e}}),Ye("y",Ee),Ye("yy",Ee),Ye("yyy",Ee),Ye("yyyy",Ee),Ye("yo",Hr),Re(["y","yy","yyy","yyyy"],ze),Re(["yo"],function(e,t,n,a){var r;if(n._locale._eraYearOrdinalRegex){r=e.match(n._locale._eraYearOrdinalRegex)}if(n._locale.eraYearOrdinalParse){t[ze]=n._locale.eraYearOrdinalParse(e,r)}else{t[ze]=parseInt(e,10)}}),H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),zr("gggg","weekYear"),zr("ggggg","weekYear"),zr("GGGG","isoWeekYear"),zr("GGGGG","isoWeekYear"),te("weekYear","gg"),te("isoWeekYear","GG"),oe("weekYear",1),oe("isoWeekYear",1),Ye("G",Te),Ye("g",Te),Ye("GG",be,ge),Ye("gg",be,ge),Ye("GGGG",xe,ve),Ye("gggg",xe,ve),Ye("GGGGG",Se,_e),Ye("ggggg",Se,_e),He(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,a){t[a.substr(0,2)]=ue(e)}),He(["gg","GG"],function(e,t,n,a){t[a]=d.parseTwoDigitYear(e)}),H("Q",0,"Qo","quarter"),te("quarter","Q"),oe("quarter",7),Ye("Q",me),Re("Q",function(e,t){t[We]=(ue(e)-1)*3}),H("D",["DD",2],"Do","date"),te("date","D"),oe("date",9),Ye("D",be),Ye("DD",be,ge),Ye("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),Re(["D","DD"],Be),Re("Do",function(e,t){t[Be]=ue(e.match(be)[0])});var Xr=de("Date",true);function Qr(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}H("DDD",["DDDD",3],"DDDo","dayOfYear"),te("dayOfYear","DDD"),oe("dayOfYear",4),Ye("DDD",ke),Ye("DDDD",ye),Re(["DDD","DDDD"],function(e,t,n){n._dayOfYear=ue(e)}),H("m",["mm",2],0,"minute"),te("minute","m"),oe("minute",14),Ye("m",be),Ye("mm",be,ge),Re(["m","mm"],Ue);var Zr=de("Minutes",false);H("s",["ss",2],0,"second"),te("second","s"),oe("second",15),Ye("s",be),Ye("ss",be,ge),Re(["s","ss"],Ke);var eo=de("Seconds",false),to,no;for(H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return this.millisecond()*10}),H(0,["SSSSS",5],0,function(){return this.millisecond()*100}),H(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),H(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),H(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),H(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),te("millisecond","ms"),oe("millisecond",16),Ye("S",ke,me),Ye("SS",ke,ge),Ye("SSS",ke,ye),to="SSSS";to.length<=9;to+="S"){Ye(to,Ee)}function ao(e,t){t[qe]=ue(("0."+e)*1e3)}for(to="S";to.length<=9;to+="S"){Re(to,ao)}function ro(){return this._isUTC?"UTC":""}function oo(){return this._isUTC?"Coordinated Universal Time":""}no=de("Milliseconds",false),H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var io=w.prototype;if(io.add=Na,io.calendar=Fa,io.clone=za,io.diff=Ga,io.endOf=mr,io.format=Za,io.from=er,io.fromNow=tr,io.to=nr,io.toNow=ar,io.get=pe,io.invalidAt=xr,io.isAfter=Wa,io.isBefore=Ba,io.isBetween=Va,io.isSame=Ua,io.isSameOrAfter=Ka,io.isSameOrBefore=qa,io.isValid=Mr,io.lang=or,io.locale=rr,io.localeData=ir,io.max=Jn,io.min=Gn,io.parsingFlags=kr,io.set=he,io.startOf=hr,io.subtract=Ya,io.toArray=_r,io.toObject=br,io.toDate=vr,io.toISOString=Xa,io.inspect=Qa,typeof Symbol!=="undefined"&&Symbol.for!=null){io[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}}function so(e){return qn(1e3*e)}function lo(){return qn.apply(null,arguments).parseZone()}function uo(e){return e}io.toJSON=wr,io.toString=$a,io.unix=yr,io.valueOf=gr,io.creationData=Sr,io.eraName=Cr,io.eraNarrow=Dr,io.eraAbbr=Or,io.eraYear=Nr,io.year=mt,io.isLeapYear=gt,io.weekYear=Wr,io.isoWeekYear=Br,io.quarter=io.quarters=$r,io.month=ut,io.daysInMonth=dt,io.week=io.weeks=Tt,io.isoWeek=io.isoWeeks=Lt,io.weeksInYear=Kr,io.weeksInWeekYear=qr,io.isoWeeksInYear=Vr,io.isoWeeksInISOWeekYear=Ur,io.date=Xr,io.day=io.days=Bt,io.weekday=Vt,io.isoWeekday=Ut,io.dayOfYear=Qr,io.hour=io.hours=nn,io.minute=io.minutes=Zr,io.second=io.seconds=eo,io.millisecond=io.milliseconds=no,io.utcOffset=pa,io.utc=ma,io.local=ga,io.parseZone=ya,io.hasAlignedHourOffset=va,io.isDST=_a,io.isLocal=wa,io.isUtcOffset=Ma,io.isUtc=ka,io.isUTC=ka,io.zoneAbbr=ro,io.zoneName=oo,io.dates=x("dates accessor is deprecated. Use date instead.",Xr),io.months=x("months accessor is deprecated. Use month instead",ut),io.years=x("years accessor is deprecated. Use year instead",mt),io.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",ha),io.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",ba);var co=O.prototype;function fo(e,t,n,a){var r=gn(),o=h().set(a,t);return r[n](o,e)}function po(e,t,n){if(c(e)){t=e;e=undefined}e=e||"";if(t!=null){return fo(e,t,n,"month")}var a,r=[];for(a=0;a<12;a++){r[a]=fo(e,a,n,"month")}return r}function ho(e,t,n,a){if(typeof e==="boolean"){if(c(t)){n=t;t=undefined}t=t||""}else{t=e;n=t;e=false;if(c(t)){n=t;t=undefined}t=t||""}var r=gn(),o=e?r._week.dow:0,i,s=[];if(n!=null){return fo(t,(n+o)%7,a,"day")}for(i=0;i<7;i++){s[i]=fo(t,(i+o)%7,a,"day")}return s}function mo(e,t){return po(e,t,"months")}function go(e,t){return po(e,t,"monthsShort")}function yo(e,t,n){return ho(e,t,n,"weekdays")}function vo(e,t,n){return ho(e,t,n,"weekdaysShort")}function _o(e,t,n){return ho(e,t,n,"weekdaysMin")}co.calendar=Y,co.longDateFormat=U,co.invalidDate=q,co.ordinal=$,co.preparse=uo,co.postformat=uo,co.relativeTime=Q,co.pastFuture=Z,co.set=C,co.eras=Er,co.erasParse=Tr,co.erasConvertYear=Lr,co.erasAbbrRegex=Pr,co.erasNameRegex=Yr,co.erasNarrowRegex=jr,co.months=rt,co.monthsShort=ot,co.monthsParse=st,co.monthsRegex=ft,co.monthsShortRegex=ct,co.week=kt,co.firstDayOfYear=Et,co.firstDayOfWeek=St,co.weekdays=Rt,co.weekdaysMin=Ft,co.weekdaysShort=Ht,co.weekdaysParse=Wt,co.weekdaysRegex=Kt,co.weekdaysShortRegex=qt,co.weekdaysMinRegex=Gt,co.isPM=en,co.meridiem=an,pn("en",{eras:[{since:"0001-01-01",until:+Infinity,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-Infinity,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=ue(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}}),d.lang=x("moment.lang is deprecated. Use moment.locale instead.",pn),d.langData=x("moment.langData is deprecated. Use moment.localeData instead.",gn);var bo=Math.abs;function wo(){var e=this._data;return this._milliseconds=bo(this._milliseconds),this._days=bo(this._days),this._months=bo(this._months),e.milliseconds=bo(e.milliseconds),e.seconds=bo(e.seconds),e.minutes=bo(e.minutes),e.hours=bo(e.hours),e.months=bo(e.months),e.years=bo(e.years),this}function Mo(e,t,n,a){var r=Ea(t,n);e._milliseconds+=a*r._milliseconds;e._days+=a*r._days;e._months+=a*r._months;return e._bubble()}function ko(e,t){return Mo(this,e,t,1)}function xo(e,t){return Mo(this,e,t,-1)}function So(e){if(e<0){return Math.floor(e)}else{return Math.ceil(e)}}function Eo(){var e,t,n,a,r,o=this._milliseconds,i=this._days,s=this._months,l=this._data;if(!(0<=o&&0<=i&&0<=s||o<=0&&i<=0&&s<=0))o+=864e5*So(Lo(s)+i),s=i=0;return l.milliseconds=o%1e3,e=le(o/1e3),l.seconds=e%60,t=le(e/60),l.minutes=t%60,n=le(t/60),l.hours=n%24,i+=le(n/24),r=le(To(i)),s+=r,i-=So(Lo(r)),a=le(s/12),s%=12,l.days=i,l.months=s,l.years=a,this}function To(e){return e*4800/146097}function Lo(e){return e*146097/4800}function Co(e){if(!this.isValid())return NaN;var t,n,a=this._milliseconds;if("month"===(e=ne(e))||"quarter"===e||"year"===e)switch(t=this._days+a/864e5,n=this._months+To(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Lo(this._months)),e){case"week":return t/7+a/6048e5;case"day":return t+a/864e5;case"hour":return 24*t+a/36e5;case"minute":return 1440*t+a/6e4;case"second":return 86400*t+a/1e3;case"millisecond":return Math.floor(864e5*t)+a;default:throw new Error("Unknown unit "+e)}}function Do(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*ue(this._months/12):NaN}function Oo(e){return function(){return this.as(e)}}var No=Oo("ms"),Yo=Oo("s"),Po=Oo("m"),jo=Oo("h"),Io=Oo("d"),Ao=Oo("w"),Ro=Oo("M"),Ho=Oo("Q"),Fo=Oo("y");function zo(){return Ea(this)}function Wo(e){return e=ne(e),this.isValid()?this[e+"s"]():NaN}function Bo(e){return function(){return this.isValid()?this._data[e]:NaN}}var Vo=Bo("milliseconds"),Uo=Bo("seconds"),Ko=Bo("minutes"),qo=Bo("hours"),Go=Bo("days"),Jo=Bo("months"),$o=Bo("years");function Xo(){return le(this.days()/7)}var Qo=Math.round,Zo={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ei(e,t,n,a,r){return r.relativeTime(t||1,!!n,e,a)}function ti(e,t,n,a){var r=Ea(e).abs(),o=Qo(r.as("s")),i=Qo(r.as("m")),s=Qo(r.as("h")),l=Qo(r.as("d")),u=Qo(r.as("M")),d=Qo(r.as("w")),c=Qo(r.as("y")),f=(o<=n.ss?["s",o]:o0)-(e<0)||+e}function si(){if(!this.isValid()){return this.localeData().invalidDate()}var e=oi(this._milliseconds)/1e3,t=oi(this._days),n=oi(this._months),a,r,o,i,s=this.asSeconds(),l,u,d,c;if(!s){return"P0D"}a=le(e/60);r=le(a/60);e%=60;a%=60;o=le(n/12);n%=12;i=e?e.toFixed(3).replace(/\.?0+$/,""):"";l=s<0?"-":"";u=ii(this._months)!==ii(s)?"-":"";d=ii(this._days)!==ii(s)?"-":"";c=ii(this._milliseconds)!==ii(s)?"-":"";return l+"P"+(o?u+o+"Y":"")+(n?u+n+"M":"")+(t?d+t+"D":"")+(r||a||e?"T":"")+(r?c+r+"H":"")+(a?c+a+"M":"")+(e?c+i+"S":"")}var li=ra.prototype;return li.isValid=function(){return this._isValid},li.abs=function(){var e=this._data;return this._milliseconds=bo(this._milliseconds),this._days=bo(this._days),this._months=bo(this._months),e.milliseconds=bo(e.milliseconds),e.seconds=bo(e.seconds),e.minutes=bo(e.minutes),e.hours=bo(e.hours),e.months=bo(e.months),e.years=bo(e.years),this},li.add=function(e,t){return Mo(this,e,t,1)},li.subtract=function(e,t){return Mo(this,e,t,-1)},li.as=function(e){if(!this.isValid())return NaN;var t,n,a=this._milliseconds;if("month"===(e=ne(e))||"quarter"===e||"year"===e)switch(t=this._days+a/864e5,n=this._months+To(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Lo(this._months)),e){case"week":return t/7+a/6048e5;case"day":return t+a/864e5;case"hour":return 24*t+a/36e5;case"minute":return 1440*t+a/6e4;case"second":return 86400*t+a/1e3;case"millisecond":return Math.floor(864e5*t)+a;default:throw new Error("Unknown unit "+e)}},li.asMilliseconds=No,li.asSeconds=Yo,li.asMinutes=Po,li.asHours=jo,li.asDays=Io,li.asWeeks=Ao,li.asMonths=Ro,li.asQuarters=Ho,li.asYears=Fo,li.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*ue(this._months/12):NaN},li._bubble=function(){var e,t,n,a,r,o=this._milliseconds,i=this._days,s=this._months,l=this._data;0<=o&&0<=i&&0<=s||o<=0&&i<=0&&s<=0||(o+=864e5*So(Lo(s)+i),s=i=0);return l.milliseconds=o%1e3,e=le(o/1e3),l.seconds=e%60,t=le(e/60),l.minutes=t%60,n=le(t/60),l.hours=n%24,i+=le(n/24),r=le(To(i)),s+=r,i-=So(Lo(r)),a=le(s/12),s%=12,l.days=i,l.months=s,l.years=a,this},li.clone=function(){return Ea(this)},li.get=function(e){return e=ne(e),this.isValid()?this[e+"s"]():NaN},li.milliseconds=Vo,li.seconds=Uo,li.minutes=Ko,li.hours=qo,li.days=Go,li.weeks=function(){return le(this.days()/7)},li.months=Jo,li.years=$o,li.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,a,r=!1,o=Zo;"object"==typeof e&&(t=e,e=!1);"boolean"==typeof e&&(r=e);"object"==typeof t&&(o=Object.assign({},Zo,t),null!=t.s&&null==t.ss&&(o.ss=t.s-1));n=this.localeData(),a=function(e,t,n,a){var r=Ea(e).abs(),o=Qo(r.as("s")),i=Qo(r.as("m")),s=Qo(r.as("h")),l=Qo(r.as("d")),u=Qo(r.as("M")),d=Qo(r.as("w")),c=Qo(r.as("y")),f=(o<=n.ss?["s",o]:o>>0;for(var a=0;a0){for(n=0;n0?"future":"past"];return O(n)?n(t):n.replace(/%s/i,t)}var q={};function G(e,t){var n=e.toLowerCase();q[n]=q[n+"s"]=q[t]=e}function J(e){return typeof e==="string"?q[e]||q[e.toLowerCase()]:undefined}function $(e){var t={},n,a;for(a in e){if(f(e,a)){n=J(a);if(n){t[n]=e[a]}}}return t}var X={};function Q(e,t){X[e]=t}function Z(e){var t=[];for(var n in e){t.push({unit:n,priority:X[n]})}t.sort(function(e,t){return e.priority-t.priority});return t}function ee(e,t,n){var a=""+Math.abs(e),r=t-a.length,o=e>=0;return(o?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+a}var te=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ne=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ae={},re={};function oe(e,t,n,a){var r=a;if(typeof a==="string"){r=function(){return this[a]()}}if(e){re[e]=r}if(t){re[t[0]]=function(){return ee(r.apply(this,arguments),t[1],t[2])}}if(n){re[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),e)}}}function ie(e){if(e.match(/\[[\s\S]/)){return e.replace(/^\[|\]$/g,"")}return e.replace(/\\/g,"")}function se(a){var r=a.match(te),e,o;for(e=0,o=r.length;e=0&&ne.test(e)){e=e.replace(ne,a);ne.lastIndex=0;n-=1}return e}var de=/\d/,ce=/\d\d/,fe=/\d{3}/,pe=/\d{4}/,he=/[+-]?\d{6}/,me=/\d\d?/,ge=/\d\d\d\d?/,ye=/\d\d\d\d\d\d?/,ve=/\d{1,3}/,_e=/\d{1,4}/,be=/[+-]?\d{1,6}/,we=/\d+/,Me=/[+-]?\d+/,ke=/Z|[+-]\d\d:?\d\d/gi,Se=/Z|[+-]\d\d(?::?\d\d)?/gi,xe=/[+-]?\d+(\.\d{1,3})?/,Ee=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Te={};function Ce(e,n,a){Te[e]=O(n)?n:function(e,t){return e&&a?a:n}}function Le(e,t){if(!f(Te,e)){return new RegExp(De(e))}return Te[e](t._strict,t._locale)}function De(e){return Oe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,a,r){return t||n||a||r}))}function Oe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Ne={};function Pe(e,n){var t,a=n;if(typeof e==="string"){e=[e]}if(d(n)){a=function(e,t){t[n]=S(e)}}for(t=0;t68?1900:2e3)};var qe=$e("FullYear",true),Ge;function Je(){return Ke(this.year())}function $e(t,n){return function(e){if(e!=null){Qe(this,t,e);u.updateOffset(this,n);return this}else{return Xe(this,t)}}}function Xe(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function Qe(e,t,n){if(e.isValid()&&!isNaN(n)){if(t==="FullYear"&&Ke(e.year())&&e.month()===1&&e.date()===29){e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),nt(n,e.month()))}else{e._d["set"+(e._isUTC?"UTC":"")+t](n)}}}function Ze(e){e=J(e);if(O(this[e])){return this[e]()}return this}function et(e,t){if(typeof e==="object"){e=$(e);var n=Z(e);for(var a=0;a=0){s=new Date(e+400,t,n,a,r,o,i);if(isFinite(s.getFullYear())){s.setFullYear(e)}}else{s=new Date(e,t,n,a,r,o,i)}return s}function _t(e){var t;if(e<100&&e>=0){var n=Array.prototype.slice.call(arguments);n[0]=e+400;t=new Date(Date.UTC.apply(null,n));if(isFinite(t.getUTCFullYear())){t.setUTCFullYear(e)}}else{t=new Date(Date.UTC.apply(null,arguments))}return t}function bt(e,t,n){var a=7+t-n,r=(7+_t(e,0,a).getUTCDay()-t)%7;return-r+a-1}function wt(e,t,n,a,r){var o=(7+n-a)%7,i=bt(e,a,r),s=1+7*(t-1)+o+i,l,u;if(s<=0){l=e-1;u=Ue(l)+s}else if(s>Ue(e)){l=e+1;u=s-Ue(e)}else{l=e;u=s}return{year:l,dayOfYear:u}}function Mt(e,t,n){var a=bt(e.year(),t,n),r=Math.floor((e.dayOfYear()-a-1)/7)+1,o,i;if(r<1){i=e.year()-1;o=r+kt(i,t,n)}else if(r>kt(e.year(),t,n)){o=r-kt(e.year(),t,n);i=e.year()+1}else{i=e.year();o=r}return{week:o,year:i}}function kt(e,t,n){var a=bt(e,t,n),r=bt(e+1,t,n);return(Ue(e)-a+r)/7}function St(e){return Mt(e,this._week.dow,this._week.doy).week}oe("w",["ww",2],"wo","week"),oe("W",["WW",2],"Wo","isoWeek"),G("week","w"),G("isoWeek","W"),Q("week",5),Q("isoWeek",5),Ce("w",me),Ce("ww",me,ce),Ce("W",me),Ce("WW",me,ce),je(["w","ww","W","WW"],function(e,t,n,a){t[a.substr(0,1)]=S(e)});var xt={dow:0,doy:6};function Et(){return this._week.dow}function Tt(){return this._week.doy}function Ct(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function Lt(e){var t=Mt(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}function Dt(e,t){if(typeof e!=="string"){return e}if(!isNaN(e)){return parseInt(e,10)}e=t.weekdaysParse(e);if(typeof e==="number"){return e}return null}function Ot(e,t){if(typeof e==="string"){return t.weekdaysParse(e)%7||7}return isNaN(e)?null:e}function Nt(e,t){return e.slice(t,7).concat(e.slice(0,t))}oe("d",0,"do","day"),oe("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),oe("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),oe("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),oe("e",0,0,"weekday"),oe("E",0,0,"isoWeekday"),G("day","d"),G("weekday","e"),G("isoWeekday","E"),Q("day",11),Q("weekday",11),Q("isoWeekday",11),Ce("d",me),Ce("e",me),Ce("E",me),Ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),Ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),Ce("dddd",function(e,t){return t.weekdaysRegex(e)}),je(["dd","ddd","dddd"],function(e,t,n,a){var r=n._locale.weekdaysParse(e,a,n._strict);if(r!=null){t.d=r}else{m(n).invalidWeekday=e}}),je(["d","e","E"],function(e,t,n,a){t[a]=S(e)});var Pt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");function jt(e,t){var n=i(this._weekdays)?this._weekdays:this._weekdays[e&&e!==true&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===true?Nt(n,this._week.dow):e?n[e.day()]:n}var Yt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");function It(e){return e===true?Nt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}var At="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Rt(e){return e===true?Nt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Ht(e,t,n){var a,r,o,i=e.toLocaleLowerCase();if(!this._weekdaysParse){this._weekdaysParse=[];this._shortWeekdaysParse=[];this._minWeekdaysParse=[];for(a=0;a<7;++a){o=h([2e3,1]).day(a);this._minWeekdaysParse[a]=this.weekdaysMin(o,"").toLocaleLowerCase();this._shortWeekdaysParse[a]=this.weekdaysShort(o,"").toLocaleLowerCase();this._weekdaysParse[a]=this.weekdays(o,"").toLocaleLowerCase()}}if(n){if(t==="dddd"){r=Ge.call(this._weekdaysParse,i);return r!==-1?r:null}else if(t==="ddd"){r=Ge.call(this._shortWeekdaysParse,i);return r!==-1?r:null}else{r=Ge.call(this._minWeekdaysParse,i);return r!==-1?r:null}}else{if(t==="dddd"){r=Ge.call(this._weekdaysParse,i);if(r!==-1){return r}r=Ge.call(this._shortWeekdaysParse,i);if(r!==-1){return r}r=Ge.call(this._minWeekdaysParse,i);return r!==-1?r:null}else if(t==="ddd"){r=Ge.call(this._shortWeekdaysParse,i);if(r!==-1){return r}r=Ge.call(this._weekdaysParse,i);if(r!==-1){return r}r=Ge.call(this._minWeekdaysParse,i);return r!==-1?r:null}else{r=Ge.call(this._minWeekdaysParse,i);if(r!==-1){return r}r=Ge.call(this._weekdaysParse,i);if(r!==-1){return r}r=Ge.call(this._shortWeekdaysParse,i);return r!==-1?r:null}}}function Ft(e,t,n){var a,r,o;if(this._weekdaysParseExact){return Ht.call(this,e,t,n)}if(!this._weekdaysParse){this._weekdaysParse=[];this._minWeekdaysParse=[];this._shortWeekdaysParse=[];this._fullWeekdaysParse=[]}for(a=0;a<7;a++){r=h([2e3,1]).day(a);if(n&&!this._fullWeekdaysParse[a]){this._fullWeekdaysParse[a]=new RegExp("^"+this.weekdays(r,"").replace(".","\\.?")+"$","i");this._shortWeekdaysParse[a]=new RegExp("^"+this.weekdaysShort(r,"").replace(".","\\.?")+"$","i");this._minWeekdaysParse[a]=new RegExp("^"+this.weekdaysMin(r,"").replace(".","\\.?")+"$","i")}if(!this._weekdaysParse[a]){o="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,"");this._weekdaysParse[a]=new RegExp(o.replace(".",""),"i")}if(n&&t==="dddd"&&this._fullWeekdaysParse[a].test(e)){return a}else if(n&&t==="ddd"&&this._shortWeekdaysParse[a].test(e)){return a}else if(n&&t==="dd"&&this._minWeekdaysParse[a].test(e)){return a}else if(!n&&this._weekdaysParse[a].test(e)){return a}}}function zt(e){if(!this.isValid()){return e!=null?this:NaN}var t=this._isUTC?this._d.getUTCDay():this._d.getDay();if(e!=null){e=Dt(e,this.localeData());return this.add(e-t,"d")}else{return t}}function Wt(e){if(!this.isValid()){return e!=null?this:NaN}var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function Bt(e){if(!this.isValid()){return e!=null?this:NaN}if(e!=null){var t=Ot(e,this.localeData());return this.day(this.day()%7?t:t-7)}else{return this.day()||7}}var Vt=Ee;function Ut(e){if(this._weekdaysParseExact){if(!f(this,"_weekdaysRegex")){$t.call(this)}if(e){return this._weekdaysStrictRegex}else{return this._weekdaysRegex}}else{if(!f(this,"_weekdaysRegex")){this._weekdaysRegex=Vt}return this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex}}var Kt=Ee;function qt(e){if(this._weekdaysParseExact){if(!f(this,"_weekdaysRegex")){$t.call(this)}if(e){return this._weekdaysShortStrictRegex}else{return this._weekdaysShortRegex}}else{if(!f(this,"_weekdaysShortRegex")){this._weekdaysShortRegex=Kt}return this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}}var Gt=Ee;function Jt(e){if(this._weekdaysParseExact){if(!f(this,"_weekdaysRegex")){$t.call(this)}if(e){return this._weekdaysMinStrictRegex}else{return this._weekdaysMinRegex}}else{if(!f(this,"_weekdaysMinRegex")){this._weekdaysMinRegex=Gt}return this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}}function $t(){function e(e,t){return t.length-e.length}var t=[],n=[],a=[],r=[],o,i,s,l,u;for(o=0;o<7;o++){i=h([2e3,1]).day(o);s=this.weekdaysMin(i,"");l=this.weekdaysShort(i,"");u=this.weekdays(i,"");t.push(s);n.push(l);a.push(u);r.push(s);r.push(l);r.push(u)}t.sort(e);n.sort(e);a.sort(e);r.sort(e);for(o=0;o<7;o++){n[o]=Oe(n[o]);a[o]=Oe(a[o]);r[o]=Oe(r[o])}this._weekdaysRegex=new RegExp("^("+r.join("|")+")","i");this._weekdaysShortRegex=this._weekdaysRegex;this._weekdaysMinRegex=this._weekdaysRegex;this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i");this._weekdaysShortStrictRegex=new RegExp("^("+n.join("|")+")","i");this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Xt(){return this.hours()%12||12}function Qt(){return this.hours()||24}function Zt(e,t){oe(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function en(e,t){return t._meridiemParse}function tn(e){return(e+"").toLowerCase().charAt(0)==="p"}oe("H",["HH",2],0,"hour"),oe("h",["hh",2],0,Xt),oe("k",["kk",2],0,Qt),oe("hmm",0,0,function(){return""+Xt.apply(this)+ee(this.minutes(),2)}),oe("hmmss",0,0,function(){return""+Xt.apply(this)+ee(this.minutes(),2)+ee(this.seconds(),2)}),oe("Hmm",0,0,function(){return""+this.hours()+ee(this.minutes(),2)}),oe("Hmmss",0,0,function(){return""+this.hours()+ee(this.minutes(),2)+ee(this.seconds(),2)}),Zt("a",true),Zt("A",false),G("hour","h"),Q("hour",13),Ce("a",en),Ce("A",en),Ce("H",me),Ce("h",me),Ce("k",me),Ce("HH",me,ce),Ce("hh",me,ce),Ce("kk",me,ce),Ce("hmm",ge),Ce("hmmss",ye),Ce("Hmm",ge),Ce("Hmmss",ye),Pe(["H","HH"],He),Pe(["k","kk"],function(e,t,n){var a=S(e);t[He]=a===24?0:a}),Pe(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e);n._meridiem=e}),Pe(["h","hh"],function(e,t,n){t[He]=S(e);m(n).bigHour=true}),Pe("hmm",function(e,t,n){var a=e.length-2;t[He]=S(e.substr(0,a));t[Fe]=S(e.substr(a));m(n).bigHour=true}),Pe("hmmss",function(e,t,n){var a=e.length-4;var r=e.length-2;t[He]=S(e.substr(0,a));t[Fe]=S(e.substr(a,2));t[ze]=S(e.substr(r));m(n).bigHour=true}),Pe("Hmm",function(e,t,n){var a=e.length-2;t[He]=S(e.substr(0,a));t[Fe]=S(e.substr(a))}),Pe("Hmmss",function(e,t,n){var a=e.length-4;var r=e.length-2;t[He]=S(e.substr(0,a));t[Fe]=S(e.substr(a,2));t[ze]=S(e.substr(r))});var nn=/[ap]\.?m?\.?/i;function an(e,t,n){if(e>11){return n?"pm":"PM"}else{return n?"am":"AM"}}var rn=$e("Hours",true),on={calendar:Y,longDateFormat:A,invalidDate:H,ordinal:z,dayOfMonthOrdinalParse:W,relativeTime:V,months:rt,monthsShort:it,week:xt,weekdays:Pt,weekdaysMin:At,weekdaysShort:Yt,meridiemParse:nn},sn={},ln={},un;function dn(e){return e?e.toLowerCase().replace("_","-"):e}function cn(e){var t=0,n,a,r,o;while(t0){r=fn(o.slice(0,n).join("-"));if(r){return r}if(a&&a.length>=n&&x(o,a,true)>=n-1){break}n--}t++}return un}function fn(e){var t=null;if(!sn[e]&&typeof Fo!=="undefined"&&Fo&&Fo.exports){try{t=un._abbr;var n=zo;Wo(469)("./"+e);pn(t)}catch(e){}}return sn[e]}function pn(e,t){var n;if(e){if(o(t)){n=gn(e)}else{n=hn(e,t)}if(n){un=n}else{if(typeof console!=="undefined"&&console.warn){console.warn("Locale "+e+" not found. Did you forget to load it?")}}}return un._abbr}function hn(e,t){if(t!==null){var n,a=on;t.abbr=e;if(sn[e]!=null){D("defineLocaleOverride","use moment.updateLocale(localeName, config) to change "+"an existing locale. moment.defineLocale(localeName, "+"config) should only be used for creating a new locale "+"See http://momentjs.com/guides/#/warnings/define-locale/ for more info.");a=sn[e]._config}else if(t.parentLocale!=null){if(sn[t.parentLocale]!=null){a=sn[t.parentLocale]._config}else{n=fn(t.parentLocale);if(n!=null){a=n._config}else{if(!ln[t.parentLocale]){ln[t.parentLocale]=[]}ln[t.parentLocale].push({name:e,config:t});return null}}}sn[e]=new j(P(a,t));if(ln[e]){ln[e].forEach(function(e){hn(e.name,e.config)})}pn(e);return sn[e]}else{delete sn[e];return null}}function mn(e,t){if(null!=t){var n,a,r=on;null!=(a=fn(e))&&(r=a._config),t=P(r,t),(n=new j(t)).parentLocale=sn[e],sn[e]=n,pn(e)}else null!=sn[e]&&(null!=sn[e].parentLocale?sn[e]=sn[e].parentLocale:null!=sn[e]&&delete sn[e]);return sn[e]}function gn(e){var t;if(e&&e._locale&&e._locale._abbr){e=e._locale._abbr}if(!e){return un}if(!i(e)){t=fn(e);if(t){return t}e=[e]}return cn(e)}function yn(){return L(sn)}function vn(e){var t;var n=e._a;if(n&&m(e).overflow===-2){t=n[Ae]<0||n[Ae]>11?Ae:n[Re]<1||n[Re]>nt(n[Ie],n[Ae])?Re:n[He]<0||n[He]>24||n[He]===24&&(n[Fe]!==0||n[ze]!==0||n[We]!==0)?He:n[Fe]<0||n[Fe]>59?Fe:n[ze]<0||n[ze]>59?ze:n[We]<0||n[We]>999?We:-1;if(m(e)._overflowDayOfYear&&(tRe)){t=Re}if(m(e)._overflowWeeks&&t===-1){t=Be}if(m(e)._overflowWeekday&&t===-1){t=Ve}m(e).overflow=t}return e}function _n(e,t,n){if(e!=null){return e}if(t!=null){return t}return n}function bn(e){var t=new Date(u.now());if(e._useUTC){return[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]}return[t.getFullYear(),t.getMonth(),t.getDate()]}function wn(e){var t,n,a=[],r,o,i;if(e._d){return}r=bn(e);if(e._w&&e._a[Re]==null&&e._a[Ae]==null){Mn(e)}if(e._dayOfYear!=null){i=_n(e._a[Ie],r[Ie]);if(e._dayOfYear>Ue(i)||e._dayOfYear===0){m(e)._overflowDayOfYear=true}n=_t(i,0,e._dayOfYear);e._a[Ae]=n.getUTCMonth();e._a[Re]=n.getUTCDate()}for(t=0;t<3&&e._a[t]==null;++t){e._a[t]=a[t]=r[t]}for(;t<7;t++){e._a[t]=a[t]=e._a[t]==null?t===2?1:0:e._a[t]}if(e._a[He]===24&&e._a[Fe]===0&&e._a[ze]===0&&e._a[We]===0){e._nextDay=true;e._a[He]=0}e._d=(e._useUTC?_t:vt).apply(null,a);o=e._useUTC?e._d.getUTCDay():e._d.getDay();if(e._tzm!=null){e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm)}if(e._nextDay){e._a[He]=24}if(e._w&&typeof e._w.d!=="undefined"&&e._w.d!==o){m(e).weekdayMismatch=true}}function Mn(e){var t,n,a,r,o,i,s,l;t=e._w;if(t.GG!=null||t.W!=null||t.E!=null){o=1;i=4;n=_n(t.GG,e._a[Ie],Mt(qn(),1,4).year);a=_n(t.W,1);r=_n(t.E,1);if(r<1||r>7){l=true}}else{o=e._locale._week.dow;i=e._locale._week.doy;var u=Mt(qn(),o,i);n=_n(t.gg,e._a[Ie],u.year);a=_n(t.w,u.week);if(t.d!=null){r=t.d;if(r<0||r>6){l=true}}else if(t.e!=null){r=t.e+o;if(t.e<0||t.e>6){l=true}}else{r=o}}if(a<1||a>kt(n,o,i)){m(e)._overflowWeeks=true}else if(l!=null){m(e)._overflowWeekday=true}else{s=wt(n,a,r,o,i);e._a[Ie]=s.year;e._dayOfYear=s.dayOfYear}}var kn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Sn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,xn=/Z|[+-]\d\d(?::?\d\d)?/,En=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,false],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,false],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,false],["YYYYDDD",/\d{7}/]],Tn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Cn=/^\/?Date\((\-?\d+)/i;function Ln(e){var t,n,a=e._i,r=kn.exec(a)||Sn.exec(a),o,i,s,l;if(r){m(e).iso=true;for(t=0,n=En.length;t0){m(e).unusedInput.push(i)}t=t.slice(t.indexOf(a)+a.length);l+=a.length}if(re[o]){if(a){m(e).empty=false}else{m(e).unusedTokens.push(o)}Ye(o,a,e)}else if(e._strict&&!a){m(e).unusedTokens.push(o)}}m(e).charsLeftOver=s-l;if(t.length>0){m(e).unusedInput.push(t)}if(e._a[He]<=12&&m(e).bigHour===true&&e._a[He]>0){m(e).bigHour=undefined}m(e).parsedDateParts=e._a.slice(0);m(e).meridiem=e._meridiem;e._a[He]=Fn(e._locale,e._a[He],e._meridiem);wn(e);vn(e)}function Fn(e,t,n){var a;if(n==null){return t}if(e.meridiemHour!=null){return e.meridiemHour(t,n)}else if(e.isPM!=null){a=e.isPM(n);if(a&&t<12){t+=12}if(!a&&t===12){t=0}return t}else{return t}}function zn(e){var t,n,a,r,o;if(e._f.length===0){m(e).invalidFormat=true;e._d=new Date(NaN);return}for(r=0;rthis?this:e}else{return y()}});function $n(e,t){var n,a;if(t.length===1&&i(t[0])){t=t[0]}if(!t.length){return qn()}n=t[0];for(a=1;athis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function _a(){if(!o(this._isDSTShifted)){return this._isDSTShifted}var e={};_(e,this);e=Vn(e);if(e._a){var t=e._isUTC?h(e._a):qn(e._a);this._isDSTShifted=this.isValid()&&x(e._a,t.toArray())>0}else{this._isDSTShifted=false}return this._isDSTShifted}function ba(){return this.isValid()?!this._isUTC:false}function wa(){return this.isValid()?this._isUTC:false}function Ma(){return this.isValid()?this._isUTC&&this._offset===0:false}u.updateOffset=function(){};var ka=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Sa=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function xa(e,t){var n=e,a=null,r,o,i;if(oa(e)){n={ms:e._milliseconds,d:e._days,M:e._months}}else if(d(e)){n={};if(t){n[t]=e}else{n.milliseconds=e}}else if(!!(a=ka.exec(e))){r=a[1]==="-"?-1:1;n={y:0,d:S(a[Re])*r,h:S(a[He])*r,m:S(a[Fe])*r,s:S(a[ze])*r,ms:S(ia(a[We]*1e3))*r}}else if(!!(a=Sa.exec(e))){r=a[1]==="-"?-1:1;n={y:Ea(a[2],r),M:Ea(a[3],r),w:Ea(a[4],r),d:Ea(a[5],r),h:Ea(a[6],r),m:Ea(a[7],r),s:Ea(a[8],r)}}else if(n==null){n={}}else if(typeof n==="object"&&("from"in n||"to"in n)){i=Ca(qn(n.from),qn(n.to));n={};n.ms=i.milliseconds;n.M=i.months}o=new ra(n);if(oa(e)&&f(e,"_locale")){o._locale=e._locale}return o}function Ea(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Ta(e,t){var n={};n.months=t.month()-e.month()+(t.year()-e.year())*12;if(e.clone().add(n.months,"M").isAfter(t)){--n.months}n.milliseconds=+t-+e.clone().add(n.months,"M");return n}function Ca(e,t){var n;if(!(e.isValid()&&t.isValid())){return{milliseconds:0,months:0}}t=da(t,e);if(e.isBefore(t)){n=Ta(e,t)}else{n=Ta(t,e);n.milliseconds=-n.milliseconds;n.months=-n.months}return n}function La(r,o){return function(e,t){var n,a;if(t!==null&&!isNaN(+t)){D(o,"moment()."+o+"(period, number) is deprecated. Please use moment()."+o+"(number, period). "+"See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.");a=e;e=t;t=a}e=typeof e==="string"?+e:e;n=xa(e,t);Da(this,n,r);return this}}function Da(e,t,n,a){var r=t._milliseconds,o=ia(t._days),i=ia(t._months);if(!e.isValid()){return}a=a==null?true:a;if(i){dt(e,Xe(e,"Month")+i*n)}if(o){Qe(e,"Date",Xe(e,"Date")+o*n)}if(r){e._d.setTime(e._d.valueOf()+r*n)}if(a){u.updateOffset(e,o||i)}}xa.fn=ra.prototype,xa.invalid=aa;var Oa=La(1,"add"),Na=La(-1,"subtract");function Pa(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function ja(e,t){var n=e||qn(),a=da(n,this).startOf("day"),r=u.calendarFormat(this,a)||"sameElse";var o=t&&(O(t[r])?t[r].call(this,n):t[r]);return this.format(o||this.localeData().calendar(r,this,qn(n)))}function Ya(){return new w(this)}function Ia(e,t){var n=M(e)?e:qn(e);if(!(this.isValid()&&n.isValid())){return false}t=J(t)||"millisecond";if(t==="millisecond"){return this.valueOf()>n.valueOf()}else{return n.valueOf()9999){return le(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ")}if(O(Date.prototype.toISOString)){if(t){return this.toDate().toISOString()}else{return new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",le(n,"Z"))}}return le(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function Ka(){if(!this.isValid()){return"moment.invalid(/* "+this._i+" */)"}var e="moment";var t="";if(!this.isLocal()){e=this.utcOffset()===0?"moment.utc":"moment.parseZone";t="Z"}var n="["+e+'("]';var a=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";var r="-MM-DD[T]HH:mm:ss.SSS";var o=t+'[")]';return this.format(n+a+r+o)}function qa(e){if(!e){e=this.isUtc()?u.defaultFormatUtc:u.defaultFormat}var t=le(this,e);return this.localeData().postformat(t)}function Ga(e,t){if(this.isValid()&&(M(e)&&e.isValid()||qn(e).isValid())){return xa({to:this,from:e}).locale(this.locale()).humanize(!t)}else{return this.localeData().invalidDate()}}function Ja(e){return this.from(qn(),e)}function $a(e,t){if(this.isValid()&&(M(e)&&e.isValid()||qn(e).isValid())){return xa({from:this,to:e}).locale(this.locale()).humanize(!t)}else{return this.localeData().invalidDate()}}function Xa(e){return this.to(qn(),e)}function Qa(e){var t;if(e===undefined){return this._locale._abbr}else{t=gn(e);if(t!=null){this._locale=t}return this}}u.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",u.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Za=T("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){if(e===undefined){return this.localeData()}else{return this.locale(e)}});function er(){return this._locale}var tr=1e3,nr=60*tr,ar=60*nr,rr=(365*400+97)*24*ar;function or(e,t){return(e%t+t)%t}function ir(e,t,n){if(e<100&&e>=0){return new Date(e+400,t,n)-rr}else{return new Date(e,t,n).valueOf()}}function sr(e,t,n){if(e<100&&e>=0){return Date.UTC(e+400,t,n)-rr}else{return Date.UTC(e,t,n)}}function lr(e){var t;e=J(e);if(e===undefined||e==="millisecond"||!this.isValid()){return this}var n=this._isUTC?sr:ir;switch(e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf();t-=or(t+(this._isUTC?0:this.utcOffset()*nr),ar);break;case"minute":t=this._d.valueOf();t-=or(t,nr);break;case"second":t=this._d.valueOf();t-=or(t,tr);break}this._d.setTime(t);u.updateOffset(this,true);return this}function ur(e){var t;e=J(e);if(e===undefined||e==="millisecond"||!this.isValid()){return this}var n=this._isUTC?sr:ir;switch(e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf();t+=ar-or(t+(this._isUTC?0:this.utcOffset()*nr),ar)-1;break;case"minute":t=this._d.valueOf();t+=nr-or(t,nr)-1;break;case"second":t=this._d.valueOf();t+=tr-or(t,tr)-1;break}this._d.setTime(t);u.updateOffset(this,true);return this}function dr(){return this._d.valueOf()-(this._offset||0)*6e4}function cr(){return Math.floor(this.valueOf()/1e3)}function fr(){return new Date(this.valueOf())}function pr(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function hr(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function mr(){return this.isValid()?this.toISOString():null}function gr(){return g(this)}function yr(){return p({},m(this))}function vr(){return m(this).overflow}function _r(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function br(e,t){oe(0,[e,e.length],0,t)}function wr(e){return xr.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Mr(e){return xr.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function kr(){return kt(this.year(),1,4)}function Sr(){var e=this.localeData()._week;return kt(this.year(),e.dow,e.doy)}function xr(e,t,n,a,r){var o;if(e==null){return Mt(this,a,r).year}else{o=kt(e,a,r);if(t>o){t=o}return Er.call(this,e,t,n,a,r)}}function Er(e,t,n,a,r){var o=wt(e,t,n,a,r),i=_t(o.year,0,o.dayOfYear);this.year(i.getUTCFullYear());this.month(i.getUTCMonth());this.date(i.getUTCDate());return this}function Tr(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}oe(0,["gg",2],0,function(){return this.weekYear()%100}),oe(0,["GG",2],0,function(){return this.isoWeekYear()%100}),br("gggg","weekYear"),br("ggggg","weekYear"),br("GGGG","isoWeekYear"),br("GGGGG","isoWeekYear"),G("weekYear","gg"),G("isoWeekYear","GG"),Q("weekYear",1),Q("isoWeekYear",1),Ce("G",Me),Ce("g",Me),Ce("GG",me,ce),Ce("gg",me,ce),Ce("GGGG",_e,pe),Ce("gggg",_e,pe),Ce("GGGGG",be,he),Ce("ggggg",be,he),je(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,a){t[a.substr(0,2)]=S(e)}),je(["gg","GG"],function(e,t,n,a){t[a]=u.parseTwoDigitYear(e)}),oe("Q",0,"Qo","quarter"),G("quarter","Q"),Q("quarter",7),Ce("Q",de),Pe("Q",function(e,t){t[Ae]=(S(e)-1)*3}),oe("D",["DD",2],"Do","date"),G("date","D"),Q("date",9),Ce("D",me),Ce("DD",me,ce),Ce("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),Pe(["D","DD"],Re),Pe("Do",function(e,t){t[Re]=S(e.match(me)[0])});var Cr=$e("Date",true);function Lr(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}oe("DDD",["DDDD",3],"DDDo","dayOfYear"),G("dayOfYear","DDD"),Q("dayOfYear",4),Ce("DDD",ve),Ce("DDDD",fe),Pe(["DDD","DDDD"],function(e,t,n){n._dayOfYear=S(e)}),oe("m",["mm",2],0,"minute"),G("minute","m"),Q("minute",14),Ce("m",me),Ce("mm",me,ce),Pe(["m","mm"],Fe);var Dr=$e("Minutes",false);oe("s",["ss",2],0,"second"),G("second","s"),Q("second",15),Ce("s",me),Ce("ss",me,ce),Pe(["s","ss"],ze);var Or=$e("Seconds",false),Nr;for(oe("S",0,0,function(){return~~(this.millisecond()/100)}),oe(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),oe(0,["SSS",3],0,"millisecond"),oe(0,["SSSS",4],0,function(){return this.millisecond()*10}),oe(0,["SSSSS",5],0,function(){return this.millisecond()*100}),oe(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),oe(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),oe(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),oe(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),G("millisecond","ms"),Q("millisecond",16),Ce("S",ve,de),Ce("SS",ve,ce),Ce("SSS",ve,fe),Nr="SSSS";Nr.length<=9;Nr+="S"){Ce(Nr,we)}function Pr(e,t){t[We]=S(("0."+e)*1e3)}for(Nr="S";Nr.length<=9;Nr+="S"){Pe(Nr,Pr)}var jr=$e("Milliseconds",false);function Yr(){return this._isUTC?"UTC":""}function Ir(){return this._isUTC?"Coordinated Universal Time":""}oe("z",0,0,"zoneAbbr"),oe("zz",0,0,"zoneName");var Ar=w.prototype;function Rr(e){return qn(1e3*e)}function Hr(){return qn.apply(null,arguments).parseZone()}function Fr(e){return e}Ar.add=Oa,Ar.calendar=ja,Ar.clone=Ya,Ar.diff=Wa,Ar.endOf=ur,Ar.format=qa,Ar.from=Ga,Ar.fromNow=Ja,Ar.to=$a,Ar.toNow=Xa,Ar.get=Ze,Ar.invalidAt=vr,Ar.isAfter=Ia,Ar.isBefore=Aa,Ar.isBetween=Ra,Ar.isSame=Ha,Ar.isSameOrAfter=Fa,Ar.isSameOrBefore=za,Ar.isValid=gr,Ar.lang=Za,Ar.locale=Qa,Ar.localeData=er,Ar.max=Jn,Ar.min=Gn,Ar.parsingFlags=yr,Ar.set=et,Ar.startOf=lr,Ar.subtract=Na,Ar.toArray=pr,Ar.toObject=hr,Ar.toDate=fr,Ar.toISOString=Ua,Ar.inspect=Ka,Ar.toJSON=mr,Ar.toString=Va,Ar.unix=cr,Ar.valueOf=dr,Ar.creationData=_r,Ar.year=qe,Ar.isLeapYear=Je,Ar.weekYear=wr,Ar.isoWeekYear=Mr,Ar.quarter=Ar.quarters=Tr,Ar.month=ct,Ar.daysInMonth=ft,Ar.week=Ar.weeks=Ct,Ar.isoWeek=Ar.isoWeeks=Lt,Ar.weeksInYear=Sr,Ar.isoWeeksInYear=kr,Ar.date=Cr,Ar.day=Ar.days=zt,Ar.weekday=Wt,Ar.isoWeekday=Bt,Ar.dayOfYear=Lr,Ar.hour=Ar.hours=rn,Ar.minute=Ar.minutes=Dr,Ar.second=Ar.seconds=Or,Ar.millisecond=Ar.milliseconds=jr,Ar.utcOffset=fa,Ar.utc=ha,Ar.local=ma,Ar.parseZone=ga,Ar.hasAlignedHourOffset=ya,Ar.isDST=va,Ar.isLocal=ba,Ar.isUtcOffset=wa,Ar.isUtc=Ma,Ar.isUTC=Ma,Ar.zoneAbbr=Yr,Ar.zoneName=Ir,Ar.dates=T("dates accessor is deprecated. Use date instead.",Cr),Ar.months=T("months accessor is deprecated. Use month instead",ct),Ar.years=T("years accessor is deprecated. Use year instead",qe),Ar.zone=T("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",pa),Ar.isDSTShifted=T("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",_a);var zr=j.prototype;function Wr(e,t,n,a){var r=gn();var o=h().set(a,t);return r[n](o,e)}function Br(e,t,n){if(d(e)){t=e;e=undefined}e=e||"";if(t!=null){return Wr(e,t,n,"month")}var a;var r=[];for(a=0;a<12;a++){r[a]=Wr(e,a,n,"month")}return r}function Vr(e,t,n,a){if(typeof e==="boolean"){if(d(t)){n=t;t=undefined}t=t||""}else{t=e;n=t;e=false;if(d(t)){n=t;t=undefined}t=t||""}var r=gn(),o=e?r._week.dow:0;if(n!=null){return Wr(t,(n+o)%7,a,"day")}var i;var s=[];for(i=0;i<7;i++){s[i]=Wr(t,(i+o)%7,a,"day")}return s}function Ur(e,t){return Br(e,t,"months")}function Kr(e,t){return Br(e,t,"monthsShort")}function qr(e,t,n){return Vr(e,t,n,"weekdays")}function Gr(e,t,n){return Vr(e,t,n,"weekdaysShort")}function Jr(e,t,n){return Vr(e,t,n,"weekdaysMin")}zr.calendar=I,zr.longDateFormat=R,zr.invalidDate=F,zr.ordinal=B,zr.preparse=Fr,zr.postformat=Fr,zr.relativeTime=U,zr.pastFuture=K,zr.set=N,zr.months=ot,zr.monthsShort=st,zr.monthsParse=ut,zr.monthsRegex=gt,zr.monthsShortRegex=ht,zr.week=St,zr.firstDayOfYear=Tt,zr.firstDayOfWeek=Et,zr.weekdays=jt,zr.weekdaysMin=Rt,zr.weekdaysShort=It,zr.weekdaysParse=Ft,zr.weekdaysRegex=Ut,zr.weekdaysShortRegex=qt,zr.weekdaysMinRegex=Jt,zr.isPM=tn,zr.meridiem=an,pn("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=S(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}}),u.lang=T("moment.lang is deprecated. Use moment.locale instead.",pn),u.langData=T("moment.langData is deprecated. Use moment.localeData instead.",gn);var $r=Math.abs;function Xr(){var e=this._data;return this._milliseconds=$r(this._milliseconds),this._days=$r(this._days),this._months=$r(this._months),e.milliseconds=$r(e.milliseconds),e.seconds=$r(e.seconds),e.minutes=$r(e.minutes),e.hours=$r(e.hours),e.months=$r(e.months),e.years=$r(e.years),this}function Qr(e,t,n,a){var r=xa(t,n);e._milliseconds+=a*r._milliseconds;e._days+=a*r._days;e._months+=a*r._months;return e._bubble()}function Zr(e,t){return Qr(this,e,t,1)}function eo(e,t){return Qr(this,e,t,-1)}function to(e){if(e<0){return Math.floor(e)}else{return Math.ceil(e)}}function no(){var e,t,n,a,r,o=this._milliseconds,i=this._days,s=this._months,l=this._data;if(!(0<=o&&0<=i&&0<=s||o<=0&&i<=0&&s<=0))o+=864e5*to(ro(s)+i),s=i=0;return l.milliseconds=o%1e3,e=k(o/1e3),l.seconds=e%60,t=k(e/60),l.minutes=t%60,n=k(t/60),l.hours=n%24,i+=k(n/24),r=k(ao(i)),s+=r,i-=to(ro(r)),a=k(s/12),s%=12,l.days=i,l.months=s,l.years=a,this}function ao(e){return e*4800/146097}function ro(e){return e*146097/4800}function oo(e){if(!this.isValid())return NaN;var t,n,a=this._milliseconds;if("month"===(e=J(e))||"quarter"===e||"year"===e)switch(t=this._days+a/864e5,n=this._months+ao(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(ro(this._months)),e){case"week":return t/7+a/6048e5;case"day":return t+a/864e5;case"hour":return 24*t+a/36e5;case"minute":return 1440*t+a/6e4;case"second":return 86400*t+a/1e3;case"millisecond":return Math.floor(864e5*t)+a;default:throw new Error("Unknown unit "+e)}}function io(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*S(this._months/12):NaN}function so(e){return function(){return this.as(e)}}var lo=so("ms"),uo=so("s"),co=so("m"),fo=so("h"),po=so("d"),ho=so("w"),mo=so("M"),go=so("Q"),yo=so("y");function vo(){return xa(this)}function _o(e){return e=J(e),this.isValid()?this[e+"s"]():NaN}function bo(e){return function(){return this.isValid()?this._data[e]:NaN}}var wo=bo("milliseconds"),Mo=bo("seconds"),ko=bo("minutes"),So=bo("hours"),xo=bo("days"),Eo=bo("months"),To=bo("years");function Co(){return k(this.days()/7)}var Lo=Math.round,Do={ss:44,s:45,m:45,h:22,d:26,M:11};function Oo(e,t,n,a,r){return r.relativeTime(t||1,!!n,e,a)}function No(e,t,n){var a=xa(e).abs(),r=Lo(a.as("s")),o=Lo(a.as("m")),i=Lo(a.as("h")),s=Lo(a.as("d")),l=Lo(a.as("M")),u=Lo(a.as("y")),d=(r<=Do.ss?["s",r]:r0)-(e<0)||+e}function Ro(){if(!this.isValid()){return this.localeData().invalidDate()}var e=Io(this._milliseconds)/1e3;var t=Io(this._days);var n=Io(this._months);var a,r,o;a=k(e/60);r=k(a/60);e%=60;a%=60;o=k(n/12);n%=12;var i=o;var s=n;var l=t;var u=r;var d=a;var c=e?e.toFixed(3).replace(/\.?0+$/,""):"";var f=this.asSeconds();if(!f){return"P0D"}var p=f<0?"-":"";var h=Ao(this._months)!==Ao(f)?"-":"";var m=Ao(this._days)!==Ao(f)?"-":"";var g=Ao(this._milliseconds)!==Ao(f)?"-":"";return p+"P"+(i?h+i+"Y":"")+(s?h+s+"M":"")+(l?m+l+"D":"")+(u||d||c?"T":"")+(u?g+u+"H":"")+(d?g+d+"M":"")+(c?g+c+"S":"")}var Ho=ra.prototype;return Ho.isValid=function(){return this._isValid},Ho.abs=function(){var e=this._data;return this._milliseconds=$r(this._milliseconds),this._days=$r(this._days),this._months=$r(this._months),e.milliseconds=$r(e.milliseconds),e.seconds=$r(e.seconds),e.minutes=$r(e.minutes),e.hours=$r(e.hours),e.months=$r(e.months),e.years=$r(e.years),this},Ho.add=function(e,t){return Qr(this,e,t,1)},Ho.subtract=function(e,t){return Qr(this,e,t,-1)},Ho.as=function(e){if(!this.isValid())return NaN;var t,n,a=this._milliseconds;if("month"===(e=J(e))||"quarter"===e||"year"===e)switch(t=this._days+a/864e5,n=this._months+ao(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(ro(this._months)),e){case"week":return t/7+a/6048e5;case"day":return t+a/864e5;case"hour":return 24*t+a/36e5;case"minute":return 1440*t+a/6e4;case"second":return 86400*t+a/1e3;case"millisecond":return Math.floor(864e5*t)+a;default:throw new Error("Unknown unit "+e)}},Ho.asMilliseconds=lo,Ho.asSeconds=uo,Ho.asMinutes=co,Ho.asHours=fo,Ho.asDays=po,Ho.asWeeks=ho,Ho.asMonths=mo,Ho.asQuarters=go,Ho.asYears=yo,Ho.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*S(this._months/12):NaN},Ho._bubble=function(){var e,t,n,a,r,o=this._milliseconds,i=this._days,s=this._months,l=this._data;0<=o&&0<=i&&0<=s||o<=0&&i<=0&&s<=0||(o+=864e5*to(ro(s)+i),s=i=0);return l.milliseconds=o%1e3,e=k(o/1e3),l.seconds=e%60,t=k(e/60),l.minutes=t%60,n=k(t/60),l.hours=n%24,i+=k(n/24),r=k(ao(i)),s+=r,i-=to(ro(r)),a=k(s/12),s%=12,l.days=i,l.months=s,l.years=a,this},Ho.clone=function(){return xa(this)},Ho.get=function(e){return e=J(e),this.isValid()?this[e+"s"]():NaN},Ho.milliseconds=wo,Ho.seconds=Mo,Ho.minutes=ko,Ho.hours=So,Ho.days=xo,Ho.weeks=function(){return k(this.days()/7)},Ho.months=Eo,Ho.years=To,Ho.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=function(e,t,n){var a=xa(e).abs(),r=Lo(a.as("s")),o=Lo(a.as("m")),i=Lo(a.as("h")),s=Lo(a.as("d")),l=Lo(a.as("M")),u=Lo(a.as("y")),d=(r<=Do.ss?["s",r]:r 16.8.0")},h.prototype.validate=function(e,t){this.validateCallback(e,t)},h.prototype.reset=function(e,t){var n=1","Select");var n=u(e,t);return e.onInputUpdate&&(n.onSearch=e.onInputUpdate,n.showSearch=!0),n}}),t.default=a.default.config(r.default,{transform:u,exportNames:["focusInput","handleSearchClear"]}),e.exports=t.default},function(e,t,n){"use strict";function a(){return(a=Object.assign||function(e){for(var t=1;tt?n.splice(t,n.length-t,a):n.push(a),u({action:"PUSH",location:a,index:t,entries:n}))})},replace:function(e,t){var n=P(e,t,d(),h.location);l.confirmTransitionTo(n,"REPLACE",r,function(e){e&&u({action:"REPLACE",location:h.entries[h.index]=n})})},go:p,goBack:function(){p(-1)},goForward:function(){p(1)},canGo:function(e){var t=h.index+e;return 0<=t&&t 16.8.0")},h.prototype.validate=function(e,t){this.validateCallback(e,t)},h.prototype.reset=function(e,t){var n=1","Select");var n=u(e,t);return e.onInputUpdate&&(n.onSearch=e.onInputUpdate,n.showSearch=!0),n}}),t.default=a.default.config(r.default,{transform:u,exportNames:["focusInput","handleSearchClear"]}),e.exports=t.default},function(e,t,n){"use strict";n(72),n(50),n(31),n(38),n(509)},function(e,t,n){"use strict";n(38),n(513)},function(e,t,n){"use strict";t.__esModule=!0;var s=i(n(4)),l=i(n(19)),a=i(n(7)),r=i(n(544)),o=i(n(545));function i(e){return e&&e.__esModule?e:{default:e}}var u={Row:a.default.config(r.default,{transform:function(e,t){if("type"in e){t("type","fixed | wrap | gutter","Row");var n=e.type,a=(0,l.default)(e,["type"]),r=Array.isArray(n)?n:[n],o=void 0;-1. You may also pass a {context : MyContext} option to connect");var D=m;return function(S){var e=S.displayName||S.name||"Component",x=o(e),E=j({},g,{getDisplayName:o,methodName:i,renderCountProp:s,shouldHandleStateChanges:L,storeKey:u,displayName:x,wrappedComponentName:e,WrappedComponent:S}),t=g.pure;var T=t?O.useMemo:function(e){return e()};function n(n){var e=Object(O.useMemo)(function(){var e=n.forwardedRef,t=Y(n,["forwardedRef"]);return[n.context,e,t]},[n]),t=e[0],a=e[1],r=e[2],o=Object(O.useMemo)(function(){return t&&t.Consumer&&Object(A.isContextConsumer)(N.a.createElement(t.Consumer,null))?t:D},[t,D]),i=Object(O.useContext)(o),s=Boolean(n.store)&&Boolean(n.store.getState)&&Boolean(n.store.dispatch),l=Boolean(i)&&Boolean(i.store);I()(s||l,'Could not find "store" in the context of "'+x+'". Either wrap the root component in a , or pass a custom React context provider to  and the corresponding React context consumer to '+x+" in connect options.");var u=s?n.store:i.store,d=Object(O.useMemo)(function(){return C(u.dispatch,E)},[u]),c=Object(O.useMemo)(function(){if(!L)return F;var e=new P(u,s?null:i.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]},[u,s,i]),f=c[0],p=c[1],h=Object(O.useMemo)(function(){return s?i:j({},i,{subscription:f})},[s,i,f]),m=Object(O.useReducer)(z,H,W),g=m[0][0],y=m[1];if(g&&g.error)throw g.error;var v=Object(O.useRef)(),_=Object(O.useRef)(r),b=Object(O.useRef)(),w=Object(O.useRef)(!1),M=T(function(){return b.current&&r===_.current?b.current:d(u.getState(),r)},[u,g,r]);R(function(){_.current=r,v.current=M,w.current=!1,b.current&&(b.current=null,p())}),R(function(){if(L){var a=!1,r=null,e=function(){if(!a){var e,t,n=u.getState();try{e=d(n,_.current)}catch(e){r=t=e}t||(r=null),e===v.current?w.current||p():(v.current=e,b.current=e,w.current=!0,y({type:"STORE_UPDATED",payload:{error:t}}))}};f.onStateChange=e,f.trySubscribe(),e();return function(){if(a=!0,f.tryUnsubscribe(),f.onStateChange=null,r)throw r}}},[u,f,d]);var k=Object(O.useMemo)(function(){return N.a.createElement(S,j({},M,{ref:a}))},[a,S,M]);return Object(O.useMemo)(function(){return L?N.a.createElement(o.Provider,{value:h},k):k},[o,k,h])}var a=t?N.a.memo(n):n;if(a.WrappedComponent=S,a.displayName=x,p){var r=N.a.forwardRef(function(e,t){return N.a.createElement(a,j({},e,{forwardedRef:t}))});return r.displayName=x,r.WrappedComponent=S,v()(r,S)}return v()(a,S)}}var p=Object.prototype.hasOwnProperty;function h(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function _(e,t){if(h(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(var r=0;r"),e}function ae(e){void 0===e&&(e=y);var t=e===y?ne:function(){return Object(O.useContext)(e)};return function(){return t().store}}var re=ae();function oe(e,t){return e===t}!function(e){void 0===e&&(e=y);var t=e===y?re:ae(e)}();!function(e){void 0===e&&(e=y);var t=e===y?ne:function(){return Object(O.useContext)(e)}}();var ie,se=n(25);n.d(t,"a",function(){return u}),n.d(t,"b",function(){return te}),ie=se.unstable_batchedUpdates,o=ie},function(e,t,n){"use strict";n(31);var a,r,o,i=n(21),s=n.n(i),l=n(13),u=n(14),d=n(15),c=n(16),f=n(22),p=n(17),h=n(0),m=n.n(h),g=n(60),y=n.n(g),v=(n(33),n(20)),_=n.n(v),b=n(78),w=(n(26),n(7)),M=n.n(w),k=n(1),S=(n(600),(0,M.a.config)((o=r=function(e){function n(e){var t;return Object(l.a)(this,n),(t=Object(d.a)(this,Object(c.a)(n).call(this,e)))._namespace=Object(k.b)("namespace")||"",t.state={nownamespace:window.nownamespace||t._namespace||"",namespaceList:window.namespaceList||[]},t}return Object(p.a)(n,e),Object(u.a)(n,[{key:"componentDidMount",value:function(){}},{key:"getLink",value:function(e,t){var n=this;null===window[t]?Object(k.c)({url:"com.alibaba.nacos.service.getLink",data:{linkKey:e},success:function(e){200===e.code&&(window[t]=e.data,n.setState(Object(b.a)({},t,e.data)))}}):this.setState(Object(b.a)({},t,window[t]))}},{key:"changeNameSpace",value:function(e,t){localStorage.setItem("namespace",e),this.setnamespace(e||""),Object(k.d)({namespace:e||"",namespaceShowName:t}),window.nownamespace=e,window.namespaceShowName=t,this.calleeParent(!0),this.props.setNowNameSpace&&this.props.setNowNameSpace(t,e)}},{key:"calleeParent",value:function(e){var t=0t?n.splice(t,n.length-t,a):n.push(a),u({action:"PUSH",location:a,index:t,entries:n})}})},replace:function(e,t){var n=j(e,t,d(),m.location);l.confirmTransitionTo(n,"REPLACE",r,function(e){e&&u({action:"REPLACE",location:m.entries[m.index]=n})})},go:h,goBack:function(){h(-1)},goForward:function(){h(1)},canGo:function(e){var t=m.index+e;return 0<=t&&t>10|55296,1023&n|56320))}function r(){M()}var e,p,b,o,i,h,f,m,w,l,u,M,k,s,x,g,d,y,v,S="sizzle"+ +new Date,_=n.document,E=0,a=0,T=le(),L=le(),C=le(),D=le(),O=function(e,t){return e===t&&(u=!0),0},N={}.hasOwnProperty,t=[],Y=t.pop,P=t.push,j=t.push,I=t.slice,A=function(e,t){for(var n=0,a=e.length;n+~]|"+H+")"+H+"*"),q=new RegExp(H+"|>"),G=new RegExp(W),J=new RegExp("^"+F+"$"),$={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),TAG:new RegExp("^("+F+"|[*])"),ATTR:new RegExp("^"+z),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+H+"*(even|odd|(([+-]|)(\\d*)n|)"+H+"*(?:([+-]|)"+H+"*(\\d+)|))"+H+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+H+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+H+"*((?:-\\d)?\\d*)"+H+"*\\)|)(?=[^-]|$)","i")},X=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,ee=/^[^{]+\{\s*\[native \w/,te=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ne=/[+~]/,ae=new RegExp("\\\\[\\da-fA-F]{1,6}"+H+"?|\\\\([^\\r\\n\\f])","g"),re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,oe=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=ve(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{j.apply(t=I.call(_.childNodes),_.childNodes),t[_.childNodes.length].nodeType}catch(e){j={apply:t.length?function(e,t){P.apply(e,I.call(t))}:function(e,t){for(var n=e.length,a=0;e[n++]=t[a++];);e.length=n-1}}}function se(t,e,n,a){var r,o,i,s,l,u,d,c=e&&e.ownerDocument,f=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==f&&9!==f&&11!==f)return n;if(!a&&(M(e),e=e||k,x)){if(11!==f&&(l=te.exec(t)))if(r=l[1]){if(9===f){if(!(i=e.getElementById(r)))return n;if(i.id===r)return n.push(i),n}else if(c&&(i=c.getElementById(r))&&v(e,i)&&i.id===r)return n.push(i),n}else{if(l[2])return j.apply(n,e.getElementsByTagName(t)),n;if((r=l[3])&&p.getElementsByClassName&&e.getElementsByClassName)return j.apply(n,e.getElementsByClassName(r)),n}if(p.qsa&&!D[t+" "]&&(!g||!g.test(t))&&(1!==f||"object"!==e.nodeName.toLowerCase())){if(d=t,c=e,1===f&&(q.test(t)||K.test(t))){for((c=ne.test(t)&&me(e.parentNode)||e)===e&&p.scope||((s=e.getAttribute("id"))?s=s.replace(re,oe):e.setAttribute("id",s=S)),o=(u=h(t)).length;o--;)u[o]=(s?"#"+s:":scope")+" "+ye(u[o]);d=u.join(",")}try{return j.apply(n,c.querySelectorAll(d)),n}catch(e){D(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return m(t.replace(V,"$1"),e,n,a)}function le(){var n=[];function a(e,t){return n.push(e+" ")>b.cacheLength&&delete a[n.shift()],a[e+" "]=t}return a}function ue(e){return e[S]=!0,e}function de(e){var t=k.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ce(e,t){for(var n=e.split("|"),a=n.length;a--;)b.attrHandle[n[a]]=t}function fe(e,t){var n=t&&e,a=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(a)return a;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ie(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function he(i){return ue(function(o){return o=+o,ue(function(e,t){for(var n,a=i([],e.length,o),r=a.length;r--;)e[n=a[r]]&&(e[n]=!(t[n]=e[n]))})})}function me(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!X.test(t||n&&n.nodeName||"HTML")},M=se.setDocument=function(e){var t,n,a=e?e.ownerDocument||e:_;return a!=k&&9===a.nodeType&&a.documentElement&&(s=(k=a).documentElement,x=!i(k),_!=k&&(n=k.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",r,!1):n.attachEvent&&n.attachEvent("onunload",r)),p.scope=de(function(e){return s.appendChild(e).appendChild(k.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),p.attributes=de(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=de(function(e){return e.appendChild(k.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=ee.test(k.getElementsByClassName),p.getById=de(function(e){return s.appendChild(e).id=S,!k.getElementsByName||!k.getElementsByName(S).length}),p.getById?(b.filter.ID=function(e){var t=e.replace(ae,c);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&x){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(ae,c);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&x){var n,a,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),a=0;o=r[a++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=p.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,a=[],r=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[r++];)1===n.nodeType&&a.push(n);return a},b.find.CLASS=p.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&x)return t.getElementsByClassName(e)},d=[],g=[],(p.qsa=ee.test(k.querySelectorAll))&&(de(function(e){var t;s.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+H+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+H+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||g.push("~="),(t=k.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\["+H+"*name"+H+"*="+H+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")}),de(function(e){e.innerHTML="";var t=k.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+H+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),s.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(p.matchesSelector=ee.test(y=s.matches||s.webkitMatchesSelector||s.mozMatchesSelector||s.oMatchesSelector||s.msMatchesSelector))&&de(function(e){p.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),d.push("!=",W)}),g=g.length&&new RegExp(g.join("|")),d=d.length&&new RegExp(d.join("|")),t=ee.test(s.compareDocumentPosition),v=t||ee.test(s.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,a=t&&t.parentNode;return e===a||!(!a||1!==a.nodeType||!(n.contains?n.contains(a):e.compareDocumentPosition&&16&e.compareDocumentPosition(a)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},O=t?function(e,t){if(e===t)return u=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==k||e.ownerDocument==_&&v(_,e)?-1:t==k||t.ownerDocument==_&&v(_,t)?1:l?A(l,e)-A(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var n,a=0,r=e.parentNode,o=t.parentNode,i=[e],s=[t];if(!r||!o)return e==k?-1:t==k?1:r?-1:o?1:l?A(l,e)-A(l,t):0;if(r===o)return fe(e,t);for(n=e;n=n.parentNode;)i.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;i[a]===s[a];)a++;return a?fe(i[a],s[a]):i[a]==_?-1:s[a]==_?1:0}),k},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(M(e),p.matchesSelector&&x&&!D[t+" "]&&(!d||!d.test(t))&&(!g||!g.test(t)))try{var n=y.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){D(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ae,c),e[3]=(e[3]||e[4]||e[5]||"").replace(ae,c),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return $.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&G.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ae,c).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+H+")"+e+"("+H+"|$)"))&&T(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,a,r){return function(e){var t=se.attr(e,n);return null==t?"!="===a:!a||(t+="","="===a?t===r:"!="===a?t!==r:"^="===a?r&&0===t.indexOf(r):"*="===a?r&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function L(e,n,a){return _(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==a}):n.nodeType?S.grep(e,function(e){return e===n!==a}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var a,r;if(!e)return this;if(n=n||C,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):_(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this);if(!(a="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:D.exec(e))||!a[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(a[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(a[1],t&&t.nodeType?t.ownerDocument||t:x,!0)),T.test(a[1])&&S.isPlainObject(t))for(a in t)_(this[a])?this[a](t[a]):this.attr(a,t[a]);return this}return(r=x.getElementById(a[2]))&&(this[0]=r,this.length=1),this}).prototype=S.fn,C=S(x);var O=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function Y(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;ue=x.createDocumentFragment().appendChild(x.createElement("div")),(de=x.createElement("input")).setAttribute("type","radio"),de.setAttribute("checked","checked"),de.setAttribute("name","t"),ue.appendChild(de),v.checkClone=ue.cloneNode(!0).cloneNode(!0).lastChild.checked,ue.innerHTML="",v.noCloneChecked=!!ue.cloneNode(!0).lastChild.defaultValue,ue.innerHTML="",v.option=!!ue.lastChild;var he={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function me(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&E(e,t)?S.merge([e],n):n}function ge(e,t){for(var n=0,a=e.length;n",""]);var ye=/<|&#?\w+;/;function ve(e,t,n,a,r){for(var o,i,s,l,u,d,c=t.createDocumentFragment(),f=[],p=0,h=e.length;p\s*$/g;function De(e,t){return E(e,"table")&&E(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Oe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Ne(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ye(e,t){var n,a,r,o,i,s;if(1===t.nodeType){if(G.hasData(e)&&(s=G.get(e).events))for(r in G.remove(t,"handle events"),s)for(n=0,a=s[r].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",r=function(e){a.remove(),r=null,e&&t("error"===e.type?404:200,e.type)}),x.head.appendChild(a[0])},abort:function(){r&&r()}}});var Zt,en=[],tn=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=en.pop()||S.expando+"_"+Nt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var a,r,o,i=!1!==e.jsonp&&(tn.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&tn.test(e.data)&&"data");if(i||"jsonp"===e.dataTypes[0])return a=e.jsonpCallback=_(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,i?e[i]=e[i].replace(tn,"$1"+a):!1!==e.jsonp&&(e.url+=(Yt.test(e.url)?"&":"?")+e.jsonp+"="+a),e.converters["script json"]=function(){return o||S.error(a+" was not called"),o[0]},e.dataTypes[0]="json",r=k[a],k[a]=function(){o=arguments},n.always(function(){void 0===r?S(k).removeProp(a):k[a]=r,e[a]&&(e.jsonpCallback=t.jsonpCallback,en.push(a)),o&&_(r)&&r(o[0]),o=r=void 0}),"script"}),v.createHTMLDocument=((Zt=x.implementation.createHTMLDocument("").body).innerHTML="
",2===Zt.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((a=(t=x.implementation.createHTMLDocument("")).createElement("base")).href=x.location.href,t.head.appendChild(a)):t=x),o=!n&&[],(r=T.exec(e))?[t.createElement(r[1])]:(r=ve([e],t,o),o&&o.length&&S(o).remove(),S.merge([],r.childNodes)));var a,r,o},S.fn.load=function(e,t,n){var a,r,o,i=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(a):e)}).always(n&&function(e,t){i.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var a,r,o,i,s,l,u=S.css(e,"position"),d=S(e),c={};"static"===u&&(e.style.position="relative"),s=d.offset(),o=S.css(e,"top"),l=S.css(e,"left"),r=("absolute"===u||"fixed"===u)&&-1<(o+l).indexOf("auto")?(i=(a=d.position()).top,a.left):(i=parseFloat(o)||0,parseFloat(l)||0),_(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(c.top=t.top-s.top+i),null!=t.left&&(c.left=t.left-s.left+r),"using"in t?t.using.call(e,c):("number"==typeof c.top&&(c.top+="px"),"number"==typeof c.left&&(c.left+="px"),d.css(c))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,a=this[0];return a?a.getClientRects().length?(e=a.getBoundingClientRect(),n=a.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,a=this[0],r={top:0,left:0};if("fixed"===S.css(a,"position"))t=a.getBoundingClientRect();else{for(t=this.offset(),n=a.ownerDocument,e=a.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position");)e=e.parentNode;e&&e!==a&&1===e.nodeType&&((r=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),r.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-r.top-S.css(a,"marginTop",!0),left:t.left-r.left-S.css(a,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===S.css(e,"position");)e=e.offsetParent;return e||ne})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,r){var o="pageYOffset"===r;S.fn[t]=function(e){return z(this,function(e,t,n){var a;return m(e)?a=e:9===e.nodeType&&(a=e.defaultView),void 0===n?a?a[r]:e[t]:void(a?a.scrollTo(o?a.pageXOffset:n,o?n:a.pageYOffset):e[t]=n)},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Xe(v.pixelPosition,function(e,t){if(t)return t=$e(e,n),Ue.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(i,s){S.each({padding:"inner"+i,content:s,"":"outer"+i},function(a,o){S.fn[o]=function(e,t){var n=arguments.length&&(a||"boolean"!=typeof e),r=a||(!0===e||!0===t?"margin":"border");return z(this,function(e,t,n){var a;return m(e)?0===o.indexOf("outer")?e["inner"+i]:e.document.documentElement["client"+i]:9===e.nodeType?(a=e.documentElement,Math.max(e.body["scroll"+i],a["scroll"+i],e.body["offset"+i],a["offset"+i],a["client"+i])):void 0===n?S.css(e,t,r):S.style(e,t,n,r)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,a){return this.on(t,e,n,a)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0x',"Tag"),"readonly"!==n&&"interactive"!==n||r.log.warning("Warning: [ shape="+n+" ] is deprecated at [ Tag ]"),"secondary"===a&&r.log.warning("Warning: [ type=secondary ] is deprecated at [ Tag ]"),["count","marked","value","onChange"].forEach(function(e){e in t&&r.log.warning("Warning: [ "+e+" ] is deprecated at [ Tag ]")}),("selected"in t||"defaultSelected"in t)&&r.log.warning("Warning: [ selected|defaultSelected ] is deprecated at [ Tag ], use [ checked|defaultChecked ] at [ Tag.Selectable ] instead of it"),"closed"in t&&r.log.warning("Warning: [ closed ] is deprecated at [ Tag ], use [ onClose ] at [ Tag.Closeable ] instead of it"),"onSelect"in t&&e("onSelect","","Tag"),"afterClose"in t&&r.log.warning("Warning: [ afterClose ] is deprecated at [ Tag ], use [ afterClose ] at [ Tag.Closeable ] instead of it"),t}});d.Group=a.default.config(i.default),d.Selectable=a.default.config(s.default),d.Closable=a.default.config(l.default),d.Closeable=d.Closable,t.default=d,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var a=o(n(684)),r=o(n(386));function o(e){return e&&e.__esModule?e:{default:e}}a.default.Panel=r.default,t.default=a.default,e.exports=t.default},function(e,t,n){var a=n(85);e.exports=function(e){if(!a(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){"use strict";n(40),n(65),n(501)},function(e,t,n){var i=n(333);function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}e.exports=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==i(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var n,a={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e){Object.prototype.hasOwnProperty.call(e,o)&&((n=r?Object.getOwnPropertyDescriptor(e,o):null)&&(n.get||n.set)?Object.defineProperty(a,o,n):a[o]=e[o])}return a.default=e,t&&t.set(e,a),a}},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var a,r,S=f(n(4)),o=f(n(3)),i=f(n(5)),s=f(n(6)),l=n(0),E=f(l),u=n(24),d=f(n(2)),T=f(n(12)),c=n(11);function f(e){return e&&e.__esModule?e:{default:e}}var p,h=c.func.bindCtx,L=c.obj.pickOthers,m=(p=l.Component,(0,s.default)(C,p),C.prototype.componentDidMount=function(){this.itemNode=(0,u.findDOMNode)(this);var e,t,n,a,r=this.props,o=r.parentMode,i=r.root,s=r.menu;s?this.menuNode=(0,u.findDOMNode)(s):"popup"===o?this.menuNode=this.itemNode.parentNode:(this.menuNode=(0,u.findDOMNode)(i),t=(e=i.props).prefix,n=e.header,a=e.footer,(n||a)&&(this.menuNode=this.menuNode.querySelector("."+t+"menu-content"))),this.setFocus()},C.prototype.componentDidUpdate=function(){this.setFocus()},C.prototype.focusable=function(){var e=this.props,t=e.root,n=e.type,a=e.disabled,r=t.props.focusable;return r&&("submenu"===n||!a)},C.prototype.getFocused=function(){var e=this.props,t=e._key;return e.root.state.focusedKey===t},C.prototype.setFocus=function(){var e;this.getFocused()&&(this.focusable()&&this.itemNode.focus({preventScroll:!0}),this.menuNode&&this.menuNode.scrollHeight>this.menuNode.clientHeight&&(this.menuNode.clientHeight+this.menuNode.scrollTop<(e=this.itemNode.offsetTop+this.itemNode.offsetHeight)?this.menuNode.scrollTop=e-this.menuNode.clientHeight:this.itemNode.offsetTop"===(d=e.charAt(o+1))){r+="(",o++,0[0-9][0-9][0-9][0-9])-(?[0-9][0-9]?)-(?[0-9][0-9]?)(?:(?:[Tt]|[ \t]+)(?[0-9][0-9]?):(?[0-9][0-9]):(?[0-9][0-9])(?:.(?[0-9]*))?(?:[ \t]*(?Z|(?[-+])(?[0-9][0-9]?)(?::(?[0-9][0-9]))?))?)?$","i"),r.LOCAL_TIMEZONE_OFFSET=60*(new Date).getTimezoneOffset()*1e3,r.trim=function(e,t){var n,a;return null==t&&(t="\\s"),null==(n=this.REGEX_LEFT_TRIM_BY_CHAR[t])&&(this.REGEX_LEFT_TRIM_BY_CHAR[t]=n=new RegExp("^"+t+t+"*")),n.lastIndex=0,null==(a=this.REGEX_RIGHT_TRIM_BY_CHAR[t])&&(this.REGEX_RIGHT_TRIM_BY_CHAR[t]=a=new RegExp(t+""+t+"*$")),a.lastIndex=0,e.replace(n,"").replace(a,"")},r.ltrim=function(e,t){var n;return null==t&&(t="\\s"),null==(n=this.REGEX_LEFT_TRIM_BY_CHAR[t])&&(this.REGEX_LEFT_TRIM_BY_CHAR[t]=n=new RegExp("^"+t+t+"*")),n.lastIndex=0,e.replace(n,"")},r.rtrim=function(e,t){var n;return null==t&&(t="\\s"),null==(n=this.REGEX_RIGHT_TRIM_BY_CHAR[t])&&(this.REGEX_RIGHT_TRIM_BY_CHAR[t]=n=new RegExp(t+""+t+"*$")),n.lastIndex=0,e.replace(n,"")},r.isEmpty=function(e){return!e||""===e||"0"===e||e instanceof Array&&0===e.length||this.isEmptyObject(e)},r.isEmptyObject=function(t){var n;return t instanceof Object&&0===function(){var e=[];for(n in t)a.call(t,n)&&e.push(n);return e}().length},r.subStrCount=function(e,t,n,a){var r,o,i,s,l,u=0;for(e=""+e,t=""+t,null!=n&&(e=e.slice(n)),null!=a&&(e=e.slice(0,a)),i=e.length,l=t.length,r=o=0,s=i;0<=s?o>6)+t(128|63&e):e<65536?t(224|e>>12)+t(128|e>>6&63)+t(128|63&e):t(240|e>>18)+t(128|e>>12&63)+t(128|e>>6&63)+t(128|63&e)},r.parseBoolean=function(e,t){var n;return null==t&&(t=!0),"string"==typeof e?(n=e.toLowerCase(),!(!t&&"no"===n)&&"0"!==n&&"false"!==n&&""!==n):!!e},r.isNumeric=function(e){return this.REGEX_SPACES.lastIndex=0,"number"==typeof e||"string"==typeof e&&!isNaN(e)&&""!==e.replace(this.REGEX_SPACES,"")},r.stringToDate=function(e){var t,n,a,r,o,i,s,l,u,d;if(null==e||!e.length)return null;if(!(o=this.PATTERN_DATE.exec(e)))return null;if(d=parseInt(o.year,10),s=parseInt(o.month,10)-1,n=parseInt(o.day,10),null==o.hour)return t=new Date(Date.UTC(d,s,n));if(r=parseInt(o.hour,10),i=parseInt(o.minute,10),l=parseInt(o.second,10),null!=o.fraction){for(a=o.fraction.slice(0,3);a.length<3;)a+="0";a=parseInt(a,10)}else a=0;return null!=o.tz&&(u=6e4*(60*parseInt(o.tz_hour,10)+(null!=o.tz_minute?parseInt(o.tz_minute,10):0)),"-"===o.tz_sign&&(u*=-1)),t=new Date(Date.UTC(d,s,n,r,i,l,a)),u&&t.setTime(t.getTime()-u),t},r.strRepeat=function(e,t){for(var n="",a=0;ae.length)&&(t=e.length);for(var n=0,a=new Array(t);ndocument.F=Object<\/script>"),e.close(),d=e.F;n--;)delete d[u][s[n]];return d()};e.exports=Object.create||function(e,t){var n;return null!==e?(r[u]=o(e),n=new r,r[u]=null,n[l]=e):n=d(),void 0===t?n:i(n,t)}},function(e,t,n){var a=n(76).f,r=n(77),o=n(87)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&a(e,o,{configurable:!0,value:t})}},function(e,t,n){t.f=n(87)},function(e,t,n){var a=n(71),r=n(72),o=n(113),i=n(146),s=n(76).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=!o&&a.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:i.f(e)})}},function(e,t,n){"use strict";n(75),n(503)},function(e,t,n){},function(e,t,n){e.exports=n(514)},function(e,t){function l(e,t,n,a,r,o,i){try{var s=e[o](i),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(a,r)}e.exports=function(s){return function(){var e=this,i=arguments;return new Promise(function(t,n){var a=s.apply(e,i);function r(e){l(a,t,n,r,o,"next",e)}function o(e){l(a,t,n,r,o,"throw",e)}r(void 0)})}}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(s,e,l){"use strict";(function(e){var n=l(56),a=l(549),t={"Content-Type":"application/x-www-form-urlencoded"};function r(e,t){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var o,i={adapter:("undefined"==typeof XMLHttpRequest&&void 0===e||(o=l(346)),o),transformRequest:[function(e,t){return a(t,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e)?e:n.isArrayBufferView(e)?e.buffer:n.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):n.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return 200<=e&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],function(e){i.headers[e]={}}),n.forEach(["post","put","patch"],function(e){i.headers[e]=n.merge(t)}),s.exports=i}).call(this,l(337))},function(e,t,n){"use strict";function s(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},a=0;a>6]+u[128|63&i]:i<55296||57344<=i?r+=u[224|i>>12]+u[128|i>>6&63]+u[128|63&i]:(o+=1,i=65536+((1023&i)<<10|1023&a.charCodeAt(o)),r+=u[240|i>>18]+u[128|i>>12&63]+u[128|i>>6&63]+u[128|63&i])}return r},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(d(e)){for(var n=[],a=0;aa.length&&a.every(function(e,t){return e===n[t]})},t.isAvailablePos=function(e,t,n){var a=n[t],r=a.type,o=a.disabled;return i(e,t)&&("item"===r&&!o||"submenu"===r)});t.getFirstAvaliablelChildKey=function(t,n){var e=Object.keys(n).find(function(e){return a(t+"-0",e,n)});return e?n[e].key:null},t.getChildSelected=function(e){var t=e.selectMode,n=e.selectedKeys,a=e._k2n,r=e._key;if(!a)return!1;var o=a[r].pos+"-";return!!t&&n.some(function(e){return a[e]&&0===a[e].pos.indexOf(o)})}},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var a,r,o=d(n(3)),i=d(n(5)),s=d(n(6)),l=d(n(0)),u=d(n(2));function d(e){return e&&e.__esModule?e:{default:e}}var c,f=(c=l.default.Component,(0,s.default)(p,c),p.prototype.render=function(){return null},r=a=p,a.propTypes={dataIndex:u.default.string,cell:u.default.oneOfType([u.default.element,u.default.node,u.default.func]),title:u.default.oneOfType([u.default.element,u.default.node,u.default.func]),htmlTitle:u.default.string,sortable:u.default.bool,width:u.default.oneOfType([u.default.number,u.default.string]),align:u.default.oneOf(["left","center","right"]),alignHeader:u.default.oneOf(["left","center","right"]),filters:u.default.arrayOf(u.default.shape({label:u.default.string,value:u.default.oneOfType([u.default.node,u.default.string])})),filterMode:u.default.oneOf(["single","multiple"]),filterMenuProps:u.default.object,filterProps:u.default.object,lock:u.default.oneOfType([u.default.bool,u.default.string]),resizable:u.default.bool,colSpan:u.default.number},a.contextTypes={parent:u.default.any},a.defaultProps={cell:function(e){return e},filterMode:"multiple",filterMenuProps:{subMenuSelectable:!1},filterProps:{},resizable:!1},a._typeMark="column",r);function p(){return(0,o.default)(this,p),(0,i.default)(this,c.apply(this,arguments))}f.displayName="Column",t.default=f,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var a=l(n(3)),r=l(n(5)),o=l(n(6)),i=l(n(0)),s=l(n(2));function l(e){return e&&e.__esModule?e:{default:e}}var u,d=(u=i.default.Component,(0,o.default)(c,u),c.prototype.render=function(){var e=this.props,t=e.children,n=e.wrapperContent,a=e.prefix;return i.default.createElement("div",{className:a+"table-inner"},t,n)},c.propTypes={children:s.default.any,prefix:s.default.string,colGroup:s.default.any,wrapperContent:s.default.any},c);function c(){return(0,a.default)(this,c),(0,r.default)(this,u.apply(this,arguments))}d.displayName="FixedWrapper",t.default=d,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var a,r,k=h(n(18)),x=h(n(4)),o=h(n(3)),s=h(n(5)),i=h(n(6)),l=n(0),S=h(l),u=h(n(2)),E=h(n(12)),d=h(n(116)),c=h(n(23)),T=n(11),f=h(n(42)),p=h(n(7));function h(e){return e&&e.__esModule?e:{default:e}}var m,g=T.func.noop,y=T.func.bindCtx,v=/blue|green|orange|red|turquoise|yellow/,_=(m=l.Component,(0,i.default)(L,m),L.prototype.componentWillUnmount=function(){this.__destroyed=!0},L.prototype.handleClose=function(e){var t=this,n=this.props,a=n.animation,r=n.onClose,o=T.support.animation&&a;!1===r(e,this.tagNode)||this.__destroyed||this.setState({visible:!1},function(){o||t.props.afterClose(t.tagNode)})},L.prototype.handleBodyClick=function(e){var t=this.props,n=t.closable,a=t.closeArea,r=t.onClick;if(n&&"tag"===a&&this.handleClose("tag"),"function"==typeof r)return r(e)},L.prototype.handleTailClick=function(e){e&&e.preventDefault(),e&&e.stopPropagation(),this.handleClose("tail")},L.prototype.handleAnimationInit=function(e){this.props.afterAppear(e)},L.prototype.handleAnimationEnd=function(e){this.props.afterClose(e)},L.prototype.renderAnimatedTag=function(e,t){return S.default.createElement(d.default,{animation:t,afterAppear:this.handleAnimationInit,afterLeave:this.handleAnimationEnd},e)},L.prototype.renderTailNode=function(){var e=this.props,t=e.prefix,n=e.closable,a=e.locale;return n?S.default.createElement("span",{className:t+"tag-close-btn",onClick:this.handleTailClick,role:"button","aria-label":a.delete},S.default.createElement(c.default,{type:"close"})):null},L.prototype.isPresetColor=function(){var e=this.props.color;return!!e&&v.test(e)},L.prototype.getTagStyle=function(){var e=this.props,t=e.color,n=void 0===t?"":t,a=e.style,r=this.isPresetColor(),o={backgroundColor:n,borderColor:n,color:"#fff"};return(0,x.default)({},n&&!r?o:null,a)},L.prototype.render=function(){var e,t=this,n=this.props,a=n.prefix,r=n.type,o=n.size,i=n.color,s=n._shape,l=n.closable,u=n.closeArea,d=n.className,c=n.children,f=n.animation,p=n.disabled,h=n.rtl,m=this.state.visible,g=this.isPresetColor(),y=T.obj.pickOthers(L.propTypes,this.props),v=(y.style,(0,k.default)(y,["style"])),_=l?"closable":s,b=(0,E.default)([a+"tag",a+"tag-"+_,a+"tag-"+o],((e={})[a+"tag-level-"+r]=!i,e[a+"tag-closable"]=l,e[a+"tag-body-pointer"]=l&&"tag"===u,e[a+"tag-"+i]=i&&g&&"primary"===r,e[a+"tag-"+i+"-inverse"]=i&&g&&"normal"===r,e),d),w=this.renderTailNode(),M=m?S.default.createElement("div",(0,x.default)({className:b,onClick:this.handleBodyClick,onKeyDown:this.onKeyDown,tabIndex:p?"":"0",role:"button","aria-disabled":p,disabled:p,dir:h?"rtl":void 0,ref:function(e){return t.tagNode=e},style:this.getTagStyle()},v),S.default.createElement("span",{className:a+"tag-body"},c),w):null;return f&&T.support.animation?this.renderAnimatedTag(M,a+"tag-zoom"):M},r=a=L,a.propTypes={prefix:u.default.string,type:u.default.oneOf(["normal","primary"]),size:u.default.oneOf(["small","medium","large"]),color:u.default.string,animation:u.default.bool,closeArea:u.default.oneOf(["tag","tail"]),closable:u.default.bool,onClose:u.default.func,afterClose:u.default.func,afterAppear:u.default.func,className:u.default.any,children:u.default.node,onClick:u.default.func,_shape:u.default.oneOf(["default","closable","checkable"]),disabled:u.default.bool,rtl:u.default.bool,locale:u.default.object},a.defaultProps={prefix:"next-",type:"normal",size:"medium",closeArea:"tail",animation:!1,onClose:g,afterClose:g,afterAppear:g,onClick:g,_shape:"default",disabled:!1,rtl:!1,locale:f.default.Tag},r);function L(e){(0,o.default)(this,L);var i=(0,s.default)(this,m.call(this,e));return i.onKeyDown=function(e){var t=i.props,n=t.closable,a=t.closeArea,r=t.onClick,o=t.disabled;e.keyCode!==T.KEYCODE.SPACE||o||(e.preventDefault(),e.stopPropagation(),n?i.handleClose(a):"function"==typeof r&&r(e))},i.state={visible:!0},y(i,["handleBodyClick","handleTailClick","handleAnimationInit","handleAnimationEnd","renderTailNode"]),i}_.displayName="Tag",t.default=p.default.config(_),e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var f=r(n(18)),p=r(n(49)),h=r(n(4));t.isSingle=function(e){return!e||"single"===e},t.isNull=m,t.escapeForReg=o,t.filter=function(e,t){var n=o(""+e),a=new RegExp("("+n+")","ig");return a.test(""+t.value)||a.test(""+t.label)},t.loopMap=i,t.parseDataSourceFromChildren=function l(e){var u=1=p,C=(0,R.default)(((t={})[i+"upload-inner"]=!0,t[i+"hidden"]=L,t)),D=this.props.children;if("card"===l&&(a=(0,R.default)(((n={})[i+"upload-card"]=!0,n[i+"disabled"]=f,n)),D=A.default.createElement("div",{className:a},A.default.createElement(F.default,{size:"large",type:"add",className:i+"upload-add-icon"}),A.default.createElement("div",{tabIndex:"0",role:"button",className:i+"upload-text"},D))),x){if("function"!=typeof S)return o?A.default.createElement(W.default,{isPreview:!0,listType:o,style:d,className:u,value:this.state.value}):null;var O,N=(0,R.default)(((O={})[i+"form-preview"]=!0,O[u]=!!u,O));return A.default.createElement("div",{style:d,className:N},S(this.state.value,this.props))}var Y=f?H.func.prevent:y,P=H.obj.pickAttrsWith(this.props,"data-");return A.default.createElement("div",(0,j.default)({className:T,style:d},P),A.default.createElement(z.default,(0,j.default)({},E,{beforeUpload:m,dragable:s,disabled:f||L,className:C,onSelect:this.onSelect,onDrop:this.onDrop,onProgress:this.onProgress,onSuccess:this.onSuccess,onError:this.onError,ref:this.saveUploaderRef}),D),o||b?A.default.createElement(W.default,{useDataURL:c,uploader:this,listType:o,value:this.state.value,closable:h,onRemove:Y,progressProps:M,onCancel:v,onPreview:_,extraRender:w,rtl:k}):null)},r=a=v,a.displayName="Upload",a.propTypes=(0,j.default)({},f.default.propTypes,W.default.propTypes,{prefix:u.default.string.isRequired,action:u.default.string,value:u.default.array,defaultValue:u.default.array,shape:u.default.oneOf(["card"]),listType:u.default.oneOf(["text","image","card"]),list:u.default.any,name:u.default.string,data:u.default.oneOfType([u.default.object,u.default.func]),formatter:u.default.func,limit:u.default.number,timeout:u.default.number,dragable:u.default.bool,closable:u.default.bool,useDataURL:u.default.bool,disabled:u.default.bool,onSelect:u.default.func,onProgress:u.default.func,onChange:u.default.func,onSuccess:u.default.func,afterSelect:u.default.func,onRemove:u.default.func,onError:u.default.func,beforeUpload:u.default.func,onDrop:u.default.func,className:u.default.string,style:u.default.object,children:u.default.node,autoUpload:u.default.bool,request:u.default.func,progressProps:u.default.object,rtl:u.default.bool,isPreview:u.default.bool,renderPreview:u.default.func}),a.defaultProps=(0,j.default)({},f.default.defaultProps,{prefix:"next-",limit:1/0,autoUpload:!0,closable:!0,onSelect:g,onProgress:g,onChange:g,onSuccess:g,onRemove:g,onError:g,onDrop:g,beforeUpload:g,afterSelect:g}),o=function(){var f=this;this.onSelect=function(e){var t,n,a,r,o=f.props,i=o.autoUpload,s=o.afterSelect,l=o.onSelect,u=o.limit,d=f.state.value.length+e.length,c=u-f.state.value.length;c<=0||(n=t=e.map(function(e){var t=(0,p.fileToObject)(e);return t.state="selected",t}),a=[],u>10|55296,1023&a|56320)}function r(){M()}var e,p,b,o,i,h,f,m,w,l,u,M,k,s,S,g,d,y,v,x="sizzle"+ +new Date,_=n.document,E=0,a=0,T=le(),C=le(),L=le(),D=le(),O=function(e,t){return e===t&&(u=!0),0},N={}.hasOwnProperty,t=[],P=t.pop,j=t.push,Y=t.push,I=t.slice,A=function(e,t){for(var n=0,a=e.length;n+~]|"+H+")"+H+"*"),q=new RegExp(H+"|>"),G=new RegExp(W),J=new RegExp("^"+F+"$"),$={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),TAG:new RegExp("^("+F+"|[*])"),ATTR:new RegExp("^"+z),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+H+"*(even|odd|(([+-]|)(\\d*)n|)"+H+"*(?:([+-]|)"+H+"*(\\d+)|))"+H+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+H+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+H+"*((?:-\\d)?\\d*)"+H+"*\\)|)(?=[^-]|$)","i")},X=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,ee=/^[^{]+\{\s*\[native \w/,te=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ne=/[+~]/,ae=new RegExp("\\\\([\\da-f]{1,6}"+H+"?|("+H+")|.)","ig"),re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,oe=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{Y.apply(t=I.call(_.childNodes),_.childNodes),t[_.childNodes.length].nodeType}catch(e){Y={apply:t.length?function(e,t){j.apply(e,I.call(t))}:function(e,t){for(var n=e.length,a=0;e[n++]=t[a++];);e.length=n-1}}}function se(t,e,n,a){var r,o,i,s,l,u,d,c=e&&e.ownerDocument,f=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==f&&9!==f&&11!==f)return n;if(!a&&((e?e.ownerDocument||e:_)!==k&&M(e),e=e||k,S)){if(11!==f&&(l=te.exec(t)))if(r=l[1]){if(9===f){if(!(i=e.getElementById(r)))return n;if(i.id===r)return n.push(i),n}else if(c&&(i=c.getElementById(r))&&v(e,i)&&i.id===r)return n.push(i),n}else{if(l[2])return Y.apply(n,e.getElementsByTagName(t)),n;if((r=l[3])&&p.getElementsByClassName&&e.getElementsByClassName)return Y.apply(n,e.getElementsByClassName(r)),n}if(p.qsa&&!D[t+" "]&&(!g||!g.test(t))&&(1!==f||"object"!==e.nodeName.toLowerCase())){if(d=t,c=e,1===f&&q.test(t)){for((s=e.getAttribute("id"))?s=s.replace(re,oe):e.setAttribute("id",s=x),o=(u=h(t)).length;o--;)u[o]="#"+s+" "+_e(u[o]);d=u.join(","),c=ne.test(t)&&ye(e.parentNode)||e}try{return Y.apply(n,c.querySelectorAll(d)),n}catch(e){D(t,!0)}finally{s===x&&e.removeAttribute("id")}}}return m(t.replace(V,"$1"),e,n,a)}function le(){var a=[];return function e(t,n){return a.push(t+" ")>b.cacheLength&&delete e[a.shift()],e[t+" "]=n}}function ue(e){return e[x]=!0,e}function de(e){var t=k.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ce(e,t){for(var n=e.split("|"),a=n.length;a--;)b.attrHandle[n[a]]=t}function fe(e,t){var n=t&&e,a=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(a)return a;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ie(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ge(i){return ue(function(o){return o=+o,ue(function(e,t){for(var n,a=i([],e.length,o),r=a.length;r--;)e[n=a[r]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!X.test(t||n&&n.nodeName||"HTML")},M=se.setDocument=function(e){var t,n,a=e?e.ownerDocument||e:_;return a!==k&&9===a.nodeType&&a.documentElement&&(s=(k=a).documentElement,S=!i(k),_!==k&&(n=k.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",r,!1):n.attachEvent&&n.attachEvent("onunload",r)),p.attributes=de(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=de(function(e){return e.appendChild(k.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=ee.test(k.getElementsByClassName),p.getById=de(function(e){return s.appendChild(e).id=x,!k.getElementsByName||!k.getElementsByName(x).length}),p.getById?(b.filter.ID=function(e){var t=e.replace(ae,c);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(ae,c);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&S){var n,a,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),a=0;o=r[a++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=p.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,a=[],r=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[r++];)1===n.nodeType&&a.push(n);return a},b.find.CLASS=p.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&S)return t.getElementsByClassName(e)},d=[],g=[],(p.qsa=ee.test(k.querySelectorAll))&&(de(function(e){s.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+H+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+H+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+x+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+x+"+*").length||g.push(".#.+[+~]")}),de(function(e){e.innerHTML="";var t=k.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+H+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),s.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(p.matchesSelector=ee.test(y=s.matches||s.webkitMatchesSelector||s.mozMatchesSelector||s.oMatchesSelector||s.msMatchesSelector))&&de(function(e){p.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),d.push("!=",W)}),g=g.length&&new RegExp(g.join("|")),d=d.length&&new RegExp(d.join("|")),t=ee.test(s.compareDocumentPosition),v=t||ee.test(s.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,a=t&&t.parentNode;return e===a||!(!a||1!==a.nodeType||!(n.contains?n.contains(a):e.compareDocumentPosition&&16&e.compareDocumentPosition(a)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},O=t?function(e,t){if(e===t)return u=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e===k||e.ownerDocument===_&&v(_,e)?-1:t===k||t.ownerDocument===_&&v(_,t)?1:l?A(l,e)-A(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var n,a=0,r=e.parentNode,o=t.parentNode,i=[e],s=[t];if(!r||!o)return e===k?-1:t===k?1:r?-1:o?1:l?A(l,e)-A(l,t):0;if(r===o)return fe(e,t);for(n=e;n=n.parentNode;)i.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;i[a]===s[a];)a++;return a?fe(i[a],s[a]):i[a]===_?-1:s[a]===_?1:0}),k},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==k&&M(e),p.matchesSelector&&S&&!D[t+" "]&&(!d||!d.test(t))&&(!g||!g.test(t)))try{var n=y.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){D(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ae,c),e[3]=(e[3]||e[4]||e[5]||"").replace(ae,c),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return $.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&G.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ae,c).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+H+")"+e+"("+H+"|$)"))&&T(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,a,r){return function(e){var t=se.attr(e,n);return null==t?"!="===a:!a||(t+="","="===a?t===r:"!="===a?t!==r:"^="===a?r&&0===t.indexOf(r):"*="===a?r&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function L(e,n,a){return _(n)?x.grep(e,function(e,t){return!!n.call(e,t,e)!==a}):n.nodeType?x.grep(e,function(e){return e===n!==a}):"string"!=typeof n?x.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(x.fn.init=function(e,t,n){var a,r;if(!e)return this;if(n=n||D,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):_(e)?void 0!==n.ready?n.ready(e):e(x):x.makeArray(e,this);if(!(a="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:O.exec(e))||!a[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(a[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(a[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),C.test(a[1])&&x.isPlainObject(t))for(a in t)_(this[a])?this[a](t[a]):this.attr(a,t[a]);return this}return(r=S.getElementById(a[2]))&&(this[0]=r,this.length=1),this}).prototype=x.fn,D=x(S);var N=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};function j(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}x.fn.extend({has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i,he={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function me(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&T(e,t)?x.merge([e],n):n}function ge(e,t){for(var n=0,a=e.length;nx",v.noCloneChecked=!!ye.cloneNode(!0).lastChild.defaultValue;var we=/^key/,Me=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ke=/^([^.]*)(?:\.(.+)|)/;function Se(){return!0}function xe(){return!1}function Ee(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Te(e,t,n,a,r,o){var i,s;if("object"==typeof t){for(s in"string"!=typeof n&&(a=a||n,n=void 0),t)Te(e,s,n,a,t[s],o);return e}if(null==a&&null==r?(r=n,a=n=void 0):null==r&&("string"==typeof n?(r=a,a=void 0):(r=a,a=n,n=void 0)),!1===r)r=xe;else if(!r)return e;return 1===o&&(i=r,(r=function(e){return x().off(e),i.apply(this,arguments)}).guid=i.guid||(i.guid=x.guid++)),e.each(function(){x.event.add(this,t,r,a,n)})}function Ce(e,r,o){o?(J.set(e,r,!1),x.event.add(e,r,{namespace:!1,handler:function(e){var t,n,a=J.get(this,r);if(1&e.isTrigger&&this[r]){if(a.length)(x.event.special[r]||{}).delegateType&&e.stopPropagation();else if(a=s.call(arguments),J.set(this,r,a),t=o(this,r),this[r](),a!==(n=J.get(this,r))||t?J.set(this,r,!1):n={},a!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else a.length&&(J.set(this,r,{value:x.event.trigger(x.extend(a[0],x.Event.prototype),a.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===J.get(e,r)&&x.event.add(e,r,Se)}x.event={global:{},add:function(t,e,n,a,r){var o,i,s,l,u,d,c,f,p,h,m,g=J.get(t);if(g)for(n.handler&&(n=(o=n).handler,r=o.selector),r&&x.find.matchesSelector(ae,r),n.guid||(n.guid=x.guid++),(l=g.events)||(l=g.events={}),(i=g.handle)||(i=g.handle=function(e){return void 0!==x&&x.event.triggered!==e.type?x.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(Y)||[""]).length;u--;)p=m=(s=ke.exec(e[u])||[])[1],h=(s[2]||"").split(".").sort(),p&&(c=x.event.special[p]||{},p=(r?c.delegateType:c.bindType)||p,c=x.event.special[p]||{},d=x.extend({type:p,origType:m,data:a,handler:n,guid:n.guid,selector:r,needsContext:r&&x.expr.match.needsContext.test(r),namespace:h.join(".")},o),(f=l[p])||((f=l[p]=[]).delegateCount=0,c.setup&&!1!==c.setup.call(t,a,h,i)||t.addEventListener&&t.addEventListener(p,i)),c.add&&(c.add.call(t,d),d.handler.guid||(d.handler.guid=n.guid)),r?f.splice(f.delegateCount++,0,d):f.push(d),x.event.global[p]=!0)},remove:function(e,t,n,a,r){var o,i,s,l,u,d,c,f,p,h,m,g=J.hasData(e)&&J.get(e);if(g&&(l=g.events)){for(u=(t=(t||"").match(Y)||[""]).length;u--;)if(p=m=(s=ke.exec(t[u])||[])[1],h=(s[2]||"").split(".").sort(),p){for(c=x.event.special[p]||{},f=l[p=(a?c.delegateType:c.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=o=f.length;o--;)d=f[o],!r&&m!==d.origType||n&&n.guid!==d.guid||s&&!s.test(d.namespace)||a&&a!==d.selector&&("**"!==a||!d.selector)||(f.splice(o,1),d.selector&&f.delegateCount--,c.remove&&c.remove.call(e,d));i&&!f.length&&(c.teardown&&!1!==c.teardown.call(e,h,g.handle)||x.removeEvent(e,p,g.handle),delete l[p])}else for(p in l)x.event.remove(e,p+t[u],n,a,!0);x.isEmptyObject(l)&&J.remove(e,"handle events")}},dispatch:function(e){var t,n,a,r,o,i,s=x.event.fix(e),l=new Array(arguments.length),u=(J.get(this,"events")||{})[s.type]||[],d=x.event.special[s.type]||{};for(l[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,De=/\s*$/g;function Pe(e,t){return T(e,"table")&&T(11!==t.nodeType?t:t.firstChild,"tr")&&x(e).children("tbody")[0]||e}function je(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Ye(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ie(e,t){var n,a,r,o,i,s,l,u;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),i=J.set(t,o),u=o.events))for(r in delete i.handle,i.events={},u)for(n=0,a=u[r].length;n")},clone:function(e,t,n){var a,r,o,i,s,l,u,d=e.cloneNode(!0),c=re(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(i=me(d),a=0,r=(o=me(e)).length;a").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",r=function(e){a.remove(),r=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(a[0])},abort:function(){r&&r()}}});var tn,nn=[],an=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=nn.pop()||x.expando+"_"+Pt++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(e,t,n){var a,r,o,i=!1!==e.jsonp&&(an.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&an.test(e.data)&&"data");if(i||"jsonp"===e.dataTypes[0])return a=e.jsonpCallback=_(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,i?e[i]=e[i].replace(an,"$1"+a):!1!==e.jsonp&&(e.url+=(jt.test(e.url)?"&":"?")+e.jsonp+"="+a),e.converters["script json"]=function(){return o||x.error(a+" was not called"),o[0]},e.dataTypes[0]="json",r=k[a],k[a]=function(){o=arguments},n.always(function(){void 0===r?x(k).removeProp(a):k[a]=r,e[a]&&(e.jsonpCallback=t.jsonpCallback,nn.push(a)),o&&_(r)&&r(o[0]),o=r=void 0}),"script"}),v.createHTMLDocument=((tn=S.implementation.createHTMLDocument("").body).innerHTML="
",2===tn.childNodes.length),x.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((a=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(a)):t=S),o=!n&&[],(r=C.exec(e))?[t.createElement(r[1])]:(r=be([e],t,o),o&&o.length&&x(o).remove(),x.merge([],r.childNodes)));var a,r,o},x.fn.load=function(e,t,n){var a,r,o,i=this,s=e.indexOf(" ");return-1").append(x.parseHTML(e)).find(a):e)}).always(n&&function(e,t){i.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.expr.pseudos.animated=function(t){return x.grep(x.timers,function(e){return t===e.elem}).length},x.offset={setOffset:function(e,t,n){var a,r,o,i,s,l,u=x.css(e,"position"),d=x(e),c={};"static"===u&&(e.style.position="relative"),s=d.offset(),o=x.css(e,"top"),l=x.css(e,"left"),r=("absolute"===u||"fixed"===u)&&-1<(o+l).indexOf("auto")?(i=(a=d.position()).top,a.left):(i=parseFloat(o)||0,parseFloat(l)||0),_(t)&&(t=t.call(e,n,x.extend({},s))),null!=t.top&&(c.top=t.top-s.top+i),null!=t.left&&(c.left=t.left-s.left+r),"using"in t?t.using.call(e,c):d.css(c)}},x.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){x.offset.setOffset(this,t,e)});var e,n,a=this[0];return a?a.getClientRects().length?(e=a.getBoundingClientRect(),n=a.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,a=this[0],r={top:0,left:0};if("fixed"===x.css(a,"position"))t=a.getBoundingClientRect();else{for(t=this.offset(),n=a.ownerDocument,e=a.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===x.css(e,"position");)e=e.parentNode;e&&e!==a&&1===e.nodeType&&((r=x(e).offset()).top+=x.css(e,"borderTopWidth",!0),r.left+=x.css(e,"borderLeftWidth",!0))}return{top:t.top-r.top-x.css(a,"marginTop",!0),left:t.left-r.left-x.css(a,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===x.css(e,"position");)e=e.offsetParent;return e||ae})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,r){var o="pageYOffset"===r;x.fn[t]=function(e){return W(this,function(e,t,n){var a;if(m(e)?a=e:9===e.nodeType&&(a=e.defaultView),void 0===n)return a?a[r]:e[t];a?a.scrollTo(o?a.pageXOffset:n,o?n:a.pageYOffset):e[t]=n},t,e,arguments.length)}}),x.each(["top","left"],function(e,n){x.cssHooks[n]=Qe(v.pixelPosition,function(e,t){if(t)return t=Xe(e,n),Ke.test(t)?x(e).position()[n]+"px":t})}),x.each({Height:"height",Width:"width"},function(i,s){x.each({padding:"inner"+i,content:s,"":"outer"+i},function(a,o){x.fn[o]=function(e,t){var n=arguments.length&&(a||"boolean"!=typeof e),r=a||(!0===e||!0===t?"margin":"border");return W(this,function(e,t,n){var a;return m(e)?0===o.indexOf("outer")?e["inner"+i]:e.document.documentElement["client"+i]:9===e.nodeType?(a=e.documentElement,Math.max(e.body["scroll"+i],a["scroll"+i],e.body["offset"+i],a["offset"+i],a["client"+i])):void 0===n?x.css(e,t,r):x.style(e,t,n,r)},s,n?e:void 0,n)}})}),x.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){x.fn[n]=function(e,t){return 0x',"Tag"),"readonly"!==n&&"interactive"!==n||r.log.warning("Warning: [ shape="+n+" ] is deprecated at [ Tag ]"),"secondary"===a&&r.log.warning("Warning: [ type=secondary ] is deprecated at [ Tag ]"),["count","marked","value","onChange"].forEach(function(e){e in t&&r.log.warning("Warning: [ "+e+" ] is deprecated at [ Tag ]")}),("selected"in t||"defaultSelected"in t)&&r.log.warning("Warning: [ selected|defaultSelected ] is deprecated at [ Tag ], use [ checked|defaultChecked ] at [ Tag.Selectable ] instead of it"),"closed"in t&&r.log.warning("Warning: [ closed ] is deprecated at [ Tag ], use [ onClose ] at [ Tag.Closeable ] instead of it"),"onSelect"in t&&e("onSelect","","Tag"),"afterClose"in t&&r.log.warning("Warning: [ afterClose ] is deprecated at [ Tag ], use [ afterClose ] at [ Tag.Closeable ] instead of it"),t}});d.Group=a.default.config(i.default),d.Selectable=a.default.config(s.default),d.Closable=a.default.config(l.default),d.Closeable=d.Closable,t.default=d,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var a=o(n(663)),r=o(n(378));function o(e){return e&&e.__esModule?e:{default:e}}a.default.Panel=r.default,t.default=a.default,e.exports=t.default},function(e,t,n){var m=n(70),g=n(73),y=n(166),v=n(80),_=n(75),b="prototype",w=function(e,t,n){var a,r,o,i=e&w.F,s=e&w.G,l=e&w.S,u=e&w.P,d=e&w.B,c=e&w.W,f=s?g:g[t]||(g[t]={}),p=f[b],h=s?m:l?m[t]:(m[t]||{})[b];for(a in s&&(n=t),n)(r=!i&&h&&void 0!==h[a])&&_(f,a)||(o=r?h[a]:n[a],f[a]=s&&"function"!=typeof h[a]?n[a]:d&&r?y(o,m):c&&h[a]==o?function(a){function e(e,t,n){if(this instanceof a){switch(arguments.length){case 0:return new a;case 1:return new a(e);case 2:return new a(e,t)}return new a(e,t,n)}return a.apply(this,arguments)}return e[b]=a[b],e}(o):u&&"function"==typeof o?y(Function.call,o):o,u&&((f.virtual||(f.virtual={}))[a]=o,e&w.R&&p&&!p[a]&&v(p,a,o)))};w.F=1,w.G=2,w.S=4,w.P=8,w.B=16,w.W=32,w.U=64,w.R=128,e.exports=w},function(e,t,n){var a=n(82);e.exports=function(e){if(!a(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){"use strict";n(38),n(63),n(496)},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var a,r,E=f(n(4)),o=f(n(3)),i=f(n(5)),s=f(n(6)),l=n(0),T=f(l),u=n(25),d=f(n(2)),C=f(n(12)),c=n(11);function f(e){return e&&e.__esModule?e:{default:e}}var p,h=c.func.bindCtx,L=c.obj.pickOthers,m=(p=l.Component,(0,s.default)(D,p),D.prototype.componentDidMount=function(){this.itemNode=(0,u.findDOMNode)(this);var e=this.props,t=e.parentMode,n=e.root,a=e.menu;if(a)this.menuNode=(0,u.findDOMNode)(a);else if("popup"===t)this.menuNode=this.itemNode.parentNode;else{this.menuNode=(0,u.findDOMNode)(n);var r=n.props,o=r.prefix,i=r.header,s=r.footer;(i||s)&&(this.menuNode=this.menuNode.querySelector("."+o+"menu-content"))}this.setFocus()},D.prototype.componentDidUpdate=function(){this.setFocus()},D.prototype.focusable=function(){var e=this.props,t=e.root,n=e.type,a=e.disabled,r=t.props.focusable;return r&&("submenu"===n||!a)},D.prototype.getFocused=function(){var e=this.props,t=e._key;return e.root.state.focusedKey===t},D.prototype.setFocus=function(){if(this.getFocused()&&(this.focusable()&&this.itemNode.focus({preventScroll:!0}),this.menuNode&&this.menuNode.scrollHeight>this.menuNode.clientHeight)){var e=this.menuNode.clientHeight+this.menuNode.scrollTop,t=this.itemNode.offsetTop+this.itemNode.offsetHeight;e"===(d=e.charAt(o+1))){r+="(",o++,0[0-9][0-9][0-9][0-9])-(?[0-9][0-9]?)-(?[0-9][0-9]?)(?:(?:[Tt]|[ \t]+)(?[0-9][0-9]?):(?[0-9][0-9]):(?[0-9][0-9])(?:.(?[0-9]*))?(?:[ \t]*(?Z|(?[-+])(?[0-9][0-9]?)(?::(?[0-9][0-9]))?))?)?$","i"),r.LOCAL_TIMEZONE_OFFSET=60*(new Date).getTimezoneOffset()*1e3,r.trim=function(e,t){var n,a;return null==t&&(t="\\s"),null==(n=this.REGEX_LEFT_TRIM_BY_CHAR[t])&&(this.REGEX_LEFT_TRIM_BY_CHAR[t]=n=new RegExp("^"+t+t+"*")),n.lastIndex=0,null==(a=this.REGEX_RIGHT_TRIM_BY_CHAR[t])&&(this.REGEX_RIGHT_TRIM_BY_CHAR[t]=a=new RegExp(t+""+t+"*$")),a.lastIndex=0,e.replace(n,"").replace(a,"")},r.ltrim=function(e,t){var n;return null==t&&(t="\\s"),null==(n=this.REGEX_LEFT_TRIM_BY_CHAR[t])&&(this.REGEX_LEFT_TRIM_BY_CHAR[t]=n=new RegExp("^"+t+t+"*")),n.lastIndex=0,e.replace(n,"")},r.rtrim=function(e,t){var n;return null==t&&(t="\\s"),null==(n=this.REGEX_RIGHT_TRIM_BY_CHAR[t])&&(this.REGEX_RIGHT_TRIM_BY_CHAR[t]=n=new RegExp(t+""+t+"*$")),n.lastIndex=0,e.replace(n,"")},r.isEmpty=function(e){return!e||""===e||"0"===e||e instanceof Array&&0===e.length||this.isEmptyObject(e)},r.isEmptyObject=function(t){var n;return t instanceof Object&&0===function(){var e;for(n in e=[],t)a.call(t,n)&&e.push(n);return e}().length},r.subStrCount=function(e,t,n,a){var r,o,i,s,l,u;for(r=0,e=""+e,t=""+t,null!=n&&(e=e.slice(n)),null!=a&&(e=e.slice(0,a)),s=e.length,u=t.length,o=i=0,l=s;0<=l?i>6)+t(128|63&e):e<65536?t(224|e>>12)+t(128|e>>6&63)+t(128|63&e):t(240|e>>18)+t(128|e>>12&63)+t(128|e>>6&63)+t(128|63&e)},r.parseBoolean=function(e,t){var n;return null==t&&(t=!0),"string"==typeof e?(n=e.toLowerCase(),!(!t&&"no"===n)&&"0"!==n&&"false"!==n&&""!==n):!!e},r.isNumeric=function(e){return this.REGEX_SPACES.lastIndex=0,"number"==typeof e||"string"==typeof e&&!isNaN(e)&&""!==e.replace(this.REGEX_SPACES,"")},r.stringToDate=function(e){var t,n,a,r,o,i,s,l,u,d;if(null==e||!e.length)return null;if(!(o=this.PATTERN_DATE.exec(e)))return null;if(d=parseInt(o.year,10),s=parseInt(o.month,10)-1,n=parseInt(o.day,10),null==o.hour)return t=new Date(Date.UTC(d,s,n));if(r=parseInt(o.hour,10),i=parseInt(o.minute,10),l=parseInt(o.second,10),null!=o.fraction){for(a=o.fraction.slice(0,3);a.length<3;)a+="0";a=parseInt(a,10)}else a=0;return null!=o.tz&&(u=6e4*(60*parseInt(o.tz_hour,10)+(null!=o.tz_minute?parseInt(o.tz_minute,10):0)),"-"===o.tz_sign&&(u*=-1)),t=new Date(Date.UTC(d,s,n,r,i,l,a)),u&&t.setTime(t.getTime()-u),t},r.strRepeat=function(e,t){var n,a;for(a="",n=0;ndocument.F=Object<\/script>"),e.close(),d=e.F;n--;)delete d[u][s[n]];return d()};e.exports=Object.create||function(e,t){var n;return null!==e?(r[u]=o(e),n=new r,r[u]=null,n[l]=e):n=d(),void 0===t?n:i(n,t)}},function(e,t,n){var a=n(81).f,r=n(75),o=n(84)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&a(e,o,{configurable:!0,value:t})}},function(e,t,n){t.f=n(84)},function(e,t,n){var a=n(70),r=n(73),o=n(110),i=n(139),s=n(81).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=o?{}:a.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:i.f(e)})}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(t,e){if(!t)return null;if("string"==typeof t)return document.getElementById(t);"function"==typeof t&&(t=t(e));if(!t)return null;try{return(0,a.findDOMNode)(t)}catch(e){return t}};var a=n(25);e.exports=t.default},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var a,r,h=c(n(4)),o=c(n(3)),i=c(n(5)),s=c(n(6)),l=n(0),m=c(l),u=c(n(2)),g=c(n(12)),y=c(n(24)),d=n(11),v=c(n(102));function c(e){return e&&e.__esModule?e:{default:e}}var f,p=d.func.bindCtx,_=d.obj.pickOthers,b=(f=l.Component,(0,s.default)(w,f),w.prototype.getSelected=function(){var e=this.props,t=e._key,n=e.root,a=e.selected,r=n.props.selectMode,o=n.state.selectedKeys;return a||!!r&&-1>6]+u[128|63&i]:i<55296||57344<=i?r+=u[224|i>>12]+u[128|i>>6&63]+u[128|63&i]:(o+=1,i=65536+((1023&i)<<10|1023&a.charCodeAt(o)),r+=u[240|i>>18]+u[128|i>>12&63]+u[128|i>>6&63]+u[128|63&i])}return r},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(d(e)){for(var n=[],a=0;a=c,T=(0,R.default)(((t={})[r+"upload-inner"]=!0,t[r+"hidden"]=E,t)),C=this.props.children;if("card"===i){var L,D=(0,R.default)(((L={})[r+"upload-card"]=!0,L[r+"disabled"]=d,L));C=A.default.createElement("div",{className:D},A.default.createElement(F.default,{type:"add",size:"large"}),A.default.createElement("div",{tabIndex:"0",role:"button",className:r+"upload-text"},C))}if(M){if("function"!=typeof k)return a?A.default.createElement(W.default,{isPreview:!0,listType:a,style:l,className:s,value:this.state.value}):null;var O,N=(0,R.default)(((O={})[r+"form-preview"]=!0,O[s]=!!s,O));return A.default.createElement("div",{style:l,className:N},k(this.state.value,this.props))}var P=d?H.func.prevent:m,j=H.obj.pickAttrsWith(this.props,"data-");return A.default.createElement("div",(0,Y.default)({className:x,style:l},j),A.default.createElement(z.default,(0,Y.default)({},S,{beforeUpload:p,dragable:o,disabled:d||E,className:T,onSelect:this.onSelect,onDrop:this.onDrop,onProgress:this.onProgress,onSuccess:this.onSuccess,onError:this.onError,ref:this.saveUploaderRef}),C),a||v?A.default.createElement(W.default,{useDataURL:u,uploader:this,listType:a,value:this.state.value,closable:f,onRemove:P,progressProps:b,onCancel:g,onPreview:y,extraRender:_,rtl:w}):null)},r=a=y,a.displayName="Upload",a.propTypes=(0,Y.default)({},c.default.propTypes,W.default.propTypes,{prefix:u.default.string.isRequired,action:u.default.string,value:u.default.array,defaultValue:u.default.array,shape:u.default.oneOf(["card"]),listType:u.default.oneOf(["text","image","card"]),list:u.default.any,name:u.default.string,data:u.default.oneOfType([u.default.object,u.default.func]),formatter:u.default.func,limit:u.default.number,timeout:u.default.number,dragable:u.default.bool,closable:u.default.bool,useDataURL:u.default.bool,disabled:u.default.bool,onSelect:u.default.func,onProgress:u.default.func,onChange:u.default.func,onSuccess:u.default.func,afterSelect:u.default.func,onRemove:u.default.func,onError:u.default.func,beforeUpload:u.default.func,onDrop:u.default.func,className:u.default.string,style:u.default.object,children:u.default.node,autoUpload:u.default.bool,request:u.default.func,progressProps:u.default.object,rtl:u.default.bool,isPreview:u.default.bool,renderPreview:u.default.func}),a.defaultProps=(0,Y.default)({},c.default.defaultProps,{prefix:"next-",limit:1/0,autoUpload:!0,closable:!0,onSelect:m,onProgress:m,onChange:m,onSuccess:m,onRemove:m,onError:m,onDrop:m,beforeUpload:m,afterSelect:m}),o=function(){var f=this;this.onSelect=function(e){var t=f.props,n=t.autoUpload,a=t.afterSelect,r=t.onSelect,o=t.limit,i=f.state.value.length+e.length,s=o-f.state.value.length;if(!(s<=0)){var l=e.map(function(e){var t=(0,p.fileToObject)(e);return t.state="selected",t}),u=l,d=[];or;)i(a,n=t[r++])&&(~l(o,n)||o.push(n));return o}},function(e,t,n){var a=n(171);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==a(e)?e.split(""):Object(e)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){"use strict";function _(){return this}var b=n(110),w=n(98),M=n(173),k=n(80),S=n(136),x=n(431),E=n(138),T=n(434),C=n(84)("iterator"),L=!([].keys&&"next"in[].keys()),D="values";e.exports=function(e,t,n,a,r,o,i){x(n,t,a);function s(e){if(!L&&e in h)return h[e];switch(e){case"keys":case D:return function(){return new n(this,e)}}return function(){return new n(this,e)}}var l,u,d,c=t+" Iterator",f=r==D,p=!1,h=e.prototype,m=h[C]||h["@@iterator"]||r&&h[r],g=m||s(r),y=r?f?s("entries"):g:void 0,v="Array"==t&&h.entries||m;if(v&&(d=T(v.call(new e)))!==Object.prototype&&d.next&&(E(d,c,!0),b||"function"==typeof d[C]||k(d,C,_)),f&&m&&m.name!==D&&(p=!0,g=function(){return m.call(this)}),b&&!i||!L&&!p&&h[C]||k(h,C,g),S[t]=g,S[c]=_,r)if(l={values:f?g:s(D),keys:o?g:s("keys"),entries:y},i)for(u in l)u in h||M(h,u,l[u]);else w(w.P+w.F*(L||p),t,l);return l}},function(e,t,n){e.exports=n(80)},function(e,t,n){var a=n(169),r=n(133).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return a(e,r)}},function(e,t,n){var a=n(112),r=n(108),o=n(83),i=n(128),s=n(75),l=n(167),u=Object.getOwnPropertyDescriptor;t.f=n(74)?u:function(e,t){if(e=o(e),t=i(t,!0),l)try{return u(e,t)}catch(e){}if(s(e,t))return r(!a.f.call(e,t),e[t])}},function(e,t,n){"use strict"; /* object-assign (c) Sindre Sorhus @license MIT -*/var l=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(e){a[e]=e}),"abcdefghijklmnopqrst"!==Object.keys(Object.assign({},a)).join("")?void 0:1}catch(e){return}}()?Object.assign:function(e,t){for(var n,a,r=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),o=1;or;)i(a,n=t[r++])&&(~l(o,n)||o.push(n));return o}},function(e,t,n){var a=n(179);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==a(e)?e.split(""):Object(e)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){"use strict";function _(){return this}var b=n(113),w=n(83),M=n(181),k=n(84),x=n(143),S=n(451),E=n(145),T=n(454),L=n(87)("iterator"),C=!([].keys&&"next"in[].keys()),D="values";e.exports=function(e,t,n,a,r,o,i){S(n,t,a);function s(e){if(!C&&e in h)return h[e];switch(e){case"keys":case D:return function(){return new n(this,e)}}return function(){return new n(this,e)}}var l,u,d,c=t+" Iterator",f=r==D,p=!1,h=e.prototype,m=h[L]||h["@@iterator"]||r&&h[r],g=m||s(r),y=r?f?s("entries"):g:void 0,v="Array"==t&&h.entries||m;if(v&&(d=T(v.call(new e)))!==Object.prototype&&d.next&&(E(d,c,!0),b||"function"==typeof d[L]||k(d,L,_)),f&&m&&m.name!==D&&(p=!0,g=function(){return m.call(this)}),b&&!i||!C&&!p&&h[L]||k(h,L,g),x[t]=g,x[c]=_,r)if(l={values:f?g:s(D),keys:o?g:s("keys"),entries:y},i)for(u in l)u in h||M(h,u,l[u]);else w(w.P+w.F*(C||p),t,l);return l}},function(e,t,n){e.exports=n(84)},function(e,t,n){var a=n(177),r=n(140).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return a(e,r)}},function(e,t,n){var a=n(115),r=n(111),o=n(86),i=n(135),s=n(77),l=n(175),u=Object.getOwnPropertyDescriptor;t.f=n(73)?u:function(e,t){if(e=o(e),t=i(t,!0),l)try{return u(e,t)}catch(e){}if(s(e,t))return r(!a.f.call(e,t),e[t])}},function(e,t,n){"use strict";t.__esModule=!0;var x=a(n(4));t.default=function(e,t,n){var a=e.prefix,r=e.locale,o=e.pure,i=e.rtl,s=e.device,l=e.popupContainer,u=e.errorBoundary,d=t.nextPrefix,c=t.nextLocale,f=t.nextPure,p=t.nextWarning,h=t.nextRtl,m=t.nextDevice,g=t.nextPopupContainer,y=t.nextErrorBoundary,v=a||d,_=void 0;c&&(_=c[n])&&(_.momentLocale=c.momentLocale);var b=void 0;r?b=E.obj.deepMerge({},S.default[n],_,r):_&&(b=E.obj.deepMerge({},S.default[n],_));var w="boolean"==typeof o?o:f,M="boolean"==typeof i?i:h,k=(0,x.default)({},T(y),T(u));"open"in k||(k.open=!1);return{prefix:v,locale:b,pure:w,rtl:M,warning:p,device:s||m||void 0,popupContainer:l||g,errorBoundary:k}};var S=a(n(42)),E=n(11);function a(e){return e&&e.__esModule?e:{default:e}}var T=function(e){return null==e?{}:"boolean"==typeof e?{open:e}:(0,x.default)({open:!0},e)};e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.matches=t.hasDOM=void 0;var a,r=n(49),o=(a=r)&&a.__esModule?a:{default:a};t.hasClass=u,t.addClass=d,t.removeClass=c,t.toggleClass=function(e,t){if(!l||!e)return!1;{if(e.classList)return e.classList.toggle(t);var n=u(e,t);return(n?c:d)(e,t,!0),!n}},t.getStyle=function(e,t){if(!l||!e)return null;var n=function(e){return e&&1===e.nodeType?window.getComputedStyle(e,null):{}}(e);return 1!==arguments.length?(t=g[t]?"cssFloat"in e.style?"cssFloat":"styleFloat":t,function(e,t,n){if(t=t.toLowerCase(),"auto"===n){if("height"===t)return e.offsetHeight||0;if("width"===t)return e.offsetWidth||0}t in m||(m[t]=h.test(t));return m[t]?parseFloat(n)||0:n}(e,t,n.getPropertyValue((0,i.hyphenate)(t))||e.style[(0,i.camelcase)(t)])):n},t.setStyle=y,t.scrollbar=function(){var e=document.createElement("div");y(e,{position:"absolute",width:"100px",height:"100px",overflow:"scroll",top:"-9999px"}),document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth,n=e.offsetHeight-e.clientHeight;return document.body.removeChild(e),{width:t,height:n}},t.getOffset=function(e){var t=e.getBoundingClientRect(),n=e.ownerDocument.defaultView;return{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}},t.getPixels=function(e){var t=document.defaultView;if("number"==typeof+e&&!isNaN(+e))return+e;if("string"==typeof e){var n=/(\d+)px/,a=/(\d+)vh/;if(Array.isArray(e.match(n)))return+e.match(n)[1]||0;if(Array.isArray(e.match(a))){var r=t.innerHeight/100;return+e.match(a)[1]*r||0}}return 0},t.getClosest=function(e,t){if(!l||!e)return null;{if(Element.prototype.closest)return e.closest(t);if(!document.documentElement.contains(e))return null;do{if(v(e,t))return e;e=e.parentElement}while(null!==e)}return null},t.getMatches=v;var i=n(186),s=n(88);var l=t.hasDOM="undefined"!=typeof window&&!!window.document&&!!document.createElement;function u(e,t){return!(!l||!e)&&(e.classList?e.classList.contains(t):-1=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},s=function(e){return e===0?0:e===1?1:e===2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},l={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(i){return function(e,t,n,a){var r=s(e),o=l[i][s(e)];if(r===2){o=o[t?0:1]}return o.replace(/%d/i,e)}},r=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],o;e.defineLocale("ar",{months:r,monthsShort:r,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){if(e<12){return"ص"}else{return"م"}},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},s=function(e){return e===0?0:e===1?1:e===2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},l={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},n=function(i){return function(e,t,n,a){var r=s(e),o=l[i][s(e)];if(r===2){o=o[t?0:1]}return o.replace(/%d/i,e)}},a=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],r;e.defineLocale("ar-ly",{months:a,monthsShort:a,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){if(e<12){return"ص"}else{return"م"}},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:n("s"),ss:n("s"),m:n("m"),mm:n("m"),h:n("h"),hh:n("h"),d:n("d"),dd:n("d"),M:n("M"),MM:n("M"),y:n("y"),yy:n("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a;e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){if(e<12){return"ص"}else{return"م"}},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var r={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"},t;e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"gecə"}else if(e<12){return"səhər"}else if(e<17){return"gündüz"}else{return"axşam"}},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(e===0){return e+"-ıncı"}var t=e%10,n=e%100-t,a=e>=100?100:null;return e+(r[t]||r[n]||r[a])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function r(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function t(e,t,n){var a={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:t?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};if(n==="m"){return t?"хвіліна":"хвіліну"}else if(n==="h"){return t?"гадзіна":"гадзіну"}else{return e+" "+r(a[n],+e)}}var n;e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:t,mm:t,h:t,hh:t,d:"дзень",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"ночы"}else if(e<12){return"раніцы"}else if(e<17){return"дня"}else{return"вечара"}},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return(e%10===2||e%10===3)&&e%100!==12&&e%100!==13?e+"-і":e+"-ы";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Миналата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[Миналия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;if(e===0){return e+"-ев"}else if(n===0){return e+"-ен"}else if(n>10&&n<20){return e+"-ти"}else if(t===1){return e+"-ви"}else if(t===2){return e+"-ри"}else if(t===7||t===8){return e+"-ми"}else{return e+"-ти"}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},a;e.defineLocale("bn",{months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="রাত"&&e>=4||t==="দুপুর"&&e<5||t==="বিকাল"){return e+12}else{return e}},meridiem:function(e,t,n){if(e<4){return"রাত"}else if(e<10){return"সকাল"}else if(e<17){return"দুপুর"}else if(e<20){return"বিকাল"}else{return"রাত"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"},a;e.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12".split("_"),monthsShortRegex:/^(ཟླ་\d{1,2})/,monthsParseExact:true,weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="མཚན་མོ"&&e>=4||t==="ཉིན་གུང"&&e<5||t==="དགོང་དག"){return e+12}else{return e}},meridiem:function(e,t,n){if(e<4){return"མཚན་མོ"}else if(e<10){return"ཞོགས་ཀས"}else if(e<17){return"ཉིན་གུང"}else if(e<20){return"དགོང་དག"}else{return"མཚན་མོ"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n){var a={mm:"munutenn",MM:"miz",dd:"devezh"};return e+" "+r(a[n],e)}function n(e){switch(a(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}function a(e){if(e>9){return a(e%10)}return e}function r(e,t){if(t===2){return o(e)}return e}function o(e){var t={m:"v",b:"v",d:"z"};if(t[e.charAt(0)]===undefined){return e}return t[e.charAt(0)]+e.substring(1)}var i;e.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:n},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){var t=e===1?"añ":"vet";return e+t},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n){var a=e+" ";switch(n){case"ss":if(e===1){a+="sekunda"}else if(e===2||e===3||e===4){a+="sekunde"}else{a+="sekundi"}return a;case"m":return t?"jedna minuta":"jedne minute";case"mm":if(e===1){a+="minuta"}else if(e===2||e===3||e===4){a+="minute"}else{a+="minuta"}return a;case"h":return t?"jedan sat":"jednog sata";case"hh":if(e===1){a+="sat"}else if(e===2||e===3||e===4){a+="sata"}else{a+="sati"}return a;case"dd":if(e===1){a+="dan"}else{a+="dana"}return a;case"MM":if(e===1){a+="mjesec"}else if(e===2||e===3||e===4){a+="mjeseca"}else{a+="mjeseci"}return a;case"yy":if(e===1){a+="godina"}else if(e===2||e===3||e===4){a+="godine"}else{a+="godina"}return a}}var n;e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:true,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(this.hours()!==1?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(this.hours()!==1?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(this.hours()!==1?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(this.hours()!==1?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(this.hours()!==1?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=e===1?"r":e===2?"n":e===3?"r":e===4?"t":"è";if(t==="w"||t==="W"){n="a"}return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),a=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],r=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,o;function i(e){return e>1&&e<5&&~~(e/10)!==1}function s(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"pár sekund":"pár sekundami";case"ss":if(t||a){return r+(i(e)?"sekundy":"sekund")}else{return r+"sekundami"}case"m":return t?"minuta":a?"minutu":"minutou";case"mm":if(t||a){return r+(i(e)?"minuty":"minut")}else{return r+"minutami"}case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":if(t||a){return r+(i(e)?"hodiny":"hodin")}else{return r+"hodinami"}case"d":return t||a?"den":"dnem";case"dd":if(t||a){return r+(i(e)?"dny":"dní")}else{return r+"dny"}case"M":return t||a?"měsíc":"měsícem";case"MM":if(t||a){return r+(i(e)?"měsíce":"měsíců")}else{return r+"měsíci"}case"y":return t||a?"rok":"rokem";case"yy":if(t||a){return r+(i(e)?"roky":"let")}else{return r+"lety"}}}e.defineLocale("cs",{months:t,monthsShort:n,monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){var t=/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран";return e+t},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t=e,n="",a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];if(t>20){if(t===40||t===50||t===60||t===80||t===100){n="fed"}else{n="ain"}}else if(t>0){n=a[t]}return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}var n;e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}var n;e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}var n;e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"],a;e.defineLocale("dv",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(e){return"މފ"===e},meridiem:function(e,t,n){if(e<12){return"މކ"}else{return"މފ"}},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function r(e){return typeof Function!=="undefined"&&e instanceof Function||Object.prototype.toString.call(e)==="[object Function]"}var t;e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,t){if(!e){return this._monthsNominativeEl}else if(typeof t==="string"&&/D/.test(t.substring(0,t.indexOf("MMMM")))){return this._monthsGenitiveEl[e.month()]}else{return this._monthsNominativeEl[e.month()]}},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,t,n){if(e>11){return n?"μμ":"ΜΜ"}else{return n?"πμ":"ΠΜ"}},isPM:function(e){return(e+"").toLowerCase()[0]==="μ"},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,t){var n=this._calendarEl[e],a=t&&t.hours();if(r(n)){n=n.apply(t)}return n.replace("{}",a%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return e.charAt(0).toLowerCase()==="p"},meridiem:function(e,t,n){if(e>11){return n?"p.t.m.":"P.T.M."}else{return n?"a.t.m.":"A.T.M."}},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,o;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(this.hours()!==1?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(this.hours()!==1?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(this.hours()!==1?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(this.hours()!==1?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(this.hours()!==1?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4},invalidDate:"Fecha invalida"})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,o;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(this.hours()!==1?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(this.hours()!==1?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(this.hours()!==1?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(this.hours()!==1?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(this.hours()!==1?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,o;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(this.hours()!==1?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(this.hours()!==1?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(this.hours()!==1?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(this.hours()!==1?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(this.hours()!==1?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};if(t){return r[n][2]?r[n][2]:r[n][1]}return a?r[n][0]:r[n][1]}var n;e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:true,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"},a;e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){if(e<12){return"قبل از ظهر"}else{return"بعد از ظهر"}},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"%d ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),a=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",n[7],n[8],n[9]],t;function r(e,t,n,a){var r="";switch(n){case"s":return a?"muutaman sekunnin":"muutama sekunti";case"ss":return a?"sekunnin":"sekuntia";case"m":return a?"minuutin":"minuutti";case"mm":r=a?"minuutin":"minuuttia";break;case"h":return a?"tunnin":"tunti";case"hh":r=a?"tunnin":"tuntia";break;case"d":return a?"päivän":"päivä";case"dd":r=a?"päivän":"päivää";break;case"M":return a?"kuukauden":"kuukausi";case"MM":r=a?"kuukauden":"kuukautta";break;case"y":return a?"vuoden":"vuosi";case"yy":r=a?"vuoden":"vuotta";break}r=o(e,a)+" "+r;return r}function o(e,t){return e<10?t?a[e]:n[e]:e}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:true,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case"D":return e+(e===1?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(e===1?"er":"e");case"w":case"W":return e+(e===1?"re":"e")}},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:true,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(e===1?"er":"e");case"w":case"W":return e+(e===1?"re":"e")}}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:true,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(e===1?"er":"e");case"w":case"W":return e+(e===1?"re":"e")}},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),a="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),t;e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsParseExact:true,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(e===1||e===8||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t=["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Meitheamh","Iúil","Lúnasa","Meán Fómhair","Deireadh Fómhair","Samhain","Nollaig"],n=["Ean","Feabh","Márt","Aib","Beal","Meith","Iúil","Lún","M.F.","D.F.","Samh","Noll"],a=["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Sathairn"],r=["Domh","Luan","Máirt","Céad","Déar","Aoine","Sath"],o=["Do","Lu","Má","Cé","Dé","A","Sa"],i;e.defineLocale("ga",{months:t,monthsShort:n,monthsParseExact:true,weekdays:a,weekdaysShort:r,weekdaysMin:o,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d míonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){var t=e===1?"d":e%10===2?"na":"mh";return e+t},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],n=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],a=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],r=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],o=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],i;e.defineLocale("gd",{months:t,monthsShort:n,monthsParseExact:true,weekdays:a,weekdaysShort:r,weekdaysMin:o,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){var t=e===1?"d":e%10===2?"na":"mh";return e+t},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:true,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(this.hours()!==1?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(this.hours()!==1?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(this.hours()!==1?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(this.hours()!==1?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(this.hours()!==1?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){if(e.indexOf("un")===0){return"n"+e}return"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r={s:["थोडया सॅकंडांनी","थोडे सॅकंड"],ss:[e+" सॅकंडांनी",e+" सॅकंड"],m:["एका मिणटान","एक मिनूट"],mm:[e+" मिणटांनी",e+" मिणटां"],h:["एका वरान","एक वर"],hh:[e+" वरांनी",e+" वरां"],d:["एका दिसान","एक दीस"],dd:[e+" दिसांनी",e+" दीस"],M:["एका म्हयन्यान","एक म्हयनो"],MM:[e+" म्हयन्यानी",e+" म्हयने"],y:["एका वर्सान","एक वर्स"],yy:[e+" वर्सांनी",e+" वर्सां"]};return a?r[n][0]:r[n][1]}var n;e.defineLocale("gom-deva",{months:{standalone:"जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),format:"जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:true,weekdays:"आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार".split("_"),weekdaysShort:"आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.".split("_"),weekdaysMin:"आ_सो_मं_बु_ब्रे_सु_शे".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"A h:mm [वाजतां]",LTS:"A h:mm:ss [वाजतां]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [वाजतां]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [वाजतां]",llll:"ddd, D MMM YYYY, A h:mm [वाजतां]"},calendar:{sameDay:"[आयज] LT",nextDay:"[फाल्यां] LT",nextWeek:"[फुडलो] dddd[,] LT",lastDay:"[काल] LT",lastWeek:"[फाटलो] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s आदीं",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(वेर)/,ordinal:function(e,t){switch(t){case"D":return e+"वेर";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:1,doy:4},meridiemParse:/राती|सकाळीं|दनपारां|सांजे/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="राती"){return e<4?e:e+12}else if(t==="सकाळीं"){return e}else if(t==="दनपारां"){return e>12?e:e+12}else if(t==="सांजे"){return e+12}},meridiem:function(e,t,n){if(e<4){return"राती"}else if(e<12){return"सकाळीं"}else if(e<16){return"दनपारां"}else if(e<20){return"सांजे"}else{return"राती"}}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return a?r[n][0]:r[n][1]}var n;e.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){switch(t){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:1,doy:4},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="rati"){return e<4?e:e+12}else if(t==="sokallim"){return e}else if(t==="donparam"){return e>12?e:e+12}else if(t==="sanje"){return e+12}},meridiem:function(e,t,n){if(e<4){return"rati"}else if(e<12){return"sokallim"}else if(e<16){return"donparam"}else if(e<20){return"sanje"}else{return"rati"}}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"},a;e.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:true,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="રાત"){return e<4?e:e+12}else if(t==="સવાર"){return e}else if(t==="બપોર"){return e>=10?e:e+12}else if(t==="સાંજ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"રાત"}else if(e<10){return"સવાર"}else if(e<17){return"બપોર"}else if(e<20){return"સાંજ"}else{return"રાત"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){if(e===2){return"שעתיים"}return e+" שעות"},d:"יום",dd:function(e){if(e===2){return"יומיים"}return e+" ימים"},M:"חודש",MM:function(e){if(e===2){return"חודשיים"}return e+" חודשים"},y:"שנה",yy:function(e){if(e===2){return"שנתיים"}else if(e%10===0&&e!==10){return e+" שנה"}return e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){if(e<5){return"לפנות בוקר"}else if(e<10){return"בבוקר"}else if(e<12){return n?'לפנה"צ':"לפני הצהריים"}else if(e<18){return n?'אחה"צ':"אחרי הצהריים"}else{return"בערב"}}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},a;e.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:true,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="रात"){return e<4?e:e+12}else if(t==="सुबह"){return e}else if(t==="दोपहर"){return e>=10?e:e+12}else if(t==="शाम"){return e+12}},meridiem:function(e,t,n){if(e<4){return"रात"}else if(e<10){return"सुबह"}else if(e<17){return"दोपहर"}else if(e<20){return"शाम"}else{return"रात"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n){var a=e+" ";switch(n){case"ss":if(e===1){a+="sekunda"}else if(e===2||e===3||e===4){a+="sekunde"}else{a+="sekundi"}return a;case"m":return t?"jedna minuta":"jedne minute";case"mm":if(e===1){a+="minuta"}else if(e===2||e===3||e===4){a+="minute"}else{a+="minuta"}return a;case"h":return t?"jedan sat":"jednog sata";case"hh":if(e===1){a+="sat"}else if(e===2||e===3||e===4){a+="sata"}else{a+="sati"}return a;case"dd":if(e===1){a+="dan"}else{a+="dana"}return a;case"MM":if(e===1){a+="mjesec"}else if(e===2||e===3||e===4){a+="mjeseca"}else{a+="mjeseci"}return a;case"yy":if(e===1){a+="godina"}else if(e===2||e===3||e===4){a+="godine"}else{a+="godina"}return a}}var n;e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:true,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:return"[prošlu] [nedjelju] [u] LT";case 3:return"[prošlu] [srijedu] [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" "),n;function a(e,t,n,a){var r=e;switch(n){case"s":return a||t?"néhány másodperc":"néhány másodperce";case"ss":return r+(a||t)?" másodperc":" másodperce";case"m":return"egy"+(a||t?" perc":" perce");case"mm":return r+(a||t?" perc":" perce");case"h":return"egy"+(a||t?" óra":" órája");case"hh":return r+(a||t?" óra":" órája");case"d":return"egy"+(a||t?" nap":" napja");case"dd":return r+(a||t?" nap":" napja");case"M":return"egy"+(a||t?" hónap":" hónapja");case"MM":return r+(a||t?" hónap":" hónapja");case"y":return"egy"+(a||t?" év":" éve");case"yy":return r+(a||t?" év":" éve")}return""}function r(e){return(e?"":"[múlt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return e.charAt(1).toLowerCase()==="u"},meridiem:function(e,t,n){if(e<12){return n===true?"de":"DE"}else{return n===true?"du":"DU"}},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,true)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,false)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){if(e<4){return"գիշերվա"}else if(e<12){return"առավոտվա"}else if(e<17){return"ցերեկվա"}else{return"երեկոյան"}},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(e,t){switch(t){case"DDD":case"w":case"W":case"DDDo":if(e===1){return e+"-ին"}return e+"-րդ";default:return e}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="pagi"){return e}else if(t==="siang"){return e>=11?e:e+12}else if(t==="sore"||t==="malam"){return e+12}},meridiem:function(e,t,n){if(e<11){return"pagi"}else if(e<15){return"siang"}else if(e<19){return"sore"}else{return"malam"}},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function o(e){if(e%100===11){return true}else if(e%10===1){return false}return true}function t(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":if(o(e)){return r+(t||a?"sekúndur":"sekúndum")}return r+"sekúnda";case"m":return t?"mínúta":"mínútu";case"mm":if(o(e)){return r+(t||a?"mínútur":"mínútum")}else if(t){return r+"mínúta"}return r+"mínútu";case"hh":if(o(e)){return r+(t||a?"klukkustundir":"klukkustundum")}return r+"klukkustund";case"d":if(t){return"dagur"}return a?"dag":"degi";case"dd":if(o(e)){if(t){return r+"dagar"}return r+(a?"daga":"dögum")}else if(t){return r+"dagur"}return r+(a?"dag":"degi");case"M":if(t){return"mánuður"}return a?"mánuð":"mánuði";case"MM":if(o(e)){if(t){return r+"mánuðir"}return r+(a?"mánuði":"mánuðum")}else if(t){return r+"mánuður"}return r+(a?"mánuð":"mánuði");case"y":return t||a?"ár":"ári";case"yy":if(o(e)){return r+(t||a?"ár":"árum")}return r+(t||a?"ár":"ári")}}var n;e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,ss:t,m:t,mm:t,h:"klukkustund",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":this.hours()===0?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":this.hours()===0?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":this.hours()===0?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":this.hours()===0?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(this.hours()>1?"lle ":this.hours()===0?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":this.hours()===0?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"令和",narrow:"㋿",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"平成",narrow:"㍻",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"昭和",narrow:"㍼",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"大正",narrow:"㍽",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"明治",narrow:"㍾",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"西暦",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-Infinity,offset:1,name:"紀元前",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(元|\d+)年/,eraYearOrdinalParse:function(e,t){return t[1]==="元"?1:parseInt(t[1]||e,10)},months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return e==="午後"},meridiem:function(e,t,n){if(e<12){return"午前"}else{return"午後"}},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){if(e.week()!==this.week()){return"[来週]dddd LT"}else{return"dddd LT"}},lastDay:"[昨日] LT",lastWeek:function(e){if(this.week()!==e.week()){return"[先週]dddd LT"}else{return"dddd LT"}},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,t){switch(t){case"y":return e===1?"元年":e+"年";case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="enjing"){return e}else if(t==="siyang"){return e>=11?e:e+12}else if(t==="sonten"||t==="ndalu"){return e+12}},meridiem:function(e,t,n){if(e<11){return"enjing"}else if(e<15){return"siyang"}else if(e<19){return"sonten"}else{return"ndalu"}},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ka",{months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,function(e,t,n){return n==="ი"?t+"ში":t+n+"ში"})},past:function(e){if(/(წამი|წუთი|საათი|დღე|თვე)/.test(e)){return e.replace(/(ი|ე)$/,"ის წინ")}if(/წელი/.test(e)){return e.replace(/წელი$/,"წლის წინ")}return e},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){if(e===0){return e}if(e===1){return e+"-ლი"}if(e<20||e<=100&&e%20===0||e%100===0){return"მე-"+e}return e+"-ე"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var a={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"},t;e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"},a;e.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return e==="ល្ងាច"},meridiem:function(e,t,n){if(e<12){return"ព្រឹក"}else{return"ល្ងាច"}},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"},a;e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:true,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="ರಾತ್ರಿ"){return e<4?e:e+12}else if(t==="ಬೆಳಿಗ್ಗೆ"){return e}else if(t==="ಮಧ್ಯಾಹ್ನ"){return e>=10?e:e+12}else if(t==="ಸಂಜೆ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"ರಾತ್ರಿ"}else if(e<10){return"ಬೆಳಿಗ್ಗೆ"}else if(e<17){return"ಮಧ್ಯಾಹ್ನ"}else if(e<20){return"ಸಂಜೆ"}else{return"ರಾತ್ರಿ"}},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return e==="오후"},meridiem:function(e,t,n){return e<12?"오전":"오후"}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"],r;e.defineLocale("ku",{months:a,monthsShort:a,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,t,n){if(e<12){return"به‌یانی"}else{return"ئێواره‌"}},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var a={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"},t;e.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return t?r[n][0]:r[n][1]}function n(e){var t=e.substr(0,e.indexOf(" "));if(r(t)){return"a "+e}return"an "+e}function a(e){var t=e.substr(0,e.indexOf(" "));if(r(t)){return"viru "+e}return"virun "+e}function r(e){e=parseInt(e,10);if(isNaN(e)){return false}if(e<0){return true}else if(e<10){if(4<=e&&e<=7){return true}return false}else if(e<100){var t=e%10,n=e/10;if(t===0){return r(n)}return r(t)}else if(e<1e4){while(e>=10){e=e/10}return r(e)}else{e=e/1e3;return r(e)}}var o;e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:a,s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d Méint",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return e==="ຕອນແລງ"},meridiem:function(e,t,n){if(e<12){return"ຕອນເຊົ້າ"}else{return"ຕອນແລງ"}},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(e){return"ທີ່"+e}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},n;function a(e,t,n,a){if(t){return"kelios sekundės"}else{return a?"kelių sekundžių":"kelias sekundes"}}function o(e,t,n,a){return t?s(n)[0]:a?s(n)[1]:s(n)[2]}function i(e){return e%10===0||e>10&&e<20}function s(e){return t[e].split("_")}function r(e,t,n,a){var r=e+" ";if(e===1){return r+o(e,t,n[0],a)}else if(t){return r+(i(e)?s(n)[1]:s(n)[0])}else{if(a){return r+s(n)[1]}else{return r+(i(e)?s(n)[1]:s(n)[2])}}}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:a,ss:r,m:o,mm:r,h:o,hh:r,d:o,dd:r,M:o,MM:r,y:o,yy:r},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var a={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")},t;function r(e,t,n){if(n){return t%10===1&&t%100!==11?e[2]:e[3]}else{return t%10===1&&t%100!==11?e[0]:e[1]}}function n(e,t,n){return e+" "+r(a[n],e,t)}function o(e,t,n){return r(a[n],e,t)}function i(e,t){return t?"dažas sekundes":"dažām sekundēm"}e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:i,ss:n,m:o,mm:n,h:o,hh:n,d:o,dd:n,M:o,MM:n,y:o,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var r={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return e===1?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,t,n){var a=r.words[n];if(n.length===1){return t?a[0]:a[1]}else{return e+" "+r.correctGrammaticalCase(e,a)}}},t;e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var e=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:r.translate,m:r.translate,mm:r.translate,h:r.translate,hh:r.translate,d:"dan",dd:r.translate,M:"mjesec",MM:r.translate,y:"godinu",yy:r.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"за %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"една минута",mm:"%d минути",h:"еден час",hh:"%d часа",d:"еден ден",dd:"%d дена",M:"еден месец",MM:"%d месеци",y:"една година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;if(e===0){return e+"-ев"}else if(n===0){return e+"-ен"}else if(n>10&&n<20){return e+"-ти"}else if(t===1){return e+"-ви"}else if(t===2){return e+"-ри"}else if(t===7||t===8){return e+"-ми"}else{return e+"-ти"}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:true,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,t){if(e===12){e=0}if(t==="രാത്രി"&&e>=4||t==="ഉച്ച കഴിഞ്ഞ്"||t==="വൈകുന്നേരം"){return e+12}else{return e}},meridiem:function(e,t,n){if(e<4){return"രാത്രി"}else if(e<12){return"രാവിലെ"}else if(e<17){return"ഉച്ച കഴിഞ്ഞ്"}else if(e<20){return"വൈകുന്നേരം"}else{return"രാത്രി"}}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){switch(n){case"s":return t?"хэдхэн секунд":"хэдхэн секундын";case"ss":return e+(t?" секунд":" секундын");case"m":case"mm":return e+(t?" минут":" минутын");case"h":case"hh":return e+(t?" цаг":" цагийн");case"d":case"dd":return e+(t?" өдөр":" өдрийн");case"M":case"MM":return e+(t?" сар":" сарын");case"y":case"yy":return e+(t?" жил":" жилийн");default:return e}}var n;e.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:true,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return e==="ҮХ"},meridiem:function(e,t,n){if(e<12){return"ҮӨ"}else{return"ҮХ"}},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+" өдөр";default:return e}}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},a;function r(e,t,n,a){var r="";if(t){switch(n){case"s":r="काही सेकंद";break;case"ss":r="%d सेकंद";break;case"m":r="एक मिनिट";break;case"mm":r="%d मिनिटे";break;case"h":r="एक तास";break;case"hh":r="%d तास";break;case"d":r="एक दिवस";break;case"dd":r="%d दिवस";break;case"M":r="एक महिना";break;case"MM":r="%d महिने";break;case"y":r="एक वर्ष";break;case"yy":r="%d वर्षे";break}}else{switch(n){case"s":r="काही सेकंदां";break;case"ss":r="%d सेकंदां";break;case"m":r="एका मिनिटा";break;case"mm":r="%d मिनिटां";break;case"h":r="एका तासा";break;case"hh":r="%d तासां";break;case"d":r="एका दिवसा";break;case"dd":r="%d दिवसां";break;case"M":r="एका महिन्या";break;case"MM":r="%d महिन्यां";break;case"y":r="एका वर्षा";break;case"yy":r="%d वर्षां";break}}return r.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:true,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="पहाटे"||t==="सकाळी"){return e}else if(t==="दुपारी"||t==="सायंकाळी"||t==="रात्री"){return e>=12?e:e+12}},meridiem:function(e,t,n){if(e>=0&&e<6){return"पहाटे"}else if(e<12){return"सकाळी"}else if(e<17){return"दुपारी"}else if(e<20){return"सायंकाळी"}else{return"रात्री"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="pagi"){return e}else if(t==="tengahari"){return e>=11?e:e+12}else if(t==="petang"||t==="malam"){return e+12}},meridiem:function(e,t,n){if(e<11){return"pagi"}else if(e<15){return"tengahari"}else if(e<19){return"petang"}else{return"malam"}},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="pagi"){return e}else if(t==="tengahari"){return e>=11?e:e+12}else if(t==="petang"||t==="malam"){return e+12}},meridiem:function(e,t,n){if(e<11){return"pagi"}else if(e<15){return"tengahari"}else if(e<19){return"petang"}else{return"malam"}},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"},a;e.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:true,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},a;e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:true,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="राति"){return e<4?e:e+12}else if(t==="बिहान"){return e}else if(t==="दिउँसो"){return e>=10?e:e+12}else if(t==="साँझ"){return e+12}},meridiem:function(e,t,n){if(e<3){return"राति"}else if(e<12){return"बिहान"}else if(e<16){return"दिउँसो"}else if(e<20){return"साँझ"}else{return"राति"}},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),t=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,o;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(e===1||e===8||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),t=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,o;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(e===1||e===8||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:true,weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._må._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("oc-lnc",{months:{standalone:"genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),format:"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:true,weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[uèi a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[ièr a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=e===1?"r":e===2?"n":e===3?"r":e===4?"t":"è";if(t==="w"||t==="W"){n="a"}return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"},a;e.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="ਰਾਤ"){return e<4?e:e+12}else if(t==="ਸਵੇਰ"){return e}else if(t==="ਦੁਪਹਿਰ"){return e>=10?e:e+12}else if(t==="ਸ਼ਾਮ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"ਰਾਤ"}else if(e<10){return"ਸਵੇਰ"}else if(e<17){return"ਦੁਪਹਿਰ"}else if(e<20){return"ਸ਼ਾਮ"}else{return"ਰਾਤ"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var n="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),a="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),t;function r(e){return e%10<5&&e%10>1&&~~(e/10)%10!==1}function o(e,t,n){var a=e+" ";switch(n){case"ss":return a+(r(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return a+(r(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return a+(r(e)?"godziny":"godzin");case"MM":return a+(r(e)?"miesiące":"miesięcy");case"yy":return a+(r(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,t){if(!e){return n}else if(t===""){return"("+a[e.month()]+"|"+n[e.month()]+")"}else if(/D MMMM/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:o,m:o,mm:o,h:o,hh:o,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:o,y:"rok",yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return this.day()===0||this.day()===6?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sáb".split("_"),weekdaysMin:"do_2ª_3ª_4ª_5ª_6ª_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return this.day()===0||this.day()===6?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n){var a={ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},r=" ";if(e%100>=20||e>=100&&e%100===0){r=" de "}return e+r+a[n]}var n;e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:true,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:t,m:"un minut",mm:t,h:"o oră",hh:t,d:"o zi",dd:t,M:"o lună",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function r(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function t(e,t,n){var a={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};if(n==="m"){return t?"минута":"минуту"}else{return e+" "+r(a[n],+e)}}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],a;e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()!==this.week()){switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}}else{if(this.day()===2){return"[Во] dddd, [в] LT"}else{return"[В] dddd, [в] LT"}}},lastWeek:function(e){if(e.week()!==this.week()){switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}}else{if(this.day()===2){return"[Во] dddd, [в] LT"}else{return"[В] dddd, [в] LT"}}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:t,m:t,mm:t,h:"час",hh:t,d:"день",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"ночи"}else if(e<12){return"утра"}else if(e<17){return"дня"}else{return"вечера"}},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"],a;e.defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){if(e<12){return"صبح"}return"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(e){return e+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return e==="ප.ව."||e==="පස් වරු"},meridiem:function(e,t,n){if(e>11){return n?"ප.ව.":"පස් වරු"}else{return n?"පෙ.ව.":"පෙර වරු"}}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),a;function o(e){return e>1&&e<5}function r(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"pár sekúnd":"pár sekundami";case"ss":if(t||a){return r+(o(e)?"sekundy":"sekúnd")}else{return r+"sekundami"}case"m":return t?"minúta":a?"minútu":"minútou";case"mm":if(t||a){return r+(o(e)?"minúty":"minút")}else{return r+"minútami"}case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":if(t||a){return r+(o(e)?"hodiny":"hodín")}else{return r+"hodinami"}case"d":return t||a?"deň":"dňom";case"dd":if(t||a){return r+(o(e)?"dni":"dní")}else{return r+"dňami"}case"M":return t||a?"mesiac":"mesiacom";case"MM":if(t||a){return r+(o(e)?"mesiace":"mesiacov")}else{return r+"mesiacmi"}case"y":return t||a?"rok":"rokom";case"yy":if(t||a){return r+(o(e)?"roky":"rokov")}else{return r+"rokmi"}}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function t(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"nekaj sekund":"nekaj sekundami";case"ss":if(e===1){r+=t?"sekundo":"sekundi"}else if(e===2){r+=t||a?"sekundi":"sekundah"}else if(e<5){r+=t||a?"sekunde":"sekundah"}else{r+="sekund"}return r;case"m":return t?"ena minuta":"eno minuto";case"mm":if(e===1){r+=t?"minuta":"minuto"}else if(e===2){r+=t||a?"minuti":"minutama"}else if(e<5){r+=t||a?"minute":"minutami"}else{r+=t||a?"minut":"minutami"}return r;case"h":return t?"ena ura":"eno uro";case"hh":if(e===1){r+=t?"ura":"uro"}else if(e===2){r+=t||a?"uri":"urama"}else if(e<5){r+=t||a?"ure":"urami"}else{r+=t||a?"ur":"urami"}return r;case"d":return t||a?"en dan":"enim dnem";case"dd":if(e===1){r+=t||a?"dan":"dnem"}else if(e===2){r+=t||a?"dni":"dnevoma"}else{r+=t||a?"dni":"dnevi"}return r;case"M":return t||a?"en mesec":"enim mesecem";case"MM":if(e===1){r+=t||a?"mesec":"mesecem"}else if(e===2){r+=t||a?"meseca":"mesecema"}else if(e<5){r+=t||a?"mesece":"meseci"}else{r+=t||a?"mesecev":"meseci"}return r;case"y":return t||a?"eno leto":"enim letom";case"yy":if(e===1){r+=t||a?"leto":"letom"}else if(e===2){r+=t||a?"leti":"letoma"}else if(e<5){r+=t||a?"leta":"leti"}else{r+=t||a?"let":"leti"}return r}}var n;e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:true,meridiemParse:/PD|MD/,isPM:function(e){return e.charAt(0)==="M"},meridiem:function(e,t,n){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var r={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return e===1?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,t,n){var a=r.words[n];if(n.length===1){return t?a[0]:a[1]}else{return e+" "+r.correctGrammaticalCase(e,a)}}},t;e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var e=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:r.translate,m:r.translate,mm:r.translate,h:r.translate,hh:r.translate,d:"dan",dd:r.translate,M:"mesec",MM:r.translate,y:"godinu",yy:r.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var r={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,t){return e===1?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,t,n){var a=r.words[n];if(n.length===1){return t?a[0]:a[1]}else{return e+" "+r.correctGrammaticalCase(e,a)}}},t;e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:true,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var e=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:r.translate,m:r.translate,mm:r.translate,h:r.translate,hh:r.translate,d:"дан",dd:r.translate,M:"месец",MM:r.translate,y:"годину",yy:r.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,n){if(e<11){return"ekuseni"}else if(e<15){return"emini"}else if(e<19){return"entsambama"}else{return"ebusuku"}},meridiemHour:function(e,t){if(e===12){e=0}if(t==="ekuseni"){return e}else if(t==="emini"){return e>=11?e:e+12}else if(t==="entsambama"||t==="ebusuku"){if(e===0){return 0}return e+12}},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?":e":t===1?":a":t===2?":a":t===3?":e":":e";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"},a;e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){if(e<2){return" யாமம்"}else if(e<6){return" வைகறை"}else if(e<10){return" காலை"}else if(e<14){return" நண்பகல்"}else if(e<18){return" எற்பாடு"}else if(e<22){return" மாலை"}else{return" யாமம்"}},meridiemHour:function(e,t){if(e===12){e=0}if(t==="யாமம்"){return e<2?e:e+12}else if(t==="வைகறை"||t==="காலை"){return e}else if(t==="நண்பகல்"){return e>=10?e:e+12}else{return e+12}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:true,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="రాత్రి"){return e<4?e:e+12}else if(t==="ఉదయం"){return e}else if(t==="మధ్యాహ్నం"){return e>=10?e:e+12}else if(t==="సాయంత్రం"){return e+12}},meridiem:function(e,t,n){if(e<4){return"రాత్రి"}else if(e<10){return"ఉదయం"}else if(e<17){return"మధ్యాహ్నం"}else if(e<20){return"సాయంత్రం"}else{return"రాత్రి"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var a={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"},t;e.defineLocale("tg",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Пагоҳ соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="шаб"){return e<4?e:e+12}else if(t==="субҳ"){return e}else if(t==="рӯз"){return e>=11?e:e+12}else if(t==="бегоҳ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"шаб"}else if(e<11){return"субҳ"}else if(e<16){return"рӯз"}else if(e<19){return"бегоҳ"}else{return"шаб"}},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:true,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return e==="หลังเที่ยง"},meridiem:function(e,t,n){if(e<12){return"ก่อนเที่ยง"}else{return"หลังเที่ยง"}},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var o="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_"),t;function n(e){var t=e;t=e.indexOf("jaj")!==-1?t.slice(0,-3)+"leS":e.indexOf("jar")!==-1?t.slice(0,-3)+"waQ":e.indexOf("DIS")!==-1?t.slice(0,-3)+"nem":t+" pIq";return t}function a(e){var t=e;t=e.indexOf("jaj")!==-1?t.slice(0,-3)+"Hu’":e.indexOf("jar")!==-1?t.slice(0,-3)+"wen":e.indexOf("DIS")!==-1?t.slice(0,-3)+"ben":t+" ret";return t}function r(e,t,n,a){var r=i(e);switch(n){case"ss":return r+" lup";case"mm":return r+" tup";case"hh":return r+" rep";case"dd":return r+" jaj";case"MM":return r+" jar";case"yy":return r+" DIS"}}function i(e){var t=Math.floor(e%1e3/100),n=Math.floor(e%100/10),a=e%10,r="";if(t>0){r+=o[t]+"vatlh"}if(n>0){r+=(r!==""?" ":"")+o[n]+"maH"}if(a>0){r+=(r!==""?" ":"")+o[a]}return r===""?"pagh":r}e.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:true,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:n,past:a,s:"puS lup",ss:r,m:"wa’ tup",mm:r,h:"wa’ rep",hh:r,d:"wa’ jaj",dd:r,M:"wa’ jar",MM:r,y:"wa’ DIS",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var o={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"},t;e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(e===0){return e+"'ıncı"}var n=e%10,a=e%100-n,r=e>=100?100:null;return e+(o[n]||o[a]||o[r])}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;function n(e,t,n,a){var r={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",""+e+" secunds"],m:["'n míut","'iens míut"],mm:[e+" míuts",""+e+" míuts"],h:["'n þora","'iensa þora"],hh:[e+" þoras",""+e+" þoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",""+e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",""+e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",""+e+" ars"]};return a?r[n][0]:t?r[n][0]:r[n][1]}e.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,t,n){if(e>11){return n?"d'o":"D'O"}else{return n?"d'a":"D'A"}},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js language configuration -var t;e.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="يېرىم كېچە"||t==="سەھەر"||t==="چۈشتىن بۇرۇن"){return e}else if(t==="چۈشتىن كېيىن"||t==="كەچ"){return e+12}else{return e>=11?e:e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"يېرىم كېچە"}else if(a<900){return"سەھەر"}else if(a<1130){return"چۈشتىن بۇرۇن"}else if(a<1230){return"چۈش"}else if(a<1800){return"چۈشتىن كېيىن"}else{return"كەچ"}},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -function r(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function t(e,t,n){var a={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};if(n==="m"){return t?"хвилина":"хвилину"}else if(n==="h"){return t?"година":"годину"}else{return e+" "+r(a[n],+e)}}function n(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},a;if(e===true){return n["nominative"].slice(1,7).concat(n["nominative"].slice(0,1))}if(!e){return n["nominative"]}a=/(\[[ВвУу]\]) ?dddd/.test(t)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(t)?"genitive":"nominative";return n[a][e.day()]}function a(e){return function(){return e+"о"+(this.hours()===11?"б":"")+"] LT"}}var o;e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:n,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:a("[Сьогодні "),nextDay:a("[Завтра "),lastDay:a("[Вчора "),nextWeek:a("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return a("[Минулої] dddd [").call(this);case 1:case 2:case 4:return a("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:t,m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"ночі"}else if(e<12){return"ранку"}else if(e<17){return"дня"}else{return"вечора"}},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"],a;e.defineLocale("ur",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){if(e<12){return"صبح"}return"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:true,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:true,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){if(e<12){return n?"sa":"SA"}else{return n?"ch":"CH"}},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần trước lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:true,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="凌晨"||t==="早上"||t==="上午"){return e}else if(t==="下午"||t==="晚上"){return e+12}else{return e>=11?e:e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"凌晨"}else if(a<900){return"早上"}else if(a<1130){return"上午"}else if(a<1230){return"中午"}else if(a<1800){return"下午"}else{return"晚上"}},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s后",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="凌晨"||t==="早上"||t==="上午"){return e}else if(t==="中午"){return e>=11?e:e+12}else if(t==="下午"||t==="晚上"){return e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"凌晨"}else if(a<900){return"早上"}else if(a<1200){return"上午"}else if(a===1200){return"中午"}else if(a<1800){return"下午"}else{return"晚上"}},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("zh-mo",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"D/M/YYYY",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="凌晨"||t==="早上"||t==="上午"){return e}else if(t==="中午"){return e>=11?e:e+12}else if(t==="下午"||t==="晚上"){return e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"凌晨"}else if(a<900){return"早上"}else if(a<1130){return"上午"}else if(a<1230){return"中午"}else if(a<1800){return"下午"}else{return"晚上"}},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(8))},function(e,t,n){!function(e){"use strict"; -//! moment.js locale configuration -var t;e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="凌晨"||t==="早上"||t==="上午"){return e}else if(t==="中午"){return e>=11?e:e+12}else if(t==="下午"||t==="晚上"){return e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"凌晨"}else if(a<900){return"早上"}else if(a<1130){return"上午"}else if(a<1230){return"中午"}else if(a<1800){return"下午"}else{return"晚上"}},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(8))},function(e,t,n){"use strict";t.__esModule=!0;var a,r,w=p(n(4)),o=p(n(3)),i=p(n(5)),s=p(n(6)),l=n(0),M=p(l),u=p(n(2)),d=n(28),k=p(n(12)),c=p(n(42)),x=p(n(23)),S=p(n(116)),f=p(n(7)),E=n(11);function p(e){return e&&e.__esModule?e:{default:e}}function h(){}var m,g=(m=l.Component,(0,s.default)(T,m),T.getDerivedStateFromProps=function(e){return"visible"in e?{visible:e.visible}:{}},T.prototype.render=function(){var e,t=this.props,n=t.prefix,a=(t.pure,t.className),r=t.style,o=t.type,i=t.shape,s=t.size,l=t.title,u=t.children,d=(t.defaultVisible,t.visible,t.iconType),c=t.closeable,f=(t.onClose,t.afterClose),p=t.animation,h=t.rtl,m=t.locale,g=(0,w.default)({},E.obj.pickOthers(Object.keys(T.propTypes),this.props)),y=this.state.visible,v=n+"message",_=(0,k.default)(((e={})[v]=!0,e[n+"message-"+o]=o,e[""+n+i]=i,e[""+n+s]=s,e[n+"title-content"]=!!l,e[n+"only-content"]=!l&&!!u,e[a]=a,e)),b=y?M.default.createElement("div",(0,w.default)({role:"alert",style:r},g,{className:_,dir:h?"rtl":void 0}),c?M.default.createElement("a",{role:"button","aria-label":m.closeAriaLabel,className:v+"-close",onClick:this.onClose},M.default.createElement(x.default,{type:"close"})):null,M.default.createElement(x.default,{className:v+"-symbol "+(!d&&v+"-symbol-icon"),type:d}),l?M.default.createElement("div",{className:v+"-title"},l):null,u?M.default.createElement("div",{className:v+"-content"},u):null):null;return p?M.default.createElement(S.default.Expand,{animationAppear:!1,afterLeave:f},b):b},r=a=T,a.propTypes={prefix:u.default.string,pure:u.default.bool,className:u.default.string,style:u.default.object,type:u.default.oneOf(["success","warning","error","notice","help","loading"]),shape:u.default.oneOf(["inline","addon","toast"]),size:u.default.oneOf(["medium","large"]),title:u.default.node,children:u.default.node,defaultVisible:u.default.bool,visible:u.default.bool,iconType:u.default.string,closeable:u.default.bool,onClose:u.default.func,afterClose:u.default.func,animation:u.default.bool,locale:u.default.object,rtl:u.default.bool},a.defaultProps={prefix:"next-",pure:!1,type:"success",shape:"inline",size:"medium",defaultVisible:!0,closeable:!1,onClose:h,afterClose:h,animation:!0,locale:c.default.Message},r);function T(){var e,t;(0,o.default)(this,T);for(var n=arguments.length,a=Array(n),r=0;re.clientHeight&&0this.popupNode.offsetWidth&&m(this.popupNode,"width",e.offsetWidth+"px"),"outside"!==d||"hoz"===u&&1===a||(m(this.popupNode,"height",p.offsetHeight+"px"),m(this.popupNode,"overflow-y","scroll"));var h=this.popupProps;h.onOpen&&h.onOpen()},j.prototype.handlePopupClose=function(){var e=this.props.root.popupNodes,t=e.indexOf(this.popupNode);-1 "+this.message+" (line "+this.parsedLine+": '"+this.snippet+"')":" "+this.message},e.exports=n},function(e,t){var r={}.hasOwnProperty;function n(e,t,n){this.message=e,this.parsedLine=t,this.snippet=n}(function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function a(){this.constructor=e}a.prototype=t.prototype,e.prototype=new a,e.__super__=t.prototype})(n,Error),n.prototype.toString=function(){return null!=this.parsedLine&&null!=this.snippet?" "+this.message+" (line "+this.parsedLine+": '"+this.snippet+"')":" "+this.message},e.exports=n},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var a,r,x=m(n(4)),o=m(n(3)),i=m(n(5)),s=m(n(6)),l=n(0),S=m(l),u=n(24),d=m(n(2)),E=m(n(12)),c=n(11),v=m(n(50)),f=m(n(63)),T=m(n(10)),p=m(n(42)),h=m(n(629)),_=m(n(630)),b=n(160);function m(e){return e&&e.__esModule?e:{default:e}}var L=f.default.Popup,g=v.default.Item,y=v.default.Group,w=c.func.noop,M=c.func.bindCtx,C=c.func.makeChain;function k(e){e.preventDefault()}var D,O=(D=S.default.Component,(0,s.default)(N,D),N.prototype.componentDidMount=function(){var e=this;setTimeout(function(){return e.syncWidth()},0),c.events.on(window,"resize",this.handleResize)},N.prototype.componentDidUpdate=function(e,t){e.label===this.props.label&&t.value===this.state.value||this.syncWidth()},N.prototype.componentWillUnmount=function(){c.events.off(window,"resize",this.handleResize),clearTimeout(this.resizeTimeout)},N.prototype.syncWidth=function(){var e,t=this,n=this.props,a=n.popupStyle,r=n.popupProps;a&&"width"in a||r&&r.style&&"width"in r.style||(e=c.dom.getStyle(this.selectDOM,"width"))&&this.width!==e&&(this.width=e,this.popupRef&&this.shouldAutoWidth()&&setTimeout(function(){t.popupRef&&t.popupRef.getInstance().overlay&&c.dom.setStyle(t.popupRef.getInstance().overlay.getInstance().getContentNode(),"width",t.width)},0))},N.prototype.handleResize=function(){var e=this;clearTimeout(this.resizeTimeout),this.state.visible&&(this.resizeTimeout=setTimeout(function(){e.syncWidth()},200))},N.prototype.setDataSource=function(e){var t=e.dataSource,n=e.children;return l.Children.count(n)?this.dataStore.updateByDS(n,!0):Array.isArray(t)?this.dataStore.updateByDS(t,!1):[]},N.prototype.setVisible=function(e,t){this.props.disabled||this.state.visible===e||("visible"in this.props||this.setState({visible:e}),this.props.onVisibleChange(e,t))},N.prototype.setFirstHightLightKeyForMenu=function(){var e;this.props.autoHighlightFirstItem&&this.dataStore.getMenuDS().length&&this.dataStore.getEnableDS().length&&(e=""+this.dataStore.getEnableDS()[0].value,this.setState({highlightKey:e}),this.props.onToggleHighlightItem(e,"autoFirstItem"))},N.prototype.handleChange=function(e){var t;"value"in this.props||this.setState({value:e});for(var n=arguments.length,a=Array(1e.slidesToShow&&(a=e.slideWidth*e.slidesToShow*-1,i=e.slideHeight*e.slidesToShow*-1),e.slideCount%e.slidesToScroll!=0&&(t=e.slideIndex+e.slidesToScroll>e.slideCount&&e.slideCount>e.slidesToShow,e.rtl&&(t=(e.slideIndex>=e.slideCount?e.slideCount-e.slideIndex:e.slideIndex)+e.slidesToScroll>e.slideCount&&e.slideCount>e.slidesToShow),t&&(i=e.slideIndex>e.slideCount?(a=(e.slidesToShow-(e.slideIndex-e.slideCount))*e.slideWidth*-1,(e.slidesToShow-(e.slideIndex-e.slideCount))*e.slideHeight*-1):(a=e.slideCount%e.slidesToScroll*e.slideWidth*-1,e.slideCount%e.slidesToScroll*e.slideHeight*-1)))):e.slideCount%e.slidesToScroll!=0&&e.slideIndex+e.slidesToScroll>e.slideCount&&e.slideCount>e.slidesToShow&&(a=(e.slidesToShow-e.slideCount%e.slidesToScroll)*e.slideWidth),e.centerMode&&(e.infinite?a+=e.slideWidth*Math.floor(e.slidesToShow/2):a=e.slideWidth*Math.floor(e.slidesToShow/2)),r=e.vertical?e.slideIndex*e.slideHeight*-1+i:e.slideIndex*e.slideWidth*-1+a,!0===e.variableWidth&&(n=void 0,r=(o=e.slideCount<=e.slidesToShow||!1===e.infinite?s.default.findDOMNode(e.trackRef).childNodes[e.slideIndex]:(n=e.slideIndex+e.slidesToShow,s.default.findDOMNode(e.trackRef).childNodes[n]))?-1*o.offsetLeft:0,!0===e.centerMode&&(o=!1===e.infinite?s.default.findDOMNode(e.trackRef).children[e.slideIndex]:s.default.findDOMNode(e.trackRef).children[e.slideIndex+e.slidesToShow+1])&&(r=-1*o.offsetLeft+(e.listWidth-o.offsetWidth)/2)),r)}},function(e,t,n){"use strict";t.__esModule=!0;var a,r,y=c(n(4)),v=c(n(18)),o=c(n(3)),i=c(n(5)),s=c(n(6)),_=c(n(0)),l=c(n(2)),b=c(n(12)),u=c(n(7)),w=c(n(23)),d=n(11);function c(e){return e&&e.__esModule?e:{default:e}}var f,p=(f=_.default.Component,(0,s.default)(h,f),h.prototype.render=function(){var e,t,n=this.props,a=n.title,r=n.children,o=n.className,i=n.isExpanded,s=n.disabled,l=n.style,u=n.prefix,d=n.onClick,c=n.id,f=(0,v.default)(n,["title","children","className","isExpanded","disabled","style","prefix","onClick","id"]),p=(0,b.default)(((e={})[u+"collapse-panel"]=!0,e[u+"collapse-panel-hidden"]=!i,e[u+"collapse-panel-expanded"]=i,e[u+"collapse-panel-disabled"]=s,e[o]=o,e)),h=(0,b.default)(((t={})[u+"collapse-panel-icon"]=!0,t[u+"collapse-panel-icon-expanded"]=i,t)),m=c?c+"-heading":void 0,g=c?c+"-region":void 0;return _.default.createElement("div",(0,y.default)({className:p,style:l,id:c},f),_.default.createElement("div",{id:m,className:u+"collapse-panel-title",onClick:d,onKeyDown:this.onKeyDown,tabIndex:"0","aria-disabled":s,"aria-expanded":i,"aria-controls":g,role:"button"},_.default.createElement(w.default,{type:"arrow-right",className:h,"aria-hidden":"true"}),a),_.default.createElement("div",{className:u+"collapse-panel-content",role:"region",id:g},r))},r=a=h,a.propTypes={prefix:l.default.string,style:l.default.object,children:l.default.any,isExpanded:l.default.bool,disabled:l.default.bool,title:l.default.node,className:l.default.string,onClick:l.default.func,id:l.default.string},a.defaultProps={prefix:"next-",isExpanded:!1,onClick:d.func.noop},a.isNextPanel=!0,r);function h(){var e,n;(0,o.default)(this,h);for(var t=arguments.length,a=Array(t),r=0;r\n com.alibaba.nacos\n nacos-client\n ${version}\n
\n*/\npackage com.alibaba.nacos.example;\n\nimport java.util.Properties;\nimport java.util.concurrent.Executor;\nimport com.alibaba.nacos.api.NacosFactory;\nimport com.alibaba.nacos.api.config.ConfigService;\nimport com.alibaba.nacos.api.config.listener.Listener;\nimport com.alibaba.nacos.api.exception.NacosException;\n\n/**\n * Config service example\n * \n * @author Nacos\n *\n */\npublic class ConfigExample {\n\n\tpublic static void main(String[] args) throws NacosException, InterruptedException {\n\t\tString serverAddr = "localhost";\n\t\tString dataId = "'.concat(e.dataId,'";\n\t\tString group = "').concat(e.group,'";\n\t\tProperties properties = new Properties();\n\t\tproperties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);\n\t\tConfigService configService = NacosFactory.createConfigService(properties);\n\t\tString content = configService.getConfig(dataId, group, 5000);\n\t\tSystem.out.println(content);\n\t\tconfigService.addListener(dataId, group, new Listener() {\n\t\t\t@Override\n\t\t\tpublic void receiveConfigInfo(String configInfo) {\n\t\t\t\tSystem.out.println("recieve:" + configInfo);\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic Executor getExecutor() {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t\t\n\t\tboolean isPublishOk = configService.publishConfig(dataId, group, "content");\n\t\tSystem.out.println(isPublishOk);\n\t\t\n\t\tThread.sleep(3000);\n\t\tcontent = configService.getConfig(dataId, group, 5000);\n\t\tSystem.out.println(content);\n\n\t\tboolean isRemoveOk = configService.removeConfig(dataId, group);\n\t\tSystem.out.println(isRemoveOk);\n\t\tThread.sleep(3000);\n\n\t\tcontent = configService.getConfig(dataId, group, 5000);\n\t\tSystem.out.println(content);\n\t\tThread.sleep(300000);\n\n\t}\n}\n')}},{key:"getNodejsCode",value:function(){return"TODO"}},{key:"getCppCode",value:function(){return"TODO"}},{key:"getShellCode",value:function(){return"TODO"}},{key:"getPythonCode",value:function(){return"TODO"}},{key:"openDialog",value:function(e){var t=this;this.setState({dialogvisible:!0}),this.record=e,setTimeout(function(){t.getData()})}},{key:"closeDialog",value:function(){this.setState({dialogvisible:!1})}},{key:"createCodeMirror",value:function(e,t){var n=this.refs.codepreview;n&&(n.innerHTML="",this.cm=window.CodeMirror(n,{value:t,mode:e,height:400,width:500,lineNumbers:!0,theme:"xq-light",lint:!0,tabMode:"indent",autoMatchParens:!0,textWrapping:!0,gutters:["CodeMirror-lint-markers"],extraKeys:{F1:function(e){e.setOption("fullScreen",!e.getOption("fullScreen"))},Esc:function(e){e.getOption("fullScreen")&&e.setOption("fullScreen",!1)}}}))}},{key:"changeTab",value:function(e,t){var n=this;setTimeout(function(){n[e]=!0,n.createCodeMirror("text/javascript",t)})}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=Z.a.createElement("div",null);return Z.a.createElement("div",null,Z.a.createElement(F.a,{title:t.sampleCode,style:{width:"80%"},visible:this.state.dialogvisible,footer:n,onClose:this.closeDialog.bind(this)},Z.a.createElement("div",{style:{height:500}},Z.a.createElement(ie.a,{tip:t.loading,style:{width:"100%"},visible:this.state.loading},Z.a.createElement(le.a,{shape:"text",style:{height:40,paddingBottom:10}},Z.a.createElement(ue,{title:"Java",key:1,onClick:this.changeTab.bind(this,"commoneditor1",this.defaultCode)}),Z.a.createElement(ue,{title:"Spring Boot",key:2,onClick:this.changeTab.bind(this,"commoneditor2",this.sprigboot_code)}),Z.a.createElement(ue,{title:"Spring Cloud",key:21,onClick:this.changeTab.bind(this,"commoneditor21",this.sprigcloud_code)}),Z.a.createElement(ue,{title:"Node.js",key:3,onClick:this.changeTab.bind(this,"commoneditor3",this.nodejsCode)}),Z.a.createElement(ue,{title:"C++",key:4,onClick:this.changeTab.bind(this,"commoneditor4",this.cppCode)}),Z.a.createElement(ue,{title:"Shell",key:5,onClick:this.changeTab.bind(this,"commoneditor5",this.shellCode)}),Z.a.createElement(ue,{title:"Python",key:6,onClick:this.changeTab.bind(this,"commoneditor6",this.pythonCode)})),Z.a.createElement("div",{ref:"codepreview"})))))}}]),a}(Z.a.Component),r.displayName="ShowCodeing",a=o))||a,ce=(n(66),n(37)),fe=n.n(ce),pe=(n(673),fe.a.Row),he=fe.a.Col,me=(0,J.a.config)((l=s=function(e){Object(K.a)(a,e);var n=Object(q.a)(a);function a(e){var t;return Object(B.a)(this,a),(t=n.call(this,e)).state={visible:!1,title:"",content:"",isok:!0,dataId:"",group:""},t}return Object(V.a)(a,[{key:"componentDidMount",value:function(){this.initData()}},{key:"initData",value:function(){var e=this.props.locale,t=void 0===e?{}:e;this.setState({title:t.confManagement})}},{key:"openDialog",value:function(e){this.setState({visible:!0,title:e.title,content:e.content,isok:e.isok,dataId:e.dataId,group:e.group,message:e.message})}},{key:"closeDialog",value:function(){this.setState({visible:!1})}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=Z.a.createElement("div",{style:{textAlign:"right"}},Z.a.createElement(M.a,{type:"primary",onClick:this.closeDialog.bind(this)},t.determine));return Z.a.createElement("div",null,Z.a.createElement(F.a,{visible:this.state.visible,footer:n,style:{width:555},onCancel:this.closeDialog.bind(this),onClose:this.closeDialog.bind(this),title:t.deletetitle},Z.a.createElement("div",null,Z.a.createElement(pe,null,Z.a.createElement(he,{span:"4",style:{paddingTop:16}},Z.a.createElement(I.a,{type:"".concat(this.state.isok?"success":"delete","-filling"),style:{color:this.state.isok?"green":"red"},size:"xl"})),Z.a.createElement(he,{span:"20"},Z.a.createElement("div",null,Z.a.createElement("h3",null,this.state.isok?t.deletedSuccessfully:t.deleteFailed),Z.a.createElement("p",null,Z.a.createElement("span",{style:{color:"#999",marginRight:5}},"Data ID:"),Z.a.createElement("span",{style:{color:"#c7254e"}},this.state.dataId)),Z.a.createElement("p",null,Z.a.createElement("span",{style:{color:"#999",marginRight:5}},"Group:"),Z.a.createElement("span",{style:{color:"#c7254e"}},this.state.group)),this.state.isok?"":Z.a.createElement("p",{style:{color:"red"}},this.state.message)))))))}}]),a}(Z.a.Component),s.displayName="DeleteDialog",i=l))||i,ge=(n(674),n(399)),ye=n.n(ge),ve=(0,J.a.config)((c=d=function(e){Object(K.a)(n,e);var t=Object(q.a)(n);function n(){return Object(B.a)(this,n),t.apply(this,arguments)}return Object(V.a)(n,[{key:"render",value:function(){var e=this.props,t=e.data,n=void 0===t?{}:t,a=e.height,r=e.locale,o=void 0===r?{}:r;return Z.a.createElement("div",null,"notice"===n.modeType?Z.a.createElement("div",{"data-spm-click":"gostr=/aliyun;locaid=notice"},Z.a.createElement(ye.a,{style:{marginBottom:1u?P.a.createElement(G.a,{className:"pagination",total:l.count,pageSize:u,onChange:function(e){return a.onChangePage(e)}}):null,P.a.createElement(X,{ref:this.editInstanceDialog,serviceName:o,clusterName:n,groupName:i,openLoading:function(){return a.openLoading()},closeLoading:function(){return a.closeLoading()},getInstanceList:function(){return a.getInstanceList()}})):null}}]),a}(P.a.Component),d.displayName="InstanceTable",u=c))||u,Z=n(46),ee=(n(697),N.a.Item),te={labelCol:{fixedSpan:10},wrapperCol:{span:14}},ne=(0,D.a.config)((h=p=function(e){Object(T.a)(a,e);var n=Object(L.a)(a);function a(e){var t;return Object(S.a)(this,a),(t=n.call(this,e)).editServiceDialog=P.a.createRef(),t.editClusterDialog=P.a.createRef(),t.state={serviceName:Object(Z.b)(e.location.search,"name"),groupName:Object(Z.b)(e.location.search,"groupName"),loading:!1,currentPage:1,clusters:[],instances:{},service:{},pageSize:10,pageNum:{}},t}return Object(E.a)(a,[{key:"componentDidMount",value:function(){this.state.serviceName?this.getServiceDetail():this.props.history.goBack()}},{key:"getServiceDetail",value:function(){var o=this,e=this.state,t=e.serviceName,n=e.groupName;Object(j.c)({url:"v1/ns/catalog/service?serviceName=".concat(t,"&groupName=").concat(n),beforeSend:function(){return o.openLoading()},success:function(e){var t=e.clusters,n=void 0===t?[]:t,a=e.service,r=void 0===a?{}:a;return o.setState({service:r,clusters:n})},error:function(e){return k.a.error(e.responseText||"error")},complete:function(){return o.closeLoading()}})}},{key:"openLoading",value:function(){this.setState({loading:!0})}},{key:"closeLoading",value:function(){this.setState({loading:!1})}},{key:"openEditServiceDialog",value:function(){this.editServiceDialog.current.getInstance().show(this.state.service)}},{key:"openClusterDialog",value:function(e){this.editClusterDialog.current.getInstance().show(e)}},{key:"render",value:function(){var t=this,e=this.props.locale,n=void 0===e?{}:e,a=this.state,r=a.serviceName,o=a.groupName,i=a.loading,s=a.service,l=void 0===s?{}:s,u=a.clusters,d=l.metadata,c=void 0===d?{}:d,f=l.selector,p=void 0===f?{}:f,h="";return Object.keys(c).length&&(h=JSON.stringify(c,null,"\t")),P.a.createElement("div",{className:"main-container service-detail"},P.a.createElement(g.a,{shape:"flower",tip:"Loading...",className:"loading",visible:i,color:"#333"},P.a.createElement("h1",{style:{position:"relative",width:"100%"}},n.serviceDetails,P.a.createElement(w.a,{type:"primary",className:"header-btn",onClick:function(){return t.props.history.goBack()}},n.back),P.a.createElement(w.a,{type:"normal",className:"header-btn",onClick:function(){return t.openEditServiceDialog()}},n.editService)),P.a.createElement(N.a,te,P.a.createElement(ee,{label:"".concat(n.serviceName,":")},P.a.createElement(x.a,{value:l.name,readOnly:!0})),P.a.createElement(ee,{label:"".concat(n.groupName,":")},P.a.createElement(x.a,{value:l.groupName,readOnly:!0})),P.a.createElement(ee,{label:"".concat(n.protectThreshold,":")},P.a.createElement(x.a,{value:l.protectThreshold,readOnly:!0})),P.a.createElement(ee,{label:"".concat(n.metadata,":")},P.a.createElement(U.a,{language:"json",width:"100%",height:200,value:h,options:V.c})),P.a.createElement(ee,{label:"".concat(n.type,":")},P.a.createElement(x.a,{value:p.type,readOnly:!0})),"label"===l.type&&P.a.createElement(ee,{label:"".concat(n.selector,":")},P.a.createElement(x.a,{value:p.selector,readOnly:!0}))),u.map(function(e){return P.a.createElement(v.a,{key:e.name,className:"cluster-card",title:"".concat(n.cluster,":"),subTitle:e.name,contentHeight:"auto",extra:P.a.createElement(w.a,{type:"normal",onClick:function(){return t.openClusterDialog(e)}},n.editCluster)},P.a.createElement(Q,{clusterName:e.name,serviceName:r,groupName:o}))})),P.a.createElement(I.a,{ref:this.editServiceDialog,openLoading:function(){return t.openLoading()},closeLoading:function(){return t.closeLoading()},getServiceDetail:function(){return t.getServiceDetail()}}),P.a.createElement(K,{ref:this.editClusterDialog,openLoading:function(){return t.openLoading()},closeLoading:function(){return t.closeLoading()},getServiceDetail:function(){return t.getServiceDetail()}}))}}]),a}(P.a.Component),p.displayName="ServiceDetail",f=h))||f;t.a=ne},function(e,t,d){"use strict";d(48);var n,a,r,o,i,s,l=d(30),y=d.n(l),u=(d(31),d(20)),v=d.n(u),c=(d(375),d(130)),_=d.n(c),f=(d(40),d(23)),b=d.n(f),p=(d(118),d(80)),w=d.n(p),h=(d(102),d(69)),M=d.n(h),m=(d(68),d(33)),k=d.n(m),g=(d(41),d(9)),x=d.n(g),S=(d(36),d(10)),E=d.n(S),T=(d(123),d(57)),L=d.n(T),C=d(58),D=d(21),O=(d(35),d(19)),N=d.n(O),Y=(d(52),d(27)),P=d.n(Y),j=d(13),I=d(14),A=d(16),R=d(15),H=(d(25),d(7)),F=d.n(H),z=(d(66),d(37)),W=d.n(z),B=d(0),V=d.n(B),U=d(1),K=d(46),q=d(39),G=d(129),J=d(96),$=(d(644),W.a.Row),X=W.a.Col,Q=(0,F.a.config)((r=a=function(e){Object(A.a)(a,e);var n=Object(R.a)(a);function a(e){var t;return Object(j.a)(this,a),(t=n.call(this,e)).diffeditor=V.a.createRef(),t.state={dialogvisible:!1},t}return Object(I.a)(a,[{key:"openDialog",value:function(e,t){var n=this;this.setState({dialogvisible:!0}),setTimeout(function(){n.createDiffCodeMirror(e,t)})}},{key:"closeDialog",value:function(){this.setState({dialogvisible:!1})}},{key:"createDiffCodeMirror",value:function(e,t){var n=this.diffeditor.current;n.innerHTML="",this.diffeditor=window.CodeMirror.MergeView(n,{value:e||"",readOnly:!0,origLeft:null,orig:t||"",lineNumbers:!0,mode:this.mode,theme:"xq-light",highlightDifferences:!0,connect:"align",collapseIdentical:!1})}},{key:"confirmPub",value:function(){this.closeDialog(),this.props.publishConfig()}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=V.a.createElement("div",null," ",V.a.createElement(v.a,{type:"primary",onClick:this.confirmPub.bind(this)},t.publish));return V.a.createElement("div",null,V.a.createElement(N.a,{title:t.contents,style:{width:"80%"},visible:this.state.dialogvisible,footer:n,onClose:this.closeDialog.bind(this)},V.a.createElement("div",{style:{height:400}},V.a.createElement("div",null,V.a.createElement($,null,V.a.createElement(X,{style:{textAlign:"center"}},t.currentArea),V.a.createElement(X,{style:{textAlign:"center"}},t.originalValue))),V.a.createElement("div",{style:{clear:"both",height:480},ref:this.diffeditor}))))}}]),a}(V.a.Component),a.displayName="DiffEditorDialog",n=r))||n,Z=(d(645),d(646),d(166),W.a.Row),ee=W.a.Col,te=[{value:"text",label:"TEXT"},{value:"json",label:"JSON"},{value:"xml",label:"XML"},{value:"yaml",label:"YAML"},{value:"html",label:"HTML"},{value:"properties",label:"Properties"}],ne=["production","beta"],ae=(0,F.a.config)((s=i=function(e){Object(A.a)(a,e);var n=Object(R.a)(a);function a(e){var t;return Object(j.a)(this,a),(t=n.call(this,e)).state={loading:!1,isBeta:!1,isNewConfig:!0,betaPublishSuccess:!1,betaIps:"",tabActiveKey:"",form:{dataId:"",group:"",content:"",appName:"",desc:"",config_tags:[],type:"text"},tagDataSource:[],openAdvancedSettings:!1},t.successDialog=V.a.createRef(),t.diffEditorDialog=V.a.createRef(),t}return Object(I.a)(a,[{key:"componentDidMount",value:function(){var t=this,e=!Object(U.b)("dataId"),n=Object(U.b)("group").trim();this.setState({isNewConfig:e},function(){e?(n&&t.setState({group:n}),t.initMoacoEditor("text","")):t.changeForm({dataId:Object(U.b)("dataId").trim(),group:n},function(){t.getConfig(!0).then(function(e){e?t.setState({isBeta:!0,tabActiveKey:"beta",betaPublishSuccess:!0}):t.getConfig()})})})}},{key:"initMoacoEditor",value:function(e,t){var n=this,a=document.getElementById("container");a.innerHTML="";var r={value:t,language:e,codeLens:!(this.monacoEditor=null),selectOnLineNumbers:!0,roundedSelection:!1,readOnly:!1,lineNumbersMinChars:!0,theme:"vs-dark",wordWrapColumn:120,folding:!1,showFoldingControls:"always",wordWrap:"wordWrapColumn",cursorStyle:"line",automaticLayout:!0};window.monaco?this.monacoEditor=window.monaco.editor.create(a,r):window.importEditor(function(){n.monacoEditor=window.monaco.editor.create(a,r)})}},{key:"createDiffCodeMirror",value:function(e,t){var n=this.diffEditorDialog.current.getInstance();n.innerHTML="",this.diffeditor=window.CodeMirror.MergeView(n,{value:e||"",origLeft:null,orig:t||"",lineNumbers:!0,mode:this.mode,theme:"xq-light",highlightDifferences:!0,connect:"align",collapseIdentical:!1})}},{key:"openDiff",value:function(e){this.diffcb=e;var t=this.monacoEditor.getValue(),n=this.codeVal||"",t=t.replace(/\r\n/g,"\n").replace(/\n/g,"\r\n"),n=n.replace(/\r\n/g,"\n").replace(/\n/g,"\r\n");this.diffEditorDialog.current.getInstance().openDialog(t,n)}},{key:"clickTab",value:function(e){var t=this;this.setState({tabActiveKey:e},function(){return t.getConfig("beta"===e)})}},{key:"getCodeVal",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=this.state.form,a=(n.type,n.content),r=this.monacoEditor?this.monacoEditor.getValue():a;return r||(P.a.error({content:t.submitFailed,align:"cc cc"}),!1)}},{key:"publish",value:function(){var n=this,e=this.props.locale,a=void 0===e?{}:e,t=this.state.form.type;this.state.isNewConfig&&this.validation();var r=this.getCodeVal();if(r)return G.a.validate({content:r,type:t})?this._publishConfig():new Promise(function(e,t){N.a.confirm({content:a.codeValErrorPrompt,onOk:function(){return e(n._publishConfig())},onCancel:function(){return e(!1)}})})}},{key:"_publishConfig",value:function(e){var t=this,n=0\n com.alibaba.nacos\n nacos-client\n ${latest.version}\n
\n*/\npackage com.alibaba.nacos.example;\n\nimport java.util.Properties;\n\nimport com.alibaba.nacos.api.exception.NacosException;\nimport com.alibaba.nacos.api.naming.NamingFactory;\nimport com.alibaba.nacos.api.naming.NamingService;\nimport com.alibaba.nacos.api.naming.listener.Event;\nimport com.alibaba.nacos.api.naming.listener.EventListener;\nimport com.alibaba.nacos.api.naming.listener.NamingEvent;\n\n/**\n * @author nkorange\n */\npublic class NamingExample {\n\n public static void main(String[] args) throws NacosException {\n\n Properties properties = new Properties();\n properties.setProperty("serverAddr", System.getProperty("serverAddr"));\n properties.setProperty("namespace", System.getProperty("namespace"));\n\n NamingService naming = NamingFactory.createNamingService(properties);\n\n naming.registerInstance("'.concat(this.record.name,'", "11.11.11.11", 8888, "TEST1");\n\n naming.registerInstance("').concat(this.record.name,'", "2.2.2.2", 9999, "DEFAULT");\n\n System.out.println(naming.getAllInstances("').concat(this.record.name,'"));\n\n naming.deregisterInstance("').concat(this.record.name,'", "2.2.2.2", 9999, "DEFAULT");\n\n System.out.println(naming.getAllInstances("').concat(this.record.name,'"));\n\n naming.subscribe("').concat(this.record.name,'", new EventListener() {\n @Override\n public void onEvent(Event event) {\n System.out.println(((NamingEvent)event).getServiceName());\n System.out.println(((NamingEvent)event).getInstances());\n }\n });\n }\n}')}},{key:"getSpringCode",value:function(){return'/* Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-example/nacos-spring-discovery-example\n* pom.xml\n \n com.alibaba.nacos\n nacos-spring-context\n ${latest.version}\n \n*/\n\n// Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-example/nacos-spring-discovery-example/src/main/java/com/alibaba/nacos/example/spring\npackage com.alibaba.nacos.example.spring;\n\nimport com.alibaba.nacos.api.annotation.NacosProperties;\nimport com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\n@EnableNacosDiscovery(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))\npublic class NacosConfiguration {\n\n}\n\n// Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-example/nacos-spring-discovery-example/src/main/java/com/alibaba/nacos/example/spring/controller\npackage com.alibaba.nacos.example.spring.controller;\n\nimport com.alibaba.nacos.api.annotation.NacosInjected;\nimport com.alibaba.nacos.api.exception.NacosException;\nimport com.alibaba.nacos.api.naming.NamingService;\nimport com.alibaba.nacos.api.naming.pojo.Instance;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport java.util.List;\n\nimport static org.springframework.web.bind.annotation.RequestMethod.GET;\n\n@Controller\n@RequestMapping("discovery")\npublic class DiscoveryController {\n\n @NacosInjected\n private NamingService namingService;\n\n @RequestMapping(value = "/get", method = GET)\n @ResponseBody\n public List get(@RequestParam String serviceName) throws NacosException {\n return namingService.getAllInstances(serviceName);\n }\n}'}},{key:"getSpringBootCode",value:function(){return'/* Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example/nacos-spring-boot-discovery-example\n* pom.xml\n \n com.alibaba.boot\n nacos-discovery-spring-boot-starter\n ${latest.version}\n \n*/\n/* Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example/nacos-spring-boot-discovery-example/src/main/resources\n* application.properties\n nacos.discovery.server-addr=127.0.0.1:8848\n*/ \n// Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example/nacos-spring-boot-discovery-example/src/main/java/com/alibaba/nacos/example/spring/boot/controller\n\npackage com.alibaba.nacos.example.spring.boot.controller;\n\nimport com.alibaba.nacos.api.annotation.NacosInjected;\nimport com.alibaba.nacos.api.exception.NacosException;\nimport com.alibaba.nacos.api.naming.NamingService;\nimport com.alibaba.nacos.api.naming.pojo.Instance;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport java.util.List;\n\nimport static org.springframework.web.bind.annotation.RequestMethod.GET;\n\n@Controller\n@RequestMapping("discovery")\npublic class DiscoveryController {\n\n @NacosInjected\n private NamingService namingService;\n\n @RequestMapping(value = "/get", method = GET)\n @ResponseBody\n public List get(@RequestParam String serviceName) throws NacosException {\n return namingService.getAllInstances(serviceName);\n }\n}'}},{key:"getSpringCloudCode",value:function(){return"/* Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/\n* pom.xml \n \n org.springframework.cloud\n spring-cloud-starter-alibaba-nacos-discovery\n ${latest.version}\n \n*/\n\n// nacos-spring-cloud-provider-example\n\n/* Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-provider-example/src/main/resources\n* application.properties\nserver.port=18080\nspring.application.name=".concat(this.record.name,'\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n*/ \n\n// Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-provider-example/src/main/java/com/alibaba/nacos/example/spring/cloud\npackage com.alibaba.nacos.example.spring.cloud;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RestController;\n\n/**\n * @author xiaojing\n */\n@SpringBootApplication\n@EnableDiscoveryClient \npublic class NacosProviderApplication {\n\n public static void main(String[] args) {\n SpringApplication.run(NacosProviderApplication.class, args);\n}\n\n @RestController\n class EchoController {\n @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)\n public String echo(@PathVariable String string) {\n return "Hello Nacos Discovery " + string;\n }\n }\n}\n\n// nacos-spring-cloud-consumer-example\n\n/* Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-consumer-example/src/main/resources\n* application.properties\nspring.application.name=micro-service-oauth2\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n*/ \n\n// Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-consumer-example/src/main/java/com/alibaba/nacos/example/spring/cloud\npackage com.alibaba.nacos.example.spring.cloud;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.cloud.client.loadbalancer.LoadBalanced;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.client.RestTemplate;\n\n/**\n * @author xiaojing\n */\n@SpringBootApplication\n@EnableDiscoveryClient\npublic class NacosConsumerApplication {\n\n @LoadBalanced\n @Bean\n public RestTemplate restTemplate() {\n return new RestTemplate();\n }\n\n public static void main(String[] args) {\n SpringApplication.run(NacosConsumerApplication.class, args);\n }\n\n @RestController\n public class TestController {\n\n private final RestTemplate restTemplate;\n\n @Autowired\n public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}\n\n @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)\n public String echo(@PathVariable String str) {\n return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);\n }\n }\n}')}},{key:"getNodejsCode",value:function(){return"TODO"}},{key:"getCppCode",value:function(){return"TODO"}},{key:"getShellCode",value:function(){return"TODO"}},{key:"getPythonCode",value:function(){return"TODO"}},{key:"openDialog",value:function(e){var t=this;this.setState({dialogvisible:!0}),this.record=e,setTimeout(function(){t.getData()})}},{key:"closeDialog",value:function(){this.setState({dialogvisible:!1})}},{key:"createCodeMirror",value:function(e,t){var n=this.refs.codepreview;n&&(n.innerHTML="",this.cm=window.CodeMirror(n,{value:t,mode:e,height:400,width:500,lineNumbers:!0,theme:"xq-light",lint:!0,tabMode:"indent",autoMatchParens:!0,textWrapping:!0,gutters:["CodeMirror-lint-markers"],extraKeys:{F1:function(e){e.setOption("fullScreen",!e.getOption("fullScreen"))},Esc:function(e){e.getOption("fullScreen")&&e.setOption("fullScreen",!1)}}}),this.cm.setSize("auto","490px"))}},{key:"changeTab",value:function(e,t){var n=this;setTimeout(function(){n[e]=!0,n.createCodeMirror("text/javascript",t)})}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=F.a.createElement("div",null);return F.a.createElement("div",null,F.a.createElement(y.a,{title:t.sampleCode,style:{width:"80%"},visible:this.state.dialogvisible,footer:n,onClose:this.closeDialog.bind(this)},F.a.createElement("div",{style:{height:500}},F.a.createElement(x.a,{tip:t.loading,style:{width:"100%"},visible:this.state.loading},F.a.createElement(K.a,{shape:"text",style:{height:40,paddingBottom:10}},F.a.createElement(q,{title:"Java",key:0,onClick:this.changeTab.bind(this,"commoneditor1",this.defaultCode)}),F.a.createElement(q,{title:"Spring",key:1,onClick:this.changeTab.bind(this,"commoneditor1",this.springCode)}),F.a.createElement(q,{title:"Spring Boot",key:2,onClick:this.changeTab.bind(this,"commoneditor2",this.sprigbootCode)}),F.a.createElement(q,{title:"Spring Cloud",key:21,onClick:this.changeTab.bind(this,"commoneditor21",this.sprigcloudCode)}),F.a.createElement(q,{title:"Node.js",key:3,onClick:this.changeTab.bind(this,"commoneditor3",this.nodejsCode)}),F.a.createElement(q,{title:"C++",key:4,onClick:this.changeTab.bind(this,"commoneditor4",this.cppCode)}),F.a.createElement(q,{title:"Shell",key:5,onClick:this.changeTab.bind(this,"commoneditor5",this.shellCode)}),F.a.createElement(q,{title:"Python",key:6,onClick:this.changeTab.bind(this,"commoneditor6",this.pythonCode)})),F.a.createElement("div",{ref:"codepreview"})))))}}]),a}(F.a.Component),r.displayName="ShowServiceCodeing",a=o))||a,J=(n(696),R.a.Item),$=I.a.Row,X=I.a.Col,Q=P.a.Column,Z=(0,N.a.config)((l=s=function(e){Object(k.a)(a,e);var t=Object(D.a)(a);function a(e){var n;return Object(b.a)(this,a),(n=t.call(this,e)).getQueryLater=function(){setTimeout(function(){return n.queryServiceList()})},n.showcode=function(){setTimeout(function(){return n.queryServiceList()})},n.setNowNameSpace=function(e,t){return n.setState({nowNamespaceName:e,nowNamespaceId:t})},n.rowColor=function(e){return{className:e.healthyInstanceCount?"":"row-bg-red"}},n.editServiceDialog=F.a.createRef(),n.showcode=F.a.createRef(),n.state={loading:!1,total:0,pageSize:10,currentPage:1,dataSource:[],search:{serviceName:"",groupName:""},hasIpCount:!("false"===localStorage.getItem("hasIpCount"))},n.field=new _.a(Object(M.a)(n)),n}return Object(w.a)(a,[{key:"openLoading",value:function(){this.setState({loading:!0})}},{key:"closeLoading",value:function(){this.setState({loading:!1})}},{key:"openEditServiceDialog",value:function(){try{this.editServiceDialog.current.getInstance().show(this.state.service)}catch(e){}}},{key:"queryServiceList",value:function(){var i=this,e=this.state,t=e.currentPage,n=e.pageSize,a=e.search,r=e.withInstances,o=void 0!==r&&r,s=e.hasIpCount,l=["hasIpCount=".concat(s),"withInstances=".concat(o),"pageNo=".concat(t),"pageSize=".concat(n),"serviceNameParam=".concat(a.serviceName),"groupNameParam=".concat(a.groupName)];Object(z.c)({url:"v1/ns/catalog/services?".concat(l.join("&")),success:function(e){var t=0this.state.pageSize&&F.a.createElement("div",{style:{marginTop:10,textAlign:"right"}},F.a.createElement(S.a,{current:this.state.currentPage,total:this.state.total,pageSize:this.state.pageSize,onChange:function(e){return a.setState({currentPage:e},function(){return a.queryServiceList()})}}))),F.a.createElement(G,{ref:this.showcode}),F.a.createElement(V.a,{ref:this.editServiceDialog,openLoading:function(){return a.openLoading()},closeLoading:function(){return a.closeLoading()},queryServiceList:function(){return a.setState({currentPage:1},function(){return a.queryServiceList()})}}))}}]),a}(F.a.Component),s.displayName="ServiceList",i=l))||i;t.a=Z},function(e,t,n){"use strict";n(61);var a,r,o,i,s,l,u=n(43),d=n.n(u),c=(n(35),n(19)),f=n.n(c),p=(n(60),n(17)),h=n.n(p),m=(n(31),n(20)),g=n.n(m),y=n(13),v=n(14),_=n(16),b=n(15),w=(n(25),n(7)),M=n.n(w),k=n(0),x=n.n(k),S=n(44),E=n(51),T=n(45),L=(n(36),n(10)),C=n.n(L),D=n(38),O=(n(47),n(26)),N=n.n(O),Y=n(22),P=(n(41),n(9)),j=n.n(P),I=(n(149),j.a.Item),A={labelCol:{fixedSpan:4},wrapperCol:{span:19}},R=(0,M.a.config)((o=r=function(e){Object(_.a)(o,e);var r=Object(b.a)(o);function o(){var e;Object(y.a)(this,o);for(var t=arguments.length,n=new Array(t),a=0;ai&&x.a.createElement(d.a,{className:"users-pagination",current:s,total:n.totalCount,pageSize:i,onChange:function(e){return t.setState({pageNo:e},function(){return t.getUsers()})}}),x.a.createElement(R,{visible:l,onOk:function(e){return Object(E.c)(e).then(function(e){return t.setState({pageNo:1},function(){return t.getUsers()}),e})},onCancel:function(){return t.colseCreateUser()}}),x.a.createElement(H.a,{username:u,onOk:function(e){return Object(E.k)(e).then(function(e){return t.getUsers(),e})},onCancel:function(){return t.setState({passwordResetUser:void 0})}}))}}]),a}(x.a.Component),s.displayName="UserManagement",i=l))||i)||i;t.a=F},function(e,t,n){"use strict";n(61);var a,r,o,i,s,l,u=n(43),c=n.n(u),d=(n(35),n(19)),f=n.n(d),p=n(38),h=(n(60),n(17)),m=n.n(h),g=(n(31),n(20)),y=n.n(g),v=n(13),_=n(14),b=n(16),w=n(15),M=(n(25),n(7)),k=n.n(M),x=n(0),S=n.n(x),E=n(44),T=n(51),L=n(94),C=n(45),D=(n(36),n(10)),O=n.n(D),N=(n(47),n(26)),Y=n.n(N),P=n(22),j=(n(68),n(33)),I=n.n(j),A=(n(41),n(9)),R=n.n(A),H=R.a.Item,F=I.a.Option,z={labelCol:{fixedSpan:4},wrapperCol:{span:19}},W=Object(E.b)(function(e){return{namespaces:e.namespace.namespaces}},{getNamespaces:L.b})(a=(0,k.a.config)((o=r=function(e){Object(b.a)(o,e);var r=Object(w.a)(o);function o(){var e;Object(v.a)(this,o);for(var t=arguments.length,n=new Array(t),a=0;as&&S.a.createElement(c.a,{className:"users-pagination",current:u,total:t.totalCount,pageSize:s,onChange:function(e){return a.setState({pageNo:e},function(){return a.getPermissions()})}}),S.a.createElement(W,{visible:d,onOk:function(e){return Object(T.a)(e).then(function(e){return a.setState({pageNo:1},function(){return a.getPermissions()}),e})},onCancel:function(){return a.colseCreatePermission()}}))}}]),a}(S.a.Component),s.displayName="PermissionsManagement",i=l))||i)||i);t.a=B},function(e,t,n){"use strict";n(61);var a,r,o,i,s,l,u=n(43),d=n.n(u),c=(n(35),n(19)),f=n.n(c),p=(n(60),n(17)),h=n.n(p),m=(n(31),n(20)),g=n.n(m),y=n(13),v=n(14),_=n(16),b=n(15),w=(n(25),n(7)),M=n.n(w),k=n(0),x=n.n(k),S=n(44),E=n(51),T=n(45),L=(n(36),n(10)),C=n.n(L),D=(n(47),n(26)),O=n.n(D),N=n(22),Y=(n(41),n(9)),P=n.n(Y),j=P.a.Item,I={labelCol:{fixedSpan:4},wrapperCol:{span:19}},A=(0,M.a.config)((o=r=function(e){Object(_.a)(o,e);var r=Object(b.a)(o);function o(){var e;Object(y.a)(this,o);for(var t=arguments.length,n=new Array(t),a=0;ai&&x.a.createElement(d.a,{className:"users-pagination",current:s,total:t.totalCount,pageSize:i,onChange:function(e){return a.setState({pageNo:e},function(){return a.getRoles()})}}),x.a.createElement(A,{visible:l,onOk:function(e){return Object(E.b)(e).then(function(e){return a.getRoles(),e})},onCancel:function(){return a.colseCreateRole()}}))}}]),a}(x.a.Component),s.displayName="RolesManagement",i=l))||i)||i);t.a=R},function(e,t,n){"use strict";n(40);function s(e){var t=localStorage.token,n=void 0===t?"{}":t,a=Object(E.c)(n)&&JSON.parse(n)||{};return["naming"===e?void 0:T,{key:"serviceManagementVirtual",children:[{key:"serviceManagement",url:"/serviceManagement"},{key:"subscriberList",url:"/subscriberList"}]},a.globalAdmin?L:void 0,{key:"namespace",url:"/namespace"},{key:"clusterManagementVirtual",children:[{key:"clusterManagement",url:"/clusterManagement"}]}].filter(function(e){return e})}var a,r,o,i,l,u=n(23),d=n.n(u),c=n(13),f=n(14),p=n(16),h=n(15),m=(n(25),n(7)),g=n.n(m),y=n(21),v=(n(79),n(50)),_=n.n(v),b=n(0),w=n.n(b),M=n(32),k=n(44),x=n(126),S=n(92),E=n(46),T={key:"configurationManagementVirtual",children:[{key:"configurationManagement",url:"/configurationManagement"},{key:"historyRollback",url:"/historyRollback"},{key:"listeningToQuery",url:"/listeningToQuery"}]},L={key:"authorityControl",children:[{key:"userList",url:"/userManagement"},{key:"roleManagement",url:"/rolesManagement"},{key:"privilegeManagement",url:"/permissionsManagement"}]},C=_.a.SubMenu,D=_.a.Item,O=(a=Object(k.b)(function(e){return Object(y.a)(Object(y.a)({},e.locale),e.base)},{getState:S.b}),r=g.a.config,Object(M.g)(o=a(o=r((l=i=function(e){Object(p.a)(n,e);var t=Object(h.a)(n);function n(){return Object(c.a)(this,n),t.apply(this,arguments)}return Object(f.a)(n,[{key:"componentDidMount",value:function(){this.props.getState()}},{key:"goBack",value:function(){this.props.history.goBack()}},{key:"navTo",value:function(e){var t=this.props.location.search;this.props.history.push([e,t].join(""))}},{key:"isCurrentPath",value:function(e){return e===this.props.location.pathname?"current-path":void 0}},{key:"defaultOpenKeys",value:function(){for(var t=this,e=s(this.props.functionMode),n=0,a=e.length;nthis.state.pageSize&&Y.a.createElement("div",{style:{marginTop:10,textAlign:"right"}},Y.a.createElement(S.a,{current:this.state.pageNo,total:s,pageSize:this.state.pageSize,onChange:function(e){return t.setState({pageNo:e},function(){return t.querySubscriberList()})}}))))}}]),a}(Y.a.Component),r.displayName="SubscriberList",a=o))||a)||a;t.a=z},function(e,t,n){"use strict";n(48);var a,r,o,i=n(30),m=n.n(i),s=(n(61),n(43)),g=n.n(s),l=(n(376),n(98)),y=n.n(l),u=(n(31),n(20)),v=n.n(u),d=(n(36),n(10)),_=n.n(d),c=(n(47),n(26)),f=n.n(c),p=n(13),h=n(14),b=n(22),w=n(16),M=n(15),k=(n(25),n(7)),x=n.n(k),S=(n(383),n(99)),E=n.n(S),T=(n(60),n(17)),L=n.n(T),C=(n(66),n(37)),D=n.n(C),O=(n(41),n(9)),N=n.n(O),Y=n(0),P=n.n(Y),j=n(1),I=n(45),A=(n(699),N.a.Item),R=D.a.Row,H=D.a.Col,F=L.a.Column,z=E.a.Panel,W=(0,x.a.config)((o=r=function(e){Object(w.a)(a,e);var t=Object(M.a)(a);function a(e){var n;return Object(p.a)(this,a),(n=t.call(this,e)).getQueryLater=function(){setTimeout(function(){return n.queryClusterStateList()})},n.setNowNameSpace=function(e,t){return n.setState({nowNamespaceName:e,nowNamespaceId:t})},n.rowColor=function(e){return{className:(e.voteFor,"")}},n.state={loading:!1,total:0,pageSize:10,currentPage:1,keyword:"",dataSource:[]},n.field=new f.a(Object(b.a)(n)),n}return Object(h.a)(a,[{key:"openLoading",value:function(){this.setState({loading:!0})}},{key:"closeLoading",value:function(){this.setState({loading:!1})}},{key:"openEditServiceDialog",value:function(){try{this.editServiceDialog.current.getInstance().show(this.state.service)}catch(e){}}},{key:"queryClusterStateList",value:function(){var i=this,e=this.state,t=e.currentPage,n=e.pageSize,a=e.keyword,r=e.withInstances,o=["withInstances=".concat(void 0!==r&&r),"pageNo=".concat(t),"pageSize=".concat(n),"keyword=".concat(a)];Object(j.c)({url:"v1/core/cluster/nodes?".concat(o.join("&")),beforeSend:function(){return i.openLoading()},success:function(e){var t=0this.state.pageSize&&P.a.createElement("div",{style:{marginTop:10,textAlign:"right"}},P.a.createElement(g.a,{current:this.state.currentPage,total:this.state.total,pageSize:this.state.pageSize,onChange:function(e){return t.setState({currentPage:e},function(){return t.queryClusterStateList()})}}))))}}]),a}(P.a.Component),r.displayName="ClusterNodeList",a=o))||a;t.a=W},function(e,t,G){"use strict";G.r(t),function(e){G(48);var t,n=G(30),r=G.n(n),a=(G(25),G(7)),o=G.n(a),i=G(13),s=G(14),l=G(16),u=G(15),d=G(21),c=G(0),f=G.n(c),p=G(24),h=G.n(p),m=G(82),g=G(392),y=G(393),v=G(44),_=G(32),b=G(91),w=(G(437),G(411)),M=G(29),k=G(412),x=G(404),S=G(413),E=G(414),T=G(415),L=G(406),C=G(416),D=G(417),O=G(418),N=G(419),Y=G(403),P=G(407),j=G(405),I=G(420),A=G(421),R=G(408),H=G(409),F=G(410),z=G(401),W=G(402),B=G(95);G(702);e.hot,localStorage.getItem(M.e)||localStorage.setItem(M.e,"zh-CN"===navigator.language?"zh-CN":"en-US");var V=Object(m.c)(Object(d.a)(Object(d.a)({},W.a),{},{routing:g.routerReducer})),U=Object(m.e)(V,Object(m.d)(Object(m.a)(y.a),window[M.h]?window[M.h]():function(e){return e})),K=[{path:"/",exact:!0,render:function(){return f.a.createElement(_.a,{to:"/welcome"})}},{path:"/welcome",component:z.a},{path:"/namespace",component:x.a},{path:"/newconfig",component:S.a},{path:"/configsync",component:E.a},{path:"/configdetail",component:T.a},{path:"/configeditor",component:L.a},{path:"/historyDetail",component:C.a},{path:"/configRollback",component:D.a},{path:"/historyRollback",component:O.a},{path:"/listeningToQuery",component:N.a},{path:"/configurationManagement",component:Y.a},{path:"/serviceManagement",component:P.a},{path:"/serviceDetail",component:j.a},{path:"/subscriberList",component:I.a},{path:"/clusterManagement",component:A.a},{path:"/userManagement",component:R.a},{path:"/rolesManagement",component:F.a},{path:"/permissionsManagement",component:H.a}],q=Object(v.b)(function(e){return Object(d.a)({},e.locale)},{changeLanguage:B.a})(t=function(e){Object(l.a)(a,e);var n=Object(u.a)(a);function a(e){var t;return Object(i.a)(this,a),(t=n.call(this,e)).state={shownotice:"none",noticecontent:"",nacosLoading:{}},t}return Object(s.a)(a,[{key:"componentDidMount",value:function(){var e=localStorage.getItem(M.e);this.props.changeLanguage(e)}},{key:"render",value:function(){var e=this.props.locale;return f.a.createElement(r.a,Object.assign({className:"nacos-loading",shape:"flower",tip:"loading...",visible:!1,fullScreen:!0},this.state.nacosLoading),f.a.createElement(o.a,{locale:e},this.router))}},{key:"router",get:function(){return f.a.createElement(b.a,null,f.a.createElement(_.d,null,f.a.createElement(_.b,{path:"/login",component:k.a}),f.a.createElement(w.a,null,K.map(function(e){return f.a.createElement(_.b,Object.assign({key:e.path},e))}))))}}]),a}(f.a.Component))||t;h.a.render(f.a.createElement(v.a,{store:U},f.a.createElement(q,null)),document.getElementById("root"))}.call(this,G(170)(e))},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict"; -/** @license React v16.13.1 +*/var l=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(e){a[e]=e}),"abcdefghijklmnopqrst"!==Object.keys(Object.assign({},a)).join("")?void 0:1}catch(e){return}}()?Object.assign:function(e,t){for(var n,a,r=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),o=1;o=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},s=function(e){return e===0?0:e===1?1:e===2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},l={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(i){return function(e,t,n,a){var r=s(e),o=l[i][s(e)];if(r===2){o=o[t?0:1]}return o.replace(/%d/i,e)}},r=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],o;e.defineLocale("ar",{months:r,monthsShort:r,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){if(e<12){return"ص"}else{return"م"}},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},s=function(e){return e===0?0:e===1?1:e===2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},l={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},n=function(i){return function(e,t,n,a){var r=s(e),o=l[i][s(e)];if(r===2){o=o[t?0:1]}return o.replace(/%d/i,e)}},a=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],r;e.defineLocale("ar-ly",{months:a,monthsShort:a,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){if(e<12){return"ص"}else{return"م"}},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:n("s"),ss:n("s"),m:n("m"),mm:n("m"),h:n("h"),hh:n("h"),d:n("d"),dd:n("d"),M:n("M"),MM:n("M"),y:n("y"),yy:n("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a;e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){if(e<12){return"ص"}else{return"م"}},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var r={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"},t;e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"gecə"}else if(e<12){return"səhər"}else if(e<17){return"gündüz"}else{return"axşam"}},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(e===0){return e+"-ıncı"}var t=e%10,n=e%100-t,a=e>=100?100:null;return e+(r[t]||r[n]||r[a])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";function r(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function t(e,t,n){var a={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:t?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};if(n==="m"){return t?"хвіліна":"хвіліну"}else if(n==="h"){return t?"гадзіна":"гадзіну"}else{return e+" "+r(a[n],+e)}}var n;e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:t,mm:t,h:t,hh:t,d:"дзень",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"ночы"}else if(e<12){return"раніцы"}else if(e<17){return"дня"}else{return"вечара"}},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return(e%10===2||e%10===3)&&(e%100!==12&&e%100!==13)?e+"-і":e+"-ы";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;if(e===0){return e+"-ев"}else if(n===0){return e+"-ен"}else if(n>10&&n<20){return e+"-ти"}else if(t===1){return e+"-ви"}else if(t===2){return e+"-ри"}else if(t===7||t===8){return e+"-ми"}else{return e+"-ти"}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},a;e.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="রাত"&&e>=4||t==="দুপুর"&&e<5||t==="বিকাল"){return e+12}else{return e}},meridiem:function(e,t,n){if(e<4){return"রাত"}else if(e<10){return"সকাল"}else if(e<17){return"দুপুর"}else if(e<20){return"বিকাল"}else{return"রাত"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"},a;e.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="མཚན་མོ"&&e>=4||t==="ཉིན་གུང"&&e<5||t==="དགོང་དག"){return e+12}else{return e}},meridiem:function(e,t,n){if(e<4){return"མཚན་མོ"}else if(e<10){return"ཞོགས་ཀས"}else if(e<17){return"ཉིན་གུང"}else if(e<20){return"དགོང་དག"}else{return"མཚན་མོ"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n){var a={mm:"munutenn",MM:"miz",dd:"devezh"};return e+" "+r(a[n],e)}function n(e){switch(a(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}function a(e){if(e>9){return a(e%10)}return e}function r(e,t){if(t===2){return o(e)}return e}function o(e){var t={m:"v",b:"v",d:"z"};if(t[e.charAt(0)]===undefined){return e}return t[e.charAt(0)]+e.substring(1)}var i;e.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:n},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){var t=e===1?"añ":"vet";return e+t},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n){var a=e+" ";switch(n){case"ss":if(e===1){a+="sekunda"}else if(e===2||e===3||e===4){a+="sekunde"}else{a+="sekundi"}return a;case"m":return t?"jedna minuta":"jedne minute";case"mm":if(e===1){a+="minuta"}else if(e===2||e===3||e===4){a+="minute"}else{a+="minuta"}return a;case"h":return t?"jedan sat":"jednog sata";case"hh":if(e===1){a+="sat"}else if(e===2||e===3||e===4){a+="sata"}else{a+="sati"}return a;case"dd":if(e===1){a+="dan"}else{a+="dana"}return a;case"MM":if(e===1){a+="mjesec"}else if(e===2||e===3||e===4){a+="mjeseca"}else{a+="mjeseci"}return a;case"yy":if(e===1){a+="godina"}else if(e===2||e===3||e===4){a+="godine"}else{a+="godina"}return a}}var n;e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:true,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(this.hours()!==1?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(this.hours()!==1?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(this.hours()!==1?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(this.hours()!==1?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(this.hours()!==1?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=e===1?"r":e===2?"n":e===3?"r":e===4?"t":"è";if(t==="w"||t==="W"){n="a"}return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),a=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],r=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,o;function i(e){return e>1&&e<5&&~~(e/10)!==1}function s(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"pár sekund":"pár sekundami";case"ss":if(t||a){return r+(i(e)?"sekundy":"sekund")}else{return r+"sekundami"}break;case"m":return t?"minuta":a?"minutu":"minutou";case"mm":if(t||a){return r+(i(e)?"minuty":"minut")}else{return r+"minutami"}break;case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":if(t||a){return r+(i(e)?"hodiny":"hodin")}else{return r+"hodinami"}break;case"d":return t||a?"den":"dnem";case"dd":if(t||a){return r+(i(e)?"dny":"dní")}else{return r+"dny"}break;case"M":return t||a?"měsíc":"měsícem";case"MM":if(t||a){return r+(i(e)?"měsíce":"měsíců")}else{return r+"měsíci"}break;case"y":return t||a?"rok":"rokem";case"yy":if(t||a){return r+(i(e)?"roky":"let")}else{return r+"lety"}break}}e.defineLocale("cs",{months:t,monthsShort:n,monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){var t=/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран";return e+t},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t=e,n="",a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];if(t>20){if(t===40||t===50||t===60||t===80||t===100){n="fed"}else{n="ain"}}else if(t>0){n=a[t]}return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}var n;e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}var n;e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}var n;e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"],a;e.defineLocale("dv",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(e){return"މފ"===e},meridiem:function(e,t,n){if(e<12){return"މކ"}else{return"މފ"}},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";function r(e){return e instanceof Function||Object.prototype.toString.call(e)==="[object Function]"}var t;e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,t){if(!e){return this._monthsNominativeEl}else if(typeof t==="string"&&/D/.test(t.substring(0,t.indexOf("MMMM")))){return this._monthsGenitiveEl[e.month()]}else{return this._monthsNominativeEl[e.month()]}},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,t,n){if(e>11){return n?"μμ":"ΜΜ"}else{return n?"πμ":"ΠΜ"}},isPM:function(e){return(e+"").toLowerCase()[0]==="μ"},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,t){var n=this._calendarEl[e],a=t&&t.hours();if(r(n)){n=n.apply(t)}return n.replace("{}",a%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("en-SG",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return e.charAt(0).toLowerCase()==="p"},meridiem:function(e,t,n){if(e>11){return n?"p.t.m.":"P.T.M."}else{return n?"a.t.m.":"A.T.M."}},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,o;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(this.hours()!==1?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(this.hours()!==1?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(this.hours()!==1?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(this.hours()!==1?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(this.hours()!==1?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,o;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(this.hours()!==1?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(this.hours()!==1?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(this.hours()!==1?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(this.hours()!==1?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(this.hours()!==1?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,o;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(this.hours()!==1?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(this.hours()!==1?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(this.hours()!==1?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(this.hours()!==1?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(this.hours()!==1?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};if(t){return r[n][2]?r[n][2]:r[n][1]}return a?r[n][0]:r[n][1]}var n;e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:true,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"},a;e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){if(e<12){return"قبل از ظهر"}else{return"بعد از ظهر"}},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),a=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",n[7],n[8],n[9]],t;function r(e,t,n,a){var r="";switch(n){case"s":return a?"muutaman sekunnin":"muutama sekunti";case"ss":return a?"sekunnin":"sekuntia";case"m":return a?"minuutin":"minuutti";case"mm":r=a?"minuutin":"minuuttia";break;case"h":return a?"tunnin":"tunti";case"hh":r=a?"tunnin":"tuntia";break;case"d":return a?"päivän":"päivä";case"dd":r=a?"päivän":"päivää";break;case"M":return a?"kuukauden":"kuukausi";case"MM":r=a?"kuukauden":"kuukautta";break;case"y":return a?"vuoden":"vuosi";case"yy":r=a?"vuoden":"vuotta";break}r=o(e,a)+" "+r;return r}function o(e,t){return e<10?t?a[e]:n[e]:e}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:true,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case"D":return e+(e===1?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(e===1?"er":"e");case"w":case"W":return e+(e===1?"re":"e")}},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:true,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(e===1?"er":"e");case"w":case"W":return e+(e===1?"re":"e")}}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:true,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(e===1?"er":"e");case"w":case"W":return e+(e===1?"re":"e")}},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),a="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),t;e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsParseExact:true,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(e===1||e===8||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t=["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Méitheamh","Iúil","Lúnasa","Meán Fómhair","Deaireadh Fómhair","Samhain","Nollaig"],n=["Eaná","Feab","Márt","Aibr","Beal","Méit","Iúil","Lúna","Meán","Deai","Samh","Noll"],a=["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Satharn"],r=["Dom","Lua","Mái","Céa","Déa","hAo","Sat"],o=["Do","Lu","Má","Ce","Dé","hA","Sa"],i;e.defineLocale("ga",{months:t,monthsShort:n,monthsParseExact:true,weekdays:a,weekdaysShort:r,weekdaysMin:o,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné aig] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){var t=e===1?"d":e%10===2?"na":"mh";return e+t},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],n=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],a=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],r=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],o=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],i;e.defineLocale("gd",{months:t,monthsShort:n,monthsParseExact:true,weekdays:a,weekdaysShort:r,weekdaysMin:o,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){var t=e===1?"d":e%10===2?"na":"mh";return e+t},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:true,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(this.hours()!==1?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(this.hours()!==1?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(this.hours()!==1?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(this.hours()!==1?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(this.hours()!==1?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){if(e.indexOf("un")===0){return"n"+e}return"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r={s:["thodde secondanim","thodde second"],ss:[e+" secondanim",e+" second"],m:["eka mintan","ek minute"],mm:[e+" mintanim",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voranim",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disanim",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineanim",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsanim",e+" vorsam"]};return t?r[n][0]:r[n][1]}var n;e.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){switch(t){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="rati"){return e<4?e:e+12}else if(t==="sokalli"){return e}else if(t==="donparam"){return e>12?e:e+12}else if(t==="sanje"){return e+12}},meridiem:function(e,t,n){if(e<4){return"rati"}else if(e<12){return"sokalli"}else if(e<16){return"donparam"}else if(e<20){return"sanje"}else{return"rati"}}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"},a;e.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:true,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="રાત"){return e<4?e:e+12}else if(t==="સવાર"){return e}else if(t==="બપોર"){return e>=10?e:e+12}else if(t==="સાંજ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"રાત"}else if(e<10){return"સવાર"}else if(e<17){return"બપોર"}else if(e<20){return"સાંજ"}else{return"રાત"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){if(e===2){return"שעתיים"}return e+" שעות"},d:"יום",dd:function(e){if(e===2){return"יומיים"}return e+" ימים"},M:"חודש",MM:function(e){if(e===2){return"חודשיים"}return e+" חודשים"},y:"שנה",yy:function(e){if(e===2){return"שנתיים"}else if(e%10===0&&e!==10){return e+" שנה"}return e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){if(e<5){return"לפנות בוקר"}else if(e<10){return"בבוקר"}else if(e<12){return n?'לפנה"צ':"לפני הצהריים"}else if(e<18){return n?'אחה"צ':"אחרי הצהריים"}else{return"בערב"}}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},a;e.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:true,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="रात"){return e<4?e:e+12}else if(t==="सुबह"){return e}else if(t==="दोपहर"){return e>=10?e:e+12}else if(t==="शाम"){return e+12}},meridiem:function(e,t,n){if(e<4){return"रात"}else if(e<10){return"सुबह"}else if(e<17){return"दोपहर"}else if(e<20){return"शाम"}else{return"रात"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n){var a=e+" ";switch(n){case"ss":if(e===1){a+="sekunda"}else if(e===2||e===3||e===4){a+="sekunde"}else{a+="sekundi"}return a;case"m":return t?"jedna minuta":"jedne minute";case"mm":if(e===1){a+="minuta"}else if(e===2||e===3||e===4){a+="minute"}else{a+="minuta"}return a;case"h":return t?"jedan sat":"jednog sata";case"hh":if(e===1){a+="sat"}else if(e===2||e===3||e===4){a+="sata"}else{a+="sati"}return a;case"dd":if(e===1){a+="dan"}else{a+="dana"}return a;case"MM":if(e===1){a+="mjesec"}else if(e===2||e===3||e===4){a+="mjeseca"}else{a+="mjeseci"}return a;case"yy":if(e===1){a+="godina"}else if(e===2||e===3||e===4){a+="godine"}else{a+="godina"}return a}}var n;e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:true,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" "),n;function a(e,t,n,a){var r=e;switch(n){case"s":return a||t?"néhány másodperc":"néhány másodperce";case"ss":return r+(a||t)?" másodperc":" másodperce";case"m":return"egy"+(a||t?" perc":" perce");case"mm":return r+(a||t?" perc":" perce");case"h":return"egy"+(a||t?" óra":" órája");case"hh":return r+(a||t?" óra":" órája");case"d":return"egy"+(a||t?" nap":" napja");case"dd":return r+(a||t?" nap":" napja");case"M":return"egy"+(a||t?" hónap":" hónapja");case"MM":return r+(a||t?" hónap":" hónapja");case"y":return"egy"+(a||t?" év":" éve");case"yy":return r+(a||t?" év":" éve")}return""}function r(e){return(e?"":"[múlt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return e.charAt(1).toLowerCase()==="u"},meridiem:function(e,t,n){if(e<12){return n===true?"de":"DE"}else{return n===true?"du":"DU"}},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,true)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,false)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){if(e<4){return"գիշերվա"}else if(e<12){return"առավոտվա"}else if(e<17){return"ցերեկվա"}else{return"երեկոյան"}},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(e,t){switch(t){case"DDD":case"w":case"W":case"DDDo":if(e===1){return e+"-ին"}return e+"-րդ";default:return e}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="pagi"){return e}else if(t==="siang"){return e>=11?e:e+12}else if(t==="sore"||t==="malam"){return e+12}},meridiem:function(e,t,n){if(e<11){return"pagi"}else if(e<15){return"siang"}else if(e<19){return"sore"}else{return"malam"}},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";function o(e){if(e%100===11){return true}else if(e%10===1){return false}return true}function t(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":if(o(e)){return r+(t||a?"sekúndur":"sekúndum")}return r+"sekúnda";case"m":return t?"mínúta":"mínútu";case"mm":if(o(e)){return r+(t||a?"mínútur":"mínútum")}else if(t){return r+"mínúta"}return r+"mínútu";case"hh":if(o(e)){return r+(t||a?"klukkustundir":"klukkustundum")}return r+"klukkustund";case"d":if(t){return"dagur"}return a?"dag":"degi";case"dd":if(o(e)){if(t){return r+"dagar"}return r+(a?"daga":"dögum")}else if(t){return r+"dagur"}return r+(a?"dag":"degi");case"M":if(t){return"mánuður"}return a?"mánuð":"mánuði";case"MM":if(o(e)){if(t){return r+"mánuðir"}return r+(a?"mánuði":"mánuðum")}else if(t){return r+"mánuður"}return r+(a?"mánuð":"mánuði");case"y":return t||a?"ár":"ári";case"yy":if(o(e)){return r+(t||a?"ár":"árum")}return r+(t||a?"ár":"ári")}}var n;e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,ss:t,m:t,mm:t,h:"klukkustund",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ja",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return e==="午後"},meridiem:function(e,t,n){if(e<12){return"午前"}else{return"午後"}},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){if(e.week()=11?e:e+12}else if(t==="sonten"||t==="ndalu"){return e+12}},meridiem:function(e,t,n){if(e<11){return"enjing"}else if(e<15){return"siyang"}else if(e<19){return"sonten"}else{return"ndalu"}},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return/(წამი|წუთი|საათი|წელი)/.test(e)?e.replace(/ი$/,"ში"):e+"ში"},past:function(e){if(/(წამი|წუთი|საათი|დღე|თვე)/.test(e)){return e.replace(/(ი|ე)$/,"ის წინ")}if(/წელი/.test(e)){return e.replace(/წელი$/,"წლის წინ")}},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){if(e===0){return e}if(e===1){return e+"-ლი"}if(e<20||e<=100&&e%20===0||e%100===0){return"მე-"+e}return e+"-ე"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var a={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"},t;e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"},a;e.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return e==="ល្ងាច"},meridiem:function(e,t,n){if(e<12){return"ព្រឹក"}else{return"ល្ងាច"}},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"},a;e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:true,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="ರಾತ್ರಿ"){return e<4?e:e+12}else if(t==="ಬೆಳಿಗ್ಗೆ"){return e}else if(t==="ಮಧ್ಯಾಹ್ನ"){return e>=10?e:e+12}else if(t==="ಸಂಜೆ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"ರಾತ್ರಿ"}else if(e<10){return"ಬೆಳಿಗ್ಗೆ"}else if(e<17){return"ಮಧ್ಯಾಹ್ನ"}else if(e<20){return"ಸಂಜೆ"}else{return"ರಾತ್ರಿ"}},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return e==="오후"},meridiem:function(e,t,n){return e<12?"오전":"오후"}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"],r;e.defineLocale("ku",{months:a,monthsShort:a,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,t,n){if(e<12){return"به‌یانی"}else{return"ئێواره‌"}},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var a={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"},t;e.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return t?r[n][0]:r[n][1]}function n(e){var t=e.substr(0,e.indexOf(" "));if(r(t)){return"a "+e}return"an "+e}function a(e){var t=e.substr(0,e.indexOf(" "));if(r(t)){return"viru "+e}return"virun "+e}function r(e){e=parseInt(e,10);if(isNaN(e)){return false}if(e<0){return true}else if(e<10){if(4<=e&&e<=7){return true}return false}else if(e<100){var t=e%10,n=e/10;if(t===0){return r(n)}return r(t)}else if(e<1e4){while(e>=10){e=e/10}return r(e)}else{e=e/1e3;return r(e)}}var o;e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:true,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:a,s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d Méint",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return e==="ຕອນແລງ"},meridiem:function(e,t,n){if(e<12){return"ຕອນເຊົ້າ"}else{return"ຕອນແລງ"}},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(e){return"ທີ່"+e}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},n;function a(e,t,n,a){if(t){return"kelios sekundės"}else{return a?"kelių sekundžių":"kelias sekundes"}}function o(e,t,n,a){return t?s(n)[0]:a?s(n)[1]:s(n)[2]}function i(e){return e%10===0||e>10&&e<20}function s(e){return t[e].split("_")}function r(e,t,n,a){var r=e+" ";if(e===1){return r+o(e,t,n[0],a)}else if(t){return r+(i(e)?s(n)[1]:s(n)[0])}else{if(a){return r+s(n)[1]}else{return r+(i(e)?s(n)[1]:s(n)[2])}}}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:a,ss:r,m:o,mm:r,h:o,hh:r,d:o,dd:r,M:o,MM:r,y:o,yy:r},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var a={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")},t;function r(e,t,n){if(n){return t%10===1&&t%100!==11?e[2]:e[3]}else{return t%10===1&&t%100!==11?e[0]:e[1]}}function n(e,t,n){return e+" "+r(a[n],e,t)}function o(e,t,n){return r(a[n],e,t)}function i(e,t){return t?"dažas sekundes":"dažām sekundēm"}e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:i,ss:n,m:o,mm:n,h:o,hh:n,d:o,dd:n,M:o,MM:n,y:o,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var r={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return e===1?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,t,n){var a=r.words[n];if(n.length===1){return t?a[0]:a[1]}else{return e+" "+r.correctGrammaticalCase(e,a)}}},t;e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var e=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:r.translate,m:r.translate,mm:r.translate,h:r.translate,hh:r.translate,d:"dan",dd:r.translate,M:"mjesec",MM:r.translate,y:"godinu",yy:r.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;if(e===0){return e+"-ев"}else if(n===0){return e+"-ен"}else if(n>10&&n<20){return e+"-ти"}else if(t===1){return e+"-ви"}else if(t===2){return e+"-ри"}else if(t===7||t===8){return e+"-ми"}else{return e+"-ти"}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:true,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,t){if(e===12){e=0}if(t==="രാത്രി"&&e>=4||t==="ഉച്ച കഴിഞ്ഞ്"||t==="വൈകുന്നേരം"){return e+12}else{return e}},meridiem:function(e,t,n){if(e<4){return"രാത്രി"}else if(e<12){return"രാവിലെ"}else if(e<17){return"ഉച്ച കഴിഞ്ഞ്"}else if(e<20){return"വൈകുന്നേരം"}else{return"രാത്രി"}}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){switch(n){case"s":return t?"хэдхэн секунд":"хэдхэн секундын";case"ss":return e+(t?" секунд":" секундын");case"m":case"mm":return e+(t?" минут":" минутын");case"h":case"hh":return e+(t?" цаг":" цагийн");case"d":case"dd":return e+(t?" өдөр":" өдрийн");case"M":case"MM":return e+(t?" сар":" сарын");case"y":case"yy":return e+(t?" жил":" жилийн");default:return e}}var n;e.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:true,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return e==="ҮХ"},meridiem:function(e,t,n){if(e<12){return"ҮӨ"}else{return"ҮХ"}},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+" өдөр";default:return e}}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},a;function r(e,t,n,a){var r="";if(t){switch(n){case"s":r="काही सेकंद";break;case"ss":r="%d सेकंद";break;case"m":r="एक मिनिट";break;case"mm":r="%d मिनिटे";break;case"h":r="एक तास";break;case"hh":r="%d तास";break;case"d":r="एक दिवस";break;case"dd":r="%d दिवस";break;case"M":r="एक महिना";break;case"MM":r="%d महिने";break;case"y":r="एक वर्ष";break;case"yy":r="%d वर्षे";break}}else{switch(n){case"s":r="काही सेकंदां";break;case"ss":r="%d सेकंदां";break;case"m":r="एका मिनिटा";break;case"mm":r="%d मिनिटां";break;case"h":r="एका तासा";break;case"hh":r="%d तासां";break;case"d":r="एका दिवसा";break;case"dd":r="%d दिवसां";break;case"M":r="एका महिन्या";break;case"MM":r="%d महिन्यां";break;case"y":r="एका वर्षा";break;case"yy":r="%d वर्षां";break}}return r.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:true,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="रात्री"){return e<4?e:e+12}else if(t==="सकाळी"){return e}else if(t==="दुपारी"){return e>=10?e:e+12}else if(t==="सायंकाळी"){return e+12}},meridiem:function(e,t,n){if(e<4){return"रात्री"}else if(e<10){return"सकाळी"}else if(e<17){return"दुपारी"}else if(e<20){return"सायंकाळी"}else{return"रात्री"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="pagi"){return e}else if(t==="tengahari"){return e>=11?e:e+12}else if(t==="petang"||t==="malam"){return e+12}},meridiem:function(e,t,n){if(e<11){return"pagi"}else if(e<15){return"tengahari"}else if(e<19){return"petang"}else{return"malam"}},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="pagi"){return e}else if(t==="tengahari"){return e>=11?e:e+12}else if(t==="petang"||t==="malam"){return e+12}},meridiem:function(e,t,n){if(e<11){return"pagi"}else if(e<15){return"tengahari"}else if(e<19){return"petang"}else{return"malam"}},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"},a;e.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:true,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},a;e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:true,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="राति"){return e<4?e:e+12}else if(t==="बिहान"){return e}else if(t==="दिउँसो"){return e>=10?e:e+12}else if(t==="साँझ"){return e+12}},meridiem:function(e,t,n){if(e<3){return"राति"}else if(e<12){return"बिहान"}else if(e<16){return"दिउँसो"}else if(e<20){return"साँझ"}else{return"राति"}},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),t=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,o;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(e===1||e===8||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),t=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,o;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,t){if(!e){return n}else if(/-MMM-/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(e===1||e===8||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"},a;e.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="ਰਾਤ"){return e<4?e:e+12}else if(t==="ਸਵੇਰ"){return e}else if(t==="ਦੁਪਹਿਰ"){return e>=10?e:e+12}else if(t==="ਸ਼ਾਮ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"ਰਾਤ"}else if(e<10){return"ਸਵੇਰ"}else if(e<17){return"ਦੁਪਹਿਰ"}else if(e<20){return"ਸ਼ਾਮ"}else{return"ਰਾਤ"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var n="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),a="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),t;function r(e){return e%10<5&&e%10>1&&~~(e/10)%10!==1}function o(e,t,n){var a=e+" ";switch(n){case"ss":return a+(r(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return a+(r(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return a+(r(e)?"godziny":"godzin");case"MM":return a+(r(e)?"miesiące":"miesięcy");case"yy":return a+(r(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,t){if(!e){return n}else if(t===""){return"("+a[e.month()]+"|"+n[e.month()]+")"}else if(/D MMMM/.test(t)){return a[e.month()]}else{return n[e.month()]}},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:o,m:o,mm:o,h:o,hh:o,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:o,y:"rok",yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return this.day()===0||this.day()===6?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return this.day()===0||this.day()===6?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n){var a={ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},r=" ";if(e%100>=20||e>=100&&e%100===0){r=" de "}return e+r+a[n]}var n;e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:true,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:t,m:"un minut",mm:t,h:"o oră",hh:t,d:"o zi",dd:t,M:"o lună",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";function r(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function t(e,t,n){var a={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};if(n==="m"){return t?"минута":"минуту"}else{return e+" "+r(a[n],+e)}}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],a;e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()!==this.week()){switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}}else{if(this.day()===2){return"[Во] dddd, [в] LT"}else{return"[В] dddd, [в] LT"}}},lastWeek:function(e){if(e.week()!==this.week()){switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}}else{if(this.day()===2){return"[Во] dddd, [в] LT"}else{return"[В] dddd, [в] LT"}}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:t,m:t,mm:t,h:"час",hh:t,d:"день",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"ночи"}else if(e<12){return"утра"}else if(e<17){return"дня"}else{return"вечера"}},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"],a;e.defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){if(e<12){return"صبح"}return"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(e){return e+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return e==="ප.ව."||e==="පස් වරු"},meridiem:function(e,t,n){if(e>11){return n?"ප.ව.":"පස් වරු"}else{return n?"පෙ.ව.":"පෙර වරු"}}})}(n(8))},function(e,t,n){!function(e){"use strict";var t="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),a;function o(e){return e>1&&e<5}function r(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"pár sekúnd":"pár sekundami";case"ss":if(t||a){return r+(o(e)?"sekundy":"sekúnd")}else{return r+"sekundami"}break;case"m":return t?"minúta":a?"minútu":"minútou";case"mm":if(t||a){return r+(o(e)?"minúty":"minút")}else{return r+"minútami"}break;case"h":return t?"hodina":a?"hodinu":"hodinou";case"hh":if(t||a){return r+(o(e)?"hodiny":"hodín")}else{return r+"hodinami"}break;case"d":return t||a?"deň":"dňom";case"dd":if(t||a){return r+(o(e)?"dni":"dní")}else{return r+"dňami"}break;case"M":return t||a?"mesiac":"mesiacom";case"MM":if(t||a){return r+(o(e)?"mesiace":"mesiacov")}else{return r+"mesiacmi"}break;case"y":return t||a?"rok":"rokom";case"yy":if(t||a){return r+(o(e)?"roky":"rokov")}else{return r+"rokmi"}break}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";function t(e,t,n,a){var r=e+" ";switch(n){case"s":return t||a?"nekaj sekund":"nekaj sekundami";case"ss":if(e===1){r+=t?"sekundo":"sekundi"}else if(e===2){r+=t||a?"sekundi":"sekundah"}else if(e<5){r+=t||a?"sekunde":"sekundah"}else{r+="sekund"}return r;case"m":return t?"ena minuta":"eno minuto";case"mm":if(e===1){r+=t?"minuta":"minuto"}else if(e===2){r+=t||a?"minuti":"minutama"}else if(e<5){r+=t||a?"minute":"minutami"}else{r+=t||a?"minut":"minutami"}return r;case"h":return t?"ena ura":"eno uro";case"hh":if(e===1){r+=t?"ura":"uro"}else if(e===2){r+=t||a?"uri":"urama"}else if(e<5){r+=t||a?"ure":"urami"}else{r+=t||a?"ur":"urami"}return r;case"d":return t||a?"en dan":"enim dnem";case"dd":if(e===1){r+=t||a?"dan":"dnem"}else if(e===2){r+=t||a?"dni":"dnevoma"}else{r+=t||a?"dni":"dnevi"}return r;case"M":return t||a?"en mesec":"enim mesecem";case"MM":if(e===1){r+=t||a?"mesec":"mesecem"}else if(e===2){r+=t||a?"meseca":"mesecema"}else if(e<5){r+=t||a?"mesece":"meseci"}else{r+=t||a?"mesecev":"meseci"}return r;case"y":return t||a?"eno leto":"enim letom";case"yy":if(e===1){r+=t||a?"leto":"letom"}else if(e===2){r+=t||a?"leti":"letoma"}else if(e<5){r+=t||a?"leta":"leti"}else{r+=t||a?"let":"leti"}return r}}var n;e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:true,meridiemParse:/PD|MD/,isPM:function(e){return e.charAt(0)==="M"},meridiem:function(e,t,n){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var r={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return e===1?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,t,n){var a=r.words[n];if(n.length===1){return t?a[0]:a[1]}else{return e+" "+r.correctGrammaticalCase(e,a)}}},t;e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:true,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var e=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:r.translate,m:r.translate,mm:r.translate,h:r.translate,hh:r.translate,d:"dan",dd:r.translate,M:"mesec",MM:r.translate,y:"godinu",yy:r.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var r={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,t){return e===1?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,t,n){var a=r.words[n];if(n.length===1){return t?a[0]:a[1]}else{return e+" "+r.correctGrammaticalCase(e,a)}}},t;e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:true,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var e=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:r.translate,m:r.translate,mm:r.translate,h:r.translate,hh:r.translate,d:"дан",dd:r.translate,M:"месец",MM:r.translate,y:"годину",yy:r.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,n){if(e<11){return"ekuseni"}else if(e<15){return"emini"}else if(e<19){return"entsambama"}else{return"ebusuku"}},meridiemHour:function(e,t){if(e===12){e=0}if(t==="ekuseni"){return e}else if(t==="emini"){return e>=11?e:e+12}else if(t==="entsambama"||t==="ebusuku"){if(e===0){return 0}return e+12}},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"e":t===1?"a":t===2?"a":t===3?"e":"e";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"},a;e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){if(e<2){return" யாமம்"}else if(e<6){return" வைகறை"}else if(e<10){return" காலை"}else if(e<14){return" நண்பகல்"}else if(e<18){return" எற்பாடு"}else if(e<22){return" மாலை"}else{return" யாமம்"}},meridiemHour:function(e,t){if(e===12){e=0}if(t==="யாமம்"){return e<2?e:e+12}else if(t==="வைகறை"||t==="காலை"){return e}else if(t==="நண்பகல்"){return e>=10?e:e+12}else{return e+12}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:true,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="రాత్రి"){return e<4?e:e+12}else if(t==="ఉదయం"){return e}else if(t==="మధ్యాహ్నం"){return e>=10?e:e+12}else if(t==="సాయంత్రం"){return e+12}},meridiem:function(e,t,n){if(e<4){return"రాత్రి"}else if(e<10){return"ఉదయం"}else if(e<17){return"మధ్యాహ్నం"}else if(e<20){return"సాయంత్రం"}else{return"రాత్రి"}},week:{dow:0,doy:6}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var a={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"},t;e.defineLocale("tg",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Пагоҳ соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="шаб"){return e<4?e:e+12}else if(t==="субҳ"){return e}else if(t==="рӯз"){return e>=11?e:e+12}else if(t==="бегоҳ"){return e+12}},meridiem:function(e,t,n){if(e<4){return"шаб"}else if(e<11){return"субҳ"}else if(e<16){return"рӯз"}else if(e<19){return"бегоҳ"}else{return"шаб"}},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:true,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return e==="หลังเที่ยง"},meridiem:function(e,t,n){if(e<12){return"ก่อนเที่ยง"}else{return"หลังเที่ยง"}},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var o="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_"),t;function n(e){var t=e;t=e.indexOf("jaj")!==-1?t.slice(0,-3)+"leS":e.indexOf("jar")!==-1?t.slice(0,-3)+"waQ":e.indexOf("DIS")!==-1?t.slice(0,-3)+"nem":t+" pIq";return t}function a(e){var t=e;t=e.indexOf("jaj")!==-1?t.slice(0,-3)+"Hu’":e.indexOf("jar")!==-1?t.slice(0,-3)+"wen":e.indexOf("DIS")!==-1?t.slice(0,-3)+"ben":t+" ret";return t}function r(e,t,n,a){var r=i(e);switch(n){case"ss":return r+" lup";case"mm":return r+" tup";case"hh":return r+" rep";case"dd":return r+" jaj";case"MM":return r+" jar";case"yy":return r+" DIS"}}function i(e){var t=Math.floor(e%1e3/100),n=Math.floor(e%100/10),a=e%10,r="";if(t>0){r+=o[t]+"vatlh"}if(n>0){r+=(r!==""?" ":"")+o[n]+"maH"}if(a>0){r+=(r!==""?" ":"")+o[a]}return r===""?"pagh":r}e.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:true,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:n,past:a,s:"puS lup",ss:r,m:"wa’ tup",mm:r,h:"wa’ rep",hh:r,d:"wa’ jaj",dd:r,M:"wa’ jar",MM:r,y:"wa’ DIS",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var o={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"},t;e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(e===0){return e+"'ıncı"}var n=e%10,a=e%100-n,r=e>=100?100:null;return e+(o[n]||o[a]||o[r])}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;function n(e,t,n,a){var r={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",""+e+" secunds"],m:["'n míut","'iens míut"],mm:[e+" míuts",""+e+" míuts"],h:["'n þora","'iensa þora"],hh:[e+" þoras",""+e+" þoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",""+e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",""+e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",""+e+" ars"]};return a?r[n][0]:t?r[n][0]:r[n][1]}e.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,t,n){if(e>11){return n?"d'o":"D'O"}else{return n?"d'a":"D'A"}},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="يېرىم كېچە"||t==="سەھەر"||t==="چۈشتىن بۇرۇن"){return e}else if(t==="چۈشتىن كېيىن"||t==="كەچ"){return e+12}else{return e>=11?e:e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"يېرىم كېچە"}else if(a<900){return"سەھەر"}else if(a<1130){return"چۈشتىن بۇرۇن"}else if(a<1230){return"چۈش"}else if(a<1800){return"چۈشتىن كېيىن"}else{return"كەچ"}},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";function r(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function t(e,t,n){var a={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};if(n==="m"){return t?"хвилина":"хвилину"}else if(n==="h"){return t?"година":"годину"}else{return e+" "+r(a[n],+e)}}function n(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};if(e===true){return n["nominative"].slice(1,7).concat(n["nominative"].slice(0,1))}if(!e){return n["nominative"]}var a=/(\[[ВвУу]\]) ?dddd/.test(t)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(t)?"genitive":"nominative";return n[a][e.day()]}function a(e){return function(){return e+"о"+(this.hours()===11?"б":"")+"] LT"}}var o;e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:n,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:a("[Сьогодні "),nextDay:a("[Завтра "),lastDay:a("[Вчора "),nextWeek:a("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return a("[Минулої] dddd [").call(this);case 1:case 2:case 4:return a("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:t,m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){if(e<4){return"ночі"}else if(e<12){return"ранку"}else if(e<17){return"дня"}else{return"вечора"}},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"],a;e.defineLocale("ur",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){if(e<12){return"صبح"}return"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:true,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:true,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){if(e<12){return n?"sa":"SA"}else{return n?"ch":"CH"}},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:true,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=~~(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="凌晨"||t==="早上"||t==="上午"){return e}else if(t==="下午"||t==="晚上"){return e+12}else{return e>=11?e:e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"凌晨"}else if(a<900){return"早上"}else if(a<1130){return"上午"}else if(a<1230){return"中午"}else if(a<1800){return"下午"}else{return"晚上"}},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="凌晨"||t==="早上"||t==="上午"){return e}else if(t==="中午"){return e>=11?e:e+12}else if(t==="下午"||t==="晚上"){return e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"凌晨"}else if(a<900){return"早上"}else if(a<1130){return"上午"}else if(a<1230){return"中午"}else if(a<1800){return"下午"}else{return"晚上"}},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(8))},function(e,t,n){!function(e){"use strict";var t;e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){if(e===12){e=0}if(t==="凌晨"||t==="早上"||t==="上午"){return e}else if(t==="中午"){return e>=11?e:e+12}else if(t==="下午"||t==="晚上"){return e+12}},meridiem:function(e,t,n){var a=e*100+t;if(a<600){return"凌晨"}else if(a<900){return"早上"}else if(a<1130){return"上午"}else if(a<1230){return"中午"}else if(a<1800){return"下午"}else{return"晚上"}},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(8))},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var a,r,I=p(n(4)),o=p(n(3)),i=p(n(5)),s=p(n(6)),A=n(0),R=p(A),l=n(25),u=p(n(2)),H=p(n(12)),d=n(11),c=p(n(473)),F=p(n(313)),z=p(n(314)),f=p(n(141));function p(e){return e&&e.__esModule?e:{default:e}}function h(e){try{var t=window.getComputedStyle(e,"::-webkit-scrollbar");return!t||"none"!==t.getPropertyValue("display")}catch(e){}return!0}function m(){var e=document.documentElement;return e.scrollHeight>e.clientHeight&&0a.length&&a.every(function(e,t){return e===n[t]})},C.prototype.handleOpen=function(t,e,n,a){var r=this,o=void 0,i=this.props,s=i.mode,l=i.openMode,u=this.state.openKeys,d=u.indexOf(t);e&&-1===d?"inline"===s?"single"===l?(o=u.filter(function(e){return r.k2n[e]&&!r.isSibling(r.k2n[t].pos,r.k2n[e].pos)})).push(t):o=u.concat(t):(o=u.filter(function(e){return r.k2n[e]&&r.isAncestor(r.k2n[t].pos,r.k2n[e].pos)})).push(t):!e&&-1this.popupNode.offsetWidth&&m(this.popupNode,"width",p.offsetWidth+"px")}"outside"!==u||"hoz"===l&&1===n||(m(this.popupNode,"height",f.offsetHeight+"px"),m(this.popupNode,"overflow-y","scroll"));var h=this.popupProps;h.onOpen&&h.onOpen()},Y.prototype.handlePopupClose=function(){var e=this.props.root.popupNodes,t=e.indexOf(this.popupNode);-1 "+this.message+" (line "+this.parsedLine+": '"+this.snippet+"')":" "+this.message},e.exports=n},function(e,t){var r={}.hasOwnProperty;function n(e,t,n){this.message=e,this.parsedLine=t,this.snippet=n}(function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function a(){this.constructor=e}a.prototype=t.prototype,e.prototype=new a,e.__super__=t.prototype})(n,Error),n.prototype.toString=function(){return null!=this.parsedLine&&null!=this.snippet?" "+this.message+" (line "+this.parsedLine+": '"+this.snippet+"')":" "+this.message},e.exports=n},function(e,t,n){"use strict";t.__esModule=!0,t.triggerEvents=void 0,t.getOffsetWH=function(e,t){var n="width";"left"!==t&&"right"!==t||(n="height");return e?e.getBoundingClientRect()[n]:0},t.getOffsetLT=function(e,t){var n="left";"left"!==t&&"right"!==t||(n="top");return e.getBoundingClientRect()[n]},t.isTransformSupported=function(e){return"transform"in e||"webkitTransform"in e||"MozTransform"in e},t.toArray=function(e){var n=[];return o.default.Children.forEach(e,function(e,t){o.default.isValidElement(e)&&n.push(o.default.cloneElement(e,{key:e.key||t}))}),n};var a,r=n(0),o=(a=r)&&a.__esModule?a:{default:a};t.triggerEvents={CLICK:"click",HOVER:"hover"}},function(e,t,n){"use strict";t.__esModule=!0;var a,r=n(19),i=(a=r)&&a.__esModule?a:{default:a};t.default=function(e,t){var n=e.listType,a=e.defaultFileList,r=e.fileList,o=(0,i.default)(e,["listType","defaultFileList","fileList"]);return"text-image"===n?(t("listType=text-image","listType=image","Upload"),o.listType="image"):"picture-card"===n?(t("listType=picture-card","listType=card","Upload"),o.listType="card"):o.listType=n,"defaultFileList"in e&&(t("defaultFileList","defaultValue","Upload"),o.defaultValue=a),"fileList"in e&&(t("fileList","value","Upload"),o.value=r),o},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var o=s(n(3)),i=s(n(5)),a=s(n(6)),r=n(0);function s(e){return e&&e.__esModule?e:{default:e}}var l,u=(l=r.Component,(0,a.default)(d,l),d.prototype.abort=function(e){this.uploaderRef.abort(e)},d.prototype.startUpload=function(){this.uploaderRef.startUpload()},d.prototype.isUploading=function(){return this.uploaderRef.isUploading()},d);function d(){var e,t;(0,o.default)(this,d);for(var n=arguments.length,a=Array(n),r=0;re.slidesToShow&&(t=e.slideWidth*e.slidesToShow*-1,r=e.slideHeight*e.slidesToShow*-1),e.slideCount%e.slidesToScroll!=0){var o=e.slideIndex+e.slidesToScroll>e.slideCount&&e.slideCount>e.slidesToShow;if(e.rtl)o=(e.slideIndex>=e.slideCount?e.slideCount-e.slideIndex:e.slideIndex)+e.slidesToScroll>e.slideCount&&e.slideCount>e.slidesToShow;o&&(r=e.slideIndex>e.slideCount?(t=(e.slidesToShow-(e.slideIndex-e.slideCount))*e.slideWidth*-1,(e.slidesToShow-(e.slideIndex-e.slideCount))*e.slideHeight*-1):(t=e.slideCount%e.slidesToScroll*e.slideWidth*-1,e.slideCount%e.slidesToScroll*e.slideHeight*-1))}}else e.slideCount%e.slidesToScroll!=0&&e.slideIndex+e.slidesToScroll>e.slideCount&&e.slideCount>e.slidesToShow&&(t=(e.slidesToShow-e.slideCount%e.slidesToScroll)*e.slideWidth);if(e.centerMode&&(e.infinite?t+=e.slideWidth*Math.floor(e.slidesToShow/2):t=e.slideWidth*Math.floor(e.slidesToShow/2)),n=e.vertical?e.slideIndex*e.slideHeight*-1+r:e.slideIndex*e.slideWidth*-1+t,!0===e.variableWidth){var i=void 0;n=(a=e.slideCount<=e.slidesToShow||!1===e.infinite?s.default.findDOMNode(e.trackRef).childNodes[e.slideIndex]:(i=e.slideIndex+e.slidesToShow,s.default.findDOMNode(e.trackRef).childNodes[i]))?-1*a.offsetLeft:0,!0===e.centerMode&&(a=!1===e.infinite?s.default.findDOMNode(e.trackRef).children[e.slideIndex]:s.default.findDOMNode(e.trackRef).children[e.slideIndex+e.slidesToShow+1])&&(n=-1*a.offsetLeft+(e.listWidth-a.offsetWidth)/2)}return n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.routerMiddleware=t.routerActions=t.goForward=t.goBack=t.go=t.replace=t.push=t.CALL_HISTORY_METHOD=t.routerReducer=t.LOCATION_CHANGE=t.syncHistoryWithStore=void 0;var a=n(315);Object.defineProperty(t,"LOCATION_CHANGE",{enumerable:!0,get:function(){return a.LOCATION_CHANGE}}),Object.defineProperty(t,"routerReducer",{enumerable:!0,get:function(){return a.routerReducer}});var r=n(316);Object.defineProperty(t,"CALL_HISTORY_METHOD",{enumerable:!0,get:function(){return r.CALL_HISTORY_METHOD}}),Object.defineProperty(t,"push",{enumerable:!0,get:function(){return r.push}}),Object.defineProperty(t,"replace",{enumerable:!0,get:function(){return r.replace}}),Object.defineProperty(t,"go",{enumerable:!0,get:function(){return r.go}}),Object.defineProperty(t,"goBack",{enumerable:!0,get:function(){return r.goBack}}),Object.defineProperty(t,"goForward",{enumerable:!0,get:function(){return r.goForward}}),Object.defineProperty(t,"routerActions",{enumerable:!0,get:function(){return r.routerActions}});var o=s(n(477)),i=s(n(478));function s(e){return e&&e.__esModule?e:{default:e}}t.syncHistoryWithStore=o.default,t.routerMiddleware=i.default},function(e,t,n){"use strict";function a(r){return function(e){var n=e.dispatch,a=e.getState;return function(t){return function(e){return"function"==typeof e?e(n,a,r):t(e)}}}}var r=a();r.withExtraArgument=a,t.a=r},function(e,t,n){"use strict";e.exports=n(481)},function(e,t,n){"use strict";function a(e){var t,n=e.Symbol;return"function"==typeof n?n.observable?t=n.observable:(t=n("observable"),n.observable=t):t="@@observable",t}n.d(t,"a",function(){return a})},function(e,t,n){"use strict";t.__esModule=!0,t.default={momentLocale:"en",Timeline:{expand:"Expand",fold:"Fold"},Balloon:{close:"Close"},Card:{expand:"Expand",fold:"Fold"},Calendar:{today:"Today",now:"Now",ok:"OK",clear:"Clear",month:"Month",year:"Year",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",prevDecade:"Previous Decade",nextDecade:"Next Decade",yearSelectAriaLabel:"Select Year",monthSelectAriaLabel:"Select Month"},DatePicker:{placeholder:"Select Date",datetimePlaceholder:"Select Date And Time",monthPlaceholder:"Select Month",yearPlaceholder:"Select Year",weekPlaceholder:"Select week",now:"Now",selectTime:"Select Time",selectDate:"Select Date",ok:"OK",clear:"Clear",startPlaceholder:"Start Date",endPlaceholder:"End Date",hour:"H",minute:"M",second:"S"},Dialog:{close:"Close",ok:"OK",cancel:"Cancel"},Drawer:{close:"Close"},Message:{closeAriaLabel:"Close"},Pagination:{prev:"Previous",next:"Next",goTo:"Go to",page:"Page",go:"View",total:"Page {current}, {total} pages",labelPrev:"Previous page, current page {current}",labelNext:"Next page, current page {current}",inputAriaLabel:"Please enter what page to skip to",selectAriaLabel:"Please select how many items are displayed on each page",pageSize:"Items per page:"},Input:{clear:"Clear"},Select:{selectPlaceholder:"Please Select",autoCompletePlaceholder:"Please Input",notFoundContent:"No Options",maxTagPlaceholder:"Selected {selected}/{total} Total"},Table:{empty:"No Data",ok:"OK",reset:"Reset",asc:"Ascending Order",desc:"Descending Order",expanded:"Expanded",folded:"Folded",filter:"Filter",selectAll:"Select All"},TimePicker:{placeholder:"Select Time",clear:"Clear",hour:"H",minute:"M",second:"S"},Transfer:{items:"items",item:"item",moveAll:"Move All",searchPlaceholder:"Please Input",moveToLeft:"Uncheck Selected Elements",moveToRight:"Submit Selected Elements"},Upload:{card:{cancel:"Cancel",addPhoto:"Add Picture",download:"Download",delete:"Delete"},drag:{text:"Click or Drag the file to this area to upload",hint:"Support docx, xls, PDF, rar, zip, PNG, JPG and other files upload"},upload:{delete:"Delete"}},Search:{buttonText:"Search"},Tag:{delete:"Delete"},Rating:{description:"Rating Options"},Switch:{on:"on",off:"off"}},e.exports=t.default},function(e,t,n){e.exports=n(549)},function(n,e,t){"use strict";(function(e){var t="__global_unique_id__";n.exports=function(){return e[t]=(e[t]||0)+1}}).call(this,t(142))},function(e,t,n){"use strict";var a=n(348),r={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},c={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function f(e){return a.isMemo(e)?o:i[e.$$typeof]||r}i[a.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0};var p=Object.defineProperty,h=Object.getOwnPropertyNames,m=Object.getOwnPropertySymbols,g=Object.getOwnPropertyDescriptor,y=Object.getPrototypeOf,v=Object.prototype;e.exports=function e(t,n,a){if("string"==typeof n)return t;if(v){var r=y(n);r&&r!==v&&e(t,r,a)}var o=h(n);m&&(o=o.concat(m(n)));for(var i=f(t),s=f(n),l=0;l\n com.alibaba.nacos\n nacos-client\n ${version}\n \n*/\npackage com.alibaba.nacos.example;\n\nimport java.util.Properties;\nimport java.util.concurrent.Executor;\nimport com.alibaba.nacos.api.NacosFactory;\nimport com.alibaba.nacos.api.config.ConfigService;\nimport com.alibaba.nacos.api.config.listener.Listener;\nimport com.alibaba.nacos.api.exception.NacosException;\n\n/**\n * Config service example\n * \n * @author Nacos\n *\n */\npublic class ConfigExample {\n\n\tpublic static void main(String[] args) throws NacosException, InterruptedException {\n\t\tString serverAddr = "localhost";\n\t\tString dataId = "'.concat(e.dataId,'";\n\t\tString group = "').concat(e.group,'";\n\t\tProperties properties = new Properties();\n\t\tproperties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);\n\t\tConfigService configService = NacosFactory.createConfigService(properties);\n\t\tString content = configService.getConfig(dataId, group, 5000);\n\t\tSystem.out.println(content);\n\t\tconfigService.addListener(dataId, group, new Listener() {\n\t\t\t@Override\n\t\t\tpublic void receiveConfigInfo(String configInfo) {\n\t\t\t\tSystem.out.println("recieve:" + configInfo);\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic Executor getExecutor() {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t\t\n\t\tboolean isPublishOk = configService.publishConfig(dataId, group, "content");\n\t\tSystem.out.println(isPublishOk);\n\t\t\n\t\tThread.sleep(3000);\n\t\tcontent = configService.getConfig(dataId, group, 5000);\n\t\tSystem.out.println(content);\n\n\t\tboolean isRemoveOk = configService.removeConfig(dataId, group);\n\t\tSystem.out.println(isRemoveOk);\n\t\tThread.sleep(3000);\n\n\t\tcontent = configService.getConfig(dataId, group, 5000);\n\t\tSystem.out.println(content);\n\t\tThread.sleep(300000);\n\n\t}\n}\n')}},{key:"getNodejsCode",value:function(){return"TODO"}},{key:"getCppCode",value:function(){return"TODO"}},{key:"getShellCode",value:function(){return"TODO"}},{key:"getPythonCode",value:function(){return"TODO"}},{key:"openDialog",value:function(e){var t=this;this.setState({dialogvisible:!0}),this.record=e,setTimeout(function(){t.getData()})}},{key:"closeDialog",value:function(){this.setState({dialogvisible:!1})}},{key:"createCodeMirror",value:function(e,t){var n=this.refs.codepreview;n&&(n.innerHTML="",this.cm=window.CodeMirror(n,{value:t,mode:e,height:400,width:500,lineNumbers:!0,theme:"xq-light",lint:!0,tabMode:"indent",autoMatchParens:!0,textWrapping:!0,gutters:["CodeMirror-lint-markers"],extraKeys:{F1:function(e){e.setOption("fullScreen",!e.getOption("fullScreen"))},Esc:function(e){e.getOption("fullScreen")&&e.setOption("fullScreen",!1)}}}))}},{key:"changeTab",value:function(e,t){var n=this;setTimeout(function(){n[e]=!0,n.createCodeMirror("text/javascript",t)})}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=ee.a.createElement("div",null);return ee.a.createElement("div",null,ee.a.createElement(F.a,{title:t.sampleCode,style:{width:"80%"},visible:this.state.dialogvisible,footer:n,onClose:this.closeDialog.bind(this)},ee.a.createElement("div",{style:{height:500}},ee.a.createElement(se.a,{tip:t.loading,style:{width:"100%"},visible:this.state.loading},ee.a.createElement(ue.a,{shape:"text",style:{height:40,paddingBottom:10}},ee.a.createElement(de,{title:"Java",key:1,onClick:this.changeTab.bind(this,"commoneditor1",this.defaultCode)}),ee.a.createElement(de,{title:"Spring Boot",key:2,onClick:this.changeTab.bind(this,"commoneditor2",this.sprigboot_code)}),ee.a.createElement(de,{title:"Spring Cloud",key:21,onClick:this.changeTab.bind(this,"commoneditor21",this.sprigcloud_code)}),ee.a.createElement(de,{title:"Node.js",key:3,onClick:this.changeTab.bind(this,"commoneditor3",this.nodejsCode)}),ee.a.createElement(de,{title:"C++",key:4,onClick:this.changeTab.bind(this,"commoneditor4",this.cppCode)}),ee.a.createElement(de,{title:"Shell",key:5,onClick:this.changeTab.bind(this,"commoneditor5",this.shellCode)}),ee.a.createElement(de,{title:"Python",key:6,onClick:this.changeTab.bind(this,"commoneditor6",this.pythonCode)})),ee.a.createElement("div",{ref:"codepreview"})))))}}]),n}(ee.a.Component),r.displayName="ShowCodeing",a=o))||a,fe=(n(64),n(35)),pe=n.n(fe),he=(n(674),pe.a.Row),me=pe.a.Col,ge=(0,$.a.config)((l=s=function(e){function n(e){var t;return Object(B.a)(this,n),(t=Object(U.a)(this,Object(K.a)(n).call(this,e))).state={visible:!1,title:"",content:"",isok:!0,dataId:"",group:""},t}return Object(G.a)(n,e),Object(V.a)(n,[{key:"componentDidMount",value:function(){this.initData()}},{key:"initData",value:function(){var e=this.props.locale,t=void 0===e?{}:e;this.setState({title:t.confManagement})}},{key:"openDialog",value:function(e){this.setState({visible:!0,title:e.title,content:e.content,isok:e.isok,dataId:e.dataId,group:e.group,message:e.message})}},{key:"closeDialog",value:function(){this.setState({visible:!1})}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=ee.a.createElement("div",{style:{textAlign:"right"}},ee.a.createElement(M.a,{type:"primary",onClick:this.closeDialog.bind(this)},t.determine));return ee.a.createElement("div",null,ee.a.createElement(F.a,{visible:this.state.visible,footer:n,style:{width:555},onCancel:this.closeDialog.bind(this),onClose:this.closeDialog.bind(this),title:t.deletetitle},ee.a.createElement("div",null,ee.a.createElement(he,null,ee.a.createElement(me,{span:"4",style:{paddingTop:16}},ee.a.createElement(I.a,{type:"".concat(this.state.isok?"success":"delete","-filling"),style:{color:this.state.isok?"green":"red"},size:"xl"})),ee.a.createElement(me,{span:"20"},ee.a.createElement("div",null,ee.a.createElement("h3",null,this.state.isok?t.deletedSuccessfully:t.deleteFailed),ee.a.createElement("p",null,ee.a.createElement("span",{style:{color:"#999",marginRight:5}},"Data ID:"),ee.a.createElement("span",{style:{color:"#c7254e"}},this.state.dataId)),ee.a.createElement("p",null,ee.a.createElement("span",{style:{color:"#999",marginRight:5}},"Group:"),ee.a.createElement("span",{style:{color:"#c7254e"}},this.state.group)),this.state.isok?"":ee.a.createElement("p",{style:{color:"red"}},this.state.message)))))))}}]),n}(ee.a.Component),s.displayName="DeleteDialog",i=l))||i,ye=(n(675),n(392)),ve=n.n(ye),_e=(0,$.a.config)((c=d=function(e){function t(){return Object(B.a)(this,t),Object(U.a)(this,Object(K.a)(t).apply(this,arguments))}return Object(G.a)(t,e),Object(V.a)(t,[{key:"render",value:function(){var e=this.props,t=e.data,n=void 0===t?{}:t,a=e.height,r=e.locale,o=void 0===r?{}:r;return ee.a.createElement("div",null,"notice"===n.modeType?ee.a.createElement("div",{"data-spm-click":"gostr=/aliyun;locaid=notice"},ee.a.createElement(ve.a,{style:{marginBottom:1u?Y.a.createElement(J.a,{className:"pagination",total:l.count,pageSize:u,onChange:function(e){return a.onChangePage(e)}}):null,Y.a.createElement(Q,{ref:this.editInstanceDialog,serviceName:o,clusterName:n,groupName:i,openLoading:function(){return a.openLoading()},closeLoading:function(){return a.closeLoading()},getInstanceList:function(){return a.getInstanceList()}})):null}}]),n}(Y.a.Component),d.displayName="InstanceTable",u=c))||u,ee=n(44),te=(n(688),P.a.Item),ne={labelCol:{fixedSpan:10},wrapperCol:{span:14}},ae=(0,O.a.config)((h=p=function(e){function n(e){var t;return Object(x.a)(this,n),(t=Object(T.a)(this,Object(C.a)(n).call(this,e))).editServiceDialog=Y.a.createRef(),t.editClusterDialog=Y.a.createRef(),t.state={serviceName:Object(ee.b)(e.location.search,"name"),groupName:Object(ee.b)(e.location.search,"groupName"),loading:!1,currentPage:1,clusters:[],instances:{},service:{},pageSize:10,pageNum:{}},t}return Object(L.a)(n,e),Object(E.a)(n,[{key:"componentDidMount",value:function(){this.state.serviceName?this.getServiceDetail():this.props.history.goBack()}},{key:"getServiceDetail",value:function(){var o=this,e=this.state,t=e.serviceName,n=e.groupName;Object(I.c)({url:"v1/ns/catalog/service?serviceName=".concat(t,"&groupName=").concat(n),beforeSend:function(){return o.openLoading()},success:function(e){var t=e.clusters,n=void 0===t?[]:t,a=e.service,r=void 0===a?{}:a;return o.setState({service:r,clusters:n})},error:function(e){return k.a.error(e.responseText||"error")},complete:function(){return o.closeLoading()}})}},{key:"openLoading",value:function(){this.setState({loading:!0})}},{key:"closeLoading",value:function(){this.setState({loading:!1})}},{key:"openEditServiceDialog",value:function(){this.editServiceDialog.current.getInstance().show(this.state.service)}},{key:"openClusterDialog",value:function(e){this.editClusterDialog.current.getInstance().show(e)}},{key:"render",value:function(){var t=this,e=this.props.locale,n=void 0===e?{}:e,a=this.state,r=a.serviceName,o=a.groupName,i=a.loading,s=a.service,l=void 0===s?{}:s,u=a.clusters,d=l.metadata,c=void 0===d?{}:d,f=l.selector,p=void 0===f?{}:f,h="";return Object.keys(c).length&&(h=JSON.stringify(c,null,"\t")),Y.a.createElement("div",{className:"main-container service-detail"},Y.a.createElement(g.a,{shape:"flower",tip:"Loading...",className:"loading",visible:i,color:"#333"},Y.a.createElement("h1",{style:{position:"relative",width:"100%"}},n.serviceDetails,Y.a.createElement(w.a,{type:"primary",className:"header-btn",onClick:function(){return t.props.history.goBack()}},n.back),Y.a.createElement(w.a,{type:"normal",className:"header-btn",onClick:function(){return t.openEditServiceDialog()}},n.editService)),Y.a.createElement(P.a,ne,Y.a.createElement(te,{label:"".concat(n.serviceName,":")},Y.a.createElement(S.a,{value:l.name,readOnly:!0})),Y.a.createElement(te,{label:"".concat(n.groupName,":")},Y.a.createElement(S.a,{value:l.groupName,readOnly:!0})),Y.a.createElement(te,{label:"".concat(n.protectThreshold,":")},Y.a.createElement(S.a,{value:l.protectThreshold,readOnly:!0})),Y.a.createElement(te,{label:"".concat(n.metadata,":")},Y.a.createElement(K.a,{language:"json",width:"100%",height:200,value:h,options:U.c})),Y.a.createElement(te,{label:"".concat(n.type,":")},Y.a.createElement(S.a,{value:p.type,readOnly:!0})),"label"===l.type&&Y.a.createElement(te,{label:"".concat(n.selector,":")},Y.a.createElement(S.a,{value:p.selector,readOnly:!0}))),u.map(function(e){return Y.a.createElement(v.a,{key:e.name,className:"cluster-card",title:"".concat(n.cluster,":"),subTitle:e.name,contentHeight:"auto",extra:Y.a.createElement(w.a,{type:"normal",onClick:function(){return t.openClusterDialog(e)}},n.editCluster)},Y.a.createElement(Z,{clusterName:e.name,serviceName:r,groupName:o}))})),Y.a.createElement(A.a,{ref:this.editServiceDialog,openLoading:function(){return t.openLoading()},closeLoading:function(){return t.closeLoading()},getServiceDetail:function(){return t.getServiceDetail()}}),Y.a.createElement(q,{ref:this.editClusterDialog,openLoading:function(){return t.openLoading()},closeLoading:function(){return t.closeLoading()},getServiceDetail:function(){return t.getServiceDetail()}}))}}]),n}(Y.a.Component),p.displayName="ServiceDetail",f=h))||f;t.a=ae},function(e,t,d){"use strict";d(46);var n,a,r,o,i,s,l=d(30),y=d.n(l),u=(d(31),d(21)),v=d.n(u),c=(d(364),d(123)),_=d.n(c),f=(d(38),d(24)),b=d.n(f),p=(d(114),d(77)),w=d.n(p),h=(d(101),d(67)),M=d.n(h),m=(d(66),d(32)),k=d.n(m),g=(d(39),d(9)),S=d.n(g),x=(d(34),d(10)),E=d.n(x),T=(d(119),d(55)),C=d.n(T),L=d(56),D=d(23),O=(d(33),d(20)),N=d.n(O),P=(d(50),d(28)),j=d.n(P),Y=d(13),I=d(14),A=d(15),R=d(16),H=d(17),F=(d(26),d(7)),z=d.n(F),W=(d(64),d(35)),B=d.n(W),V=d(0),U=d.n(V),K=d(1),q=d(44),G=d(37),J=d(124),$=d(94),X=(d(635),B.a.Row),Q=B.a.Col,Z=(0,z.a.config)((r=a=function(e){function n(e){var t;return Object(Y.a)(this,n),(t=Object(A.a)(this,Object(R.a)(n).call(this,e))).diffeditor=U.a.createRef(),t.state={dialogvisible:!1},t}return Object(H.a)(n,e),Object(I.a)(n,[{key:"openDialog",value:function(e,t){var n=this;this.setState({dialogvisible:!0}),setTimeout(function(){n.createDiffCodeMirror(e,t)})}},{key:"closeDialog",value:function(){this.setState({dialogvisible:!1})}},{key:"createDiffCodeMirror",value:function(e,t){var n=this.diffeditor.current;n.innerHTML="",this.diffeditor=window.CodeMirror.MergeView(n,{value:e||"",readOnly:!0,origLeft:null,orig:t||"",lineNumbers:!0,mode:this.mode,theme:"xq-light",highlightDifferences:!0,connect:"align",collapseIdentical:!1})}},{key:"confirmPub",value:function(){this.closeDialog(),this.props.publishConfig()}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=U.a.createElement("div",null," ",U.a.createElement(v.a,{type:"primary",onClick:this.confirmPub.bind(this)},t.publish));return U.a.createElement("div",null,U.a.createElement(N.a,{title:t.contents,style:{width:"80%"},visible:this.state.dialogvisible,footer:n,onClose:this.closeDialog.bind(this)},U.a.createElement("div",{style:{height:400}},U.a.createElement("div",null,U.a.createElement(X,null,U.a.createElement(Q,{style:{textAlign:"center"}},t.currentArea),U.a.createElement(Q,{style:{textAlign:"center"}},t.originalValue))),U.a.createElement("div",{style:{clear:"both",height:480},ref:this.diffeditor}))))}}]),n}(U.a.Component),a.displayName="DiffEditorDialog",n=r))||n,ee=(d(636),d(637),d(160),B.a.Row),te=B.a.Col,ne=[{value:"text",label:"TEXT"},{value:"json",label:"JSON"},{value:"xml",label:"XML"},{value:"yaml",label:"YAML"},{value:"html",label:"HTML"},{value:"properties",label:"Properties"}],ae=["production","beta"],re=(0,z.a.config)((s=i=function(e){function n(e){var t;return Object(Y.a)(this,n),(t=Object(A.a)(this,Object(R.a)(n).call(this,e))).state={loading:!1,isBeta:!1,isNewConfig:!0,betaPublishSuccess:!1,betaIps:"",tabActiveKey:"",form:{dataId:"",group:"",content:"",appName:"",desc:"",config_tags:[],type:"text"},tagDataSource:[],openAdvancedSettings:!1},t.successDialog=U.a.createRef(),t.diffEditorDialog=U.a.createRef(),t}return Object(H.a)(n,e),Object(I.a)(n,[{key:"componentDidMount",value:function(){var t=this,e=!Object(K.b)("dataId"),n=Object(K.b)("group").trim();this.setState({isNewConfig:e},function(){e?(n&&t.setState({group:n}),t.initMoacoEditor("text","")):t.changeForm({dataId:Object(K.b)("dataId").trim(),group:n},function(){t.getConfig(!0).then(function(e){e?t.setState({isBeta:!0,tabActiveKey:"beta",betaPublishSuccess:!0}):t.getConfig()})})})}},{key:"initMoacoEditor",value:function(e,t){var n=this,a=document.getElementById("container");a.innerHTML="";var r={value:t,language:e,codeLens:!(this.monacoEditor=null),selectOnLineNumbers:!0,roundedSelection:!1,readOnly:!1,lineNumbersMinChars:!0,theme:"vs-dark",wordWrapColumn:120,folding:!1,showFoldingControls:"always",wordWrap:"wordWrapColumn",cursorStyle:"line",automaticLayout:!0};window.monaco?this.monacoEditor=window.monaco.editor.create(a,r):window.importEditor(function(){n.monacoEditor=window.monaco.editor.create(a,r)})}},{key:"createDiffCodeMirror",value:function(e,t){var n=this.diffEditorDialog.current.getInstance();n.innerHTML="",this.diffeditor=window.CodeMirror.MergeView(n,{value:e||"",origLeft:null,orig:t||"",lineNumbers:!0,mode:this.mode,theme:"xq-light",highlightDifferences:!0,connect:"align",collapseIdentical:!1})}},{key:"openDiff",value:function(e){this.diffcb=e;var t=this.monacoEditor.getValue(),n=this.codeVal||"";t=t.replace(/\r\n/g,"\n").replace(/\n/g,"\r\n"),n=n.replace(/\r\n/g,"\n").replace(/\n/g,"\r\n"),this.diffEditorDialog.current.getInstance().openDialog(t,n)}},{key:"clickTab",value:function(e){var t=this;this.setState({tabActiveKey:e},function(){return t.getConfig("beta"===e)})}},{key:"getCodeVal",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=this.state.form,a=(n.type,n.content),r=this.monacoEditor?this.monacoEditor.getValue():a;return r||(j.a.error({content:t.submitFailed,align:"cc cc"}),!1)}},{key:"publish",value:function(){var n=this,e=this.props.locale,a=void 0===e?{}:e,t=this.state.form.type;this.state.isNewConfig&&this.validation();var r=this.getCodeVal();if(r)return J.a.validate({content:r,type:t})?this._publishConfig():new Promise(function(e,t){N.a.confirm({content:a.codeValErrorPrompt,onOk:function(){return e(n._publishConfig())},onCancel:function(){return e(!1)}})})}},{key:"_publishConfig",value:function(e){var t=this,n=0\n com.alibaba.nacos\n nacos-client\n ${latest.version}\n \n*/\npackage com.alibaba.nacos.example;\n\nimport java.util.Properties;\n\nimport com.alibaba.nacos.api.exception.NacosException;\nimport com.alibaba.nacos.api.naming.NamingFactory;\nimport com.alibaba.nacos.api.naming.NamingService;\nimport com.alibaba.nacos.api.naming.listener.Event;\nimport com.alibaba.nacos.api.naming.listener.EventListener;\nimport com.alibaba.nacos.api.naming.listener.NamingEvent;\n\n/**\n * @author nkorange\n */\npublic class NamingExample {\n\n public static void main(String[] args) throws NacosException {\n\n Properties properties = new Properties();\n properties.setProperty("serverAddr", System.getProperty("serverAddr"));\n properties.setProperty("namespace", System.getProperty("namespace"));\n\n NamingService naming = NamingFactory.createNamingService(properties);\n\n naming.registerInstance("'.concat(this.record.name,'", "11.11.11.11", 8888, "TEST1");\n\n naming.registerInstance("').concat(this.record.name,'", "2.2.2.2", 9999, "DEFAULT");\n\n System.out.println(naming.getAllInstances("').concat(this.record.name,'"));\n\n naming.deregisterInstance("').concat(this.record.name,'", "2.2.2.2", 9999, "DEFAULT");\n\n System.out.println(naming.getAllInstances("').concat(this.record.name,'"));\n\n naming.subscribe("').concat(this.record.name,'", new EventListener() {\n @Override\n public void onEvent(Event event) {\n System.out.println(((NamingEvent)event).getServiceName());\n System.out.println(((NamingEvent)event).getInstances());\n }\n });\n }\n}')}},{key:"getSpringCode",value:function(){return'/* Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-example/nacos-spring-discovery-example\n* pom.xml\n \n com.alibaba.nacos\n nacos-spring-context\n ${latest.version}\n \n*/\n\n// Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-example/nacos-spring-discovery-example/src/main/java/com/alibaba/nacos/example/spring\npackage com.alibaba.nacos.example.spring;\n\nimport com.alibaba.nacos.api.annotation.NacosProperties;\nimport com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\n@EnableNacosDiscovery(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))\npublic class NacosConfiguration {\n\n}\n\n// Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-example/nacos-spring-discovery-example/src/main/java/com/alibaba/nacos/example/spring/controller\npackage com.alibaba.nacos.example.spring.controller;\n\nimport com.alibaba.nacos.api.annotation.NacosInjected;\nimport com.alibaba.nacos.api.exception.NacosException;\nimport com.alibaba.nacos.api.naming.NamingService;\nimport com.alibaba.nacos.api.naming.pojo.Instance;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport java.util.List;\n\nimport static org.springframework.web.bind.annotation.RequestMethod.GET;\n\n@Controller\n@RequestMapping("discovery")\npublic class DiscoveryController {\n\n @NacosInjected\n private NamingService namingService;\n\n @RequestMapping(value = "/get", method = GET)\n @ResponseBody\n public List get(@RequestParam String serviceName) throws NacosException {\n return namingService.getAllInstances(serviceName);\n }\n}'}},{key:"getSpringBootCode",value:function(){return'/* Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example/nacos-spring-boot-discovery-example\n* pom.xml\n \n com.alibaba.boot\n nacos-discovery-spring-boot-starter\n ${latest.version}\n \n*/\n/* Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example/nacos-spring-boot-discovery-example/src/main/resources\n* application.properties\n nacos.discovery.server-addr=127.0.0.1:8848\n*/ \n// Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example/nacos-spring-boot-discovery-example/src/main/java/com/alibaba/nacos/example/spring/boot/controller\n\npackage com.alibaba.nacos.example.spring.boot.controller;\n\nimport com.alibaba.nacos.api.annotation.NacosInjected;\nimport com.alibaba.nacos.api.exception.NacosException;\nimport com.alibaba.nacos.api.naming.NamingService;\nimport com.alibaba.nacos.api.naming.pojo.Instance;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.ResponseBody;\n\nimport java.util.List;\n\nimport static org.springframework.web.bind.annotation.RequestMethod.GET;\n\n@Controller\n@RequestMapping("discovery")\npublic class DiscoveryController {\n\n @NacosInjected\n private NamingService namingService;\n\n @RequestMapping(value = "/get", method = GET)\n @ResponseBody\n public List get(@RequestParam String serviceName) throws NacosException {\n return namingService.getAllInstances(serviceName);\n }\n}'}},{key:"getSpringCloudCode",value:function(){return"/* Refer to document: https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/\n* pom.xml \n \n org.springframework.cloud\n spring-cloud-starter-alibaba-nacos-discovery\n ${latest.version}\n \n*/\n\n// nacos-spring-cloud-provider-example\n\n/* Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-provider-example/src/main/resources\n* application.properties\nserver.port=18080\nspring.application.name=".concat(this.record.name,'\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n*/ \n\n// Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-provider-example/src/main/java/com/alibaba/nacos/example/spring/cloud\npackage com.alibaba.nacos.example.spring.cloud;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RestController;\n\n/**\n * @author xiaojing\n */\n@SpringBootApplication\n@EnableDiscoveryClient \npublic class NacosProviderApplication {\n\n public static void main(String[] args) {\n SpringApplication.run(NacosProviderApplication.class, args);\n}\n\n @RestController\n class EchoController {\n @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)\n public String echo(@PathVariable String string) {\n return "Hello Nacos Discovery " + string;\n }\n }\n}\n\n// nacos-spring-cloud-consumer-example\n\n/* Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-consumer-example/src/main/resources\n* application.properties\nspring.application.name=micro-service-oauth2\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n*/ \n\n// Refer to document: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-consumer-example/src/main/java/com/alibaba/nacos/example/spring/cloud\npackage com.alibaba.nacos.example.spring.cloud;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.cloud.client.loadbalancer.LoadBalanced;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.client.RestTemplate;\n\n/**\n * @author xiaojing\n */\n@SpringBootApplication\n@EnableDiscoveryClient\npublic class NacosConsumerApplication {\n\n @LoadBalanced\n @Bean\n public RestTemplate restTemplate() {\n return new RestTemplate();\n }\n\n public static void main(String[] args) {\n SpringApplication.run(NacosConsumerApplication.class, args);\n }\n\n @RestController\n public class TestController {\n\n private final RestTemplate restTemplate;\n\n @Autowired\n public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}\n\n @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)\n public String echo(@PathVariable String str) {\n return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);\n }\n }\n}')}},{key:"getNodejsCode",value:function(){return"TODO"}},{key:"getCppCode",value:function(){return"TODO"}},{key:"getShellCode",value:function(){return"TODO"}},{key:"getPythonCode",value:function(){return"TODO"}},{key:"openDialog",value:function(e){var t=this;this.setState({dialogvisible:!0}),this.record=e,setTimeout(function(){t.getData()})}},{key:"closeDialog",value:function(){this.setState({dialogvisible:!1})}},{key:"createCodeMirror",value:function(e,t){var n=this.refs.codepreview;n&&(n.innerHTML="",this.cm=window.CodeMirror(n,{value:t,mode:e,height:400,width:500,lineNumbers:!0,theme:"xq-light",lint:!0,tabMode:"indent",autoMatchParens:!0,textWrapping:!0,gutters:["CodeMirror-lint-markers"],extraKeys:{F1:function(e){e.setOption("fullScreen",!e.getOption("fullScreen"))},Esc:function(e){e.getOption("fullScreen")&&e.setOption("fullScreen",!1)}}}),this.cm.setSize("auto","490px"))}},{key:"changeTab",value:function(e,t){var n=this;setTimeout(function(){n[e]=!0,n.createCodeMirror("text/javascript",t)})}},{key:"render",value:function(){var e=this.props.locale,t=void 0===e?{}:e,n=z.a.createElement("div",null);return z.a.createElement("div",null,z.a.createElement(y.a,{title:t.sampleCode,style:{width:"80%"},visible:this.state.dialogvisible,footer:n,onClose:this.closeDialog.bind(this)},z.a.createElement("div",{style:{height:500}},z.a.createElement(S.a,{tip:t.loading,style:{width:"100%"},visible:this.state.loading},z.a.createElement(q.a,{shape:"text",style:{height:40,paddingBottom:10}},z.a.createElement(G,{title:"Java",key:0,onClick:this.changeTab.bind(this,"commoneditor1",this.defaultCode)}),z.a.createElement(G,{title:"Spring",key:1,onClick:this.changeTab.bind(this,"commoneditor1",this.springCode)}),z.a.createElement(G,{title:"Spring Boot",key:2,onClick:this.changeTab.bind(this,"commoneditor2",this.sprigbootCode)}),z.a.createElement(G,{title:"Spring Cloud",key:21,onClick:this.changeTab.bind(this,"commoneditor21",this.sprigcloudCode)}),z.a.createElement(G,{title:"Node.js",key:3,onClick:this.changeTab.bind(this,"commoneditor3",this.nodejsCode)}),z.a.createElement(G,{title:"C++",key:4,onClick:this.changeTab.bind(this,"commoneditor4",this.cppCode)}),z.a.createElement(G,{title:"Shell",key:5,onClick:this.changeTab.bind(this,"commoneditor5",this.shellCode)}),z.a.createElement(G,{title:"Python",key:6,onClick:this.changeTab.bind(this,"commoneditor6",this.pythonCode)})),z.a.createElement("div",{ref:"codepreview"})))))}}]),n}(z.a.Component),r.displayName="ShowServiceCodeing",a=o))||a,$=(n(687),H.a.Item),X=A.a.Row,Q=A.a.Col,Z=Y.a.Column,ee=(0,P.a.config)((l=s=function(e){function t(e){var n;return Object(b.a)(this,t),(n=Object(M.a)(this,Object(k.a)(t).call(this,e))).getQueryLater=function(){setTimeout(function(){return n.queryServiceList()})},n.showcode=function(){setTimeout(function(){return n.queryServiceList()})},n.setNowNameSpace=function(e,t){return n.setState({nowNamespaceName:e,nowNamespaceId:t})},n.rowColor=function(e){return{className:e.healthyInstanceCount?"":"row-bg-red"}},n.editServiceDialog=z.a.createRef(),n.showcode=z.a.createRef(),n.state={loading:!1,total:0,pageSize:10,currentPage:1,dataSource:[],search:{serviceName:"",groupName:""},hasIpCount:!("false"===localStorage.getItem("hasIpCount"))},n.field=new _.a(Object(D.a)(n)),n}return Object(O.a)(t,e),Object(w.a)(t,[{key:"openLoading",value:function(){this.setState({loading:!0})}},{key:"closeLoading",value:function(){this.setState({loading:!1})}},{key:"openEditServiceDialog",value:function(){try{this.editServiceDialog.current.getInstance().show(this.state.service)}catch(e){}}},{key:"queryServiceList",value:function(){var i=this,e=this.state,t=e.currentPage,n=e.pageSize,a=e.search,r=e.withInstances,o=void 0!==r&&r,s=e.hasIpCount,l=["hasIpCount=".concat(s),"withInstances=".concat(o),"pageNo=".concat(t),"pageSize=".concat(n),"serviceNameParam=".concat(a.serviceName),"groupNameParam=".concat(a.groupName)];Object(W.c)({url:"v1/ns/catalog/services?".concat(l.join("&")),success:function(e){var t=0this.state.pageSize&&z.a.createElement("div",{style:{marginTop:10,textAlign:"right"}},z.a.createElement(x.a,{current:this.state.currentPage,total:this.state.total,pageSize:this.state.pageSize,onChange:function(e){return a.setState({currentPage:e},function(){return a.queryServiceList()})}}))),z.a.createElement(J,{ref:this.showcode}),z.a.createElement(U.a,{ref:this.editServiceDialog,openLoading:function(){return a.openLoading()},closeLoading:function(){return a.closeLoading()},queryServiceList:function(){return a.setState({currentPage:1},function(){return a.queryServiceList()})}}))}}]),t}(z.a.Component),s.displayName="ServiceList",i=l))||i;t.a=ee},function(e,t,n){"use strict";n(59);var a,r,o,i,s,l,u=n(41),d=n.n(u),c=(n(33),n(20)),f=n.n(c),p=(n(58),n(18)),h=n.n(p),m=(n(31),n(21)),g=n.n(m),y=n(13),v=n(14),_=n(15),b=n(16),w=n(17),M=(n(26),n(7)),k=n.n(M),S=n(0),x=n.n(S),E=n(42),T=n(49),C=n(43),L=(n(34),n(10)),D=n.n(L),O=n(36),N=(n(45),n(27)),P=n.n(N),j=n(22),Y=(n(39),n(9)),I=n.n(Y),A=(n(148),I.a.Item),R={labelCol:{fixedSpan:4},wrapperCol:{span:19}},H=(0,k.a.config)((o=r=function(e){function o(){var e,t;Object(y.a)(this,o);for(var n=arguments.length,a=new Array(n),r=0;ri&&x.a.createElement(d.a,{className:"users-pagination",current:s,total:n.totalCount,pageSize:i,onChange:function(e){return t.setState({pageNo:e},function(){return t.getUsers()})}}),x.a.createElement(H,{visible:l,onOk:function(e){return Object(T.c)(e).then(function(e){return t.setState({pageNo:1},function(){return t.getUsers()}),e})},onCancel:function(){return t.colseCreateUser()}}),x.a.createElement(F.a,{username:u,onOk:function(e){return Object(T.k)(e).then(function(e){return t.getUsers(),e})},onCancel:function(){return t.setState({passwordResetUser:void 0})}}))}}]),n}(x.a.Component),s.displayName="UserManagement",i=l))||i)||i;t.a=z},function(e,t,n){"use strict";n(59);var a,r,o,i,s,l,u=n(41),c=n.n(u),d=(n(33),n(20)),f=n.n(d),p=n(36),h=(n(58),n(18)),m=n.n(h),g=(n(31),n(21)),y=n.n(g),v=n(13),_=n(14),b=n(15),w=n(16),M=n(17),k=(n(26),n(7)),S=n.n(k),x=n(0),E=n.n(x),T=n(42),C=n(49),L=n(92),D=n(43),O=(n(34),n(10)),N=n.n(O),P=(n(45),n(27)),j=n.n(P),Y=n(22),I=(n(66),n(32)),A=n.n(I),R=(n(39),n(9)),H=n.n(R),F=H.a.Item,z=A.a.Option,W={labelCol:{fixedSpan:4},wrapperCol:{span:19}},B=Object(T.b)(function(e){return{namespaces:e.namespace.namespaces}},{getNamespaces:L.b})(a=(0,S.a.config)((o=r=function(e){function o(){var e,t;Object(v.a)(this,o);for(var n=arguments.length,a=new Array(n),r=0;rs&&E.a.createElement(c.a,{className:"users-pagination",current:u,total:t.totalCount,pageSize:s,onChange:function(e){return a.setState({pageNo:e},function(){return a.getPermissions()})}}),E.a.createElement(B,{visible:d,onOk:function(e){return Object(C.a)(e).then(function(e){return a.setState({pageNo:1},function(){return a.getPermissions()}),e})},onCancel:function(){return a.colseCreatePermission()}}))}}]),n}(E.a.Component),s.displayName="PermissionsManagement",i=l))||i)||i);t.a=V},function(e,t,n){"use strict";n(59);var a,r,o,i,s,l,u=n(41),d=n.n(u),c=(n(33),n(20)),f=n.n(c),p=(n(58),n(18)),h=n.n(p),m=(n(31),n(21)),g=n.n(m),y=n(13),v=n(14),_=n(15),b=n(16),w=n(17),M=(n(26),n(7)),k=n.n(M),S=n(0),x=n.n(S),E=n(42),T=n(49),C=n(43),L=(n(34),n(10)),D=n.n(L),O=(n(45),n(27)),N=n.n(O),P=n(22),j=(n(39),n(9)),Y=n.n(j),I=Y.a.Item,A={labelCol:{fixedSpan:4},wrapperCol:{span:19}},R=(0,k.a.config)((o=r=function(e){function o(){var e,t;Object(y.a)(this,o);for(var n=arguments.length,a=new Array(n),r=0;ri&&x.a.createElement(d.a,{className:"users-pagination",current:s,total:t.totalCount,pageSize:i,onChange:function(e){return a.setState({pageNo:e},function(){return a.getRoles()})}}),x.a.createElement(R,{visible:l,onOk:function(e){return Object(T.b)(e).then(function(e){return a.getRoles(),e})},onCancel:function(){return a.colseCreateRole()}}))}}]),n}(x.a.Component),s.displayName="RolesManagement",i=l))||i)||i);t.a=H},function(e,t,n){"use strict";n(38);function s(e){var t=localStorage.token,n=void 0===t?"{}":t,a=Object(T.c)(n)&&JSON.parse(n)||{};return["naming"===e?void 0:C,{key:"serviceManagementVirtual",children:[{key:"serviceManagement",url:"/serviceManagement"},{key:"subscriberList",url:"/subscriberList"}]},a.globalAdmin?L:void 0,{key:"namespace",url:"/namespace"},{key:"clusterManagementVirtual",children:[{key:"clusterManagement",url:"/clusterManagement"}]}].filter(function(e){return e})}var a,r,o,i,l,u=n(24),d=n.n(u),c=n(13),f=n(14),p=n(15),h=n(16),m=n(17),g=(n(26),n(7)),y=n.n(g),v=n(23),_=(n(76),n(48)),b=n.n(_),w=n(0),M=n.n(w),k=n(51),S=n(42),x=n(120),E=n(90),T=n(44),C={key:"configurationManagementVirtual",children:[{key:"configurationManagement",url:"/configurationManagement"},{key:"historyRollback",url:"/historyRollback"},{key:"listeningToQuery",url:"/listeningToQuery"}]},L={key:"authorityControl",children:[{key:"userList",url:"/userManagement"},{key:"roleManagement",url:"/rolesManagement"},{key:"privilegeManagement",url:"/permissionsManagement"}]},D=b.a.SubMenu,O=b.a.Item,N=(a=Object(S.b)(function(e){return Object(v.a)({},e.locale,{},e.base)},{getState:E.b}),r=y.a.config,Object(k.g)(o=a(o=r((l=i=function(e){function t(){return Object(c.a)(this,t),Object(p.a)(this,Object(h.a)(t).apply(this,arguments))}return Object(m.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){this.props.getState()}},{key:"goBack",value:function(){this.props.history.goBack()}},{key:"navTo",value:function(e){var t=this.props.location.search;this.props.history.push([e,t].join(""))}},{key:"isCurrentPath",value:function(e){return e===this.props.location.pathname?"current-path":void 0}},{key:"defaultOpenKeys",value:function(){for(var t=this,e=s(this.props.functionMode),n=0,a=e.length;nthis.state.pageSize&&j.a.createElement("div",{style:{marginTop:10,textAlign:"right"}},j.a.createElement(x.a,{current:this.state.pageNo,total:s,pageSize:this.state.pageSize,onChange:function(e){return t.setState({pageNo:e},function(){return t.querySubscriberList()})}}))))}}]),t}(j.a.Component),r.displayName="SubscriberList",a=o))||a)||a;t.a=W},function(e,t,n){"use strict";n(46);var a,r,o,i=n(30),m=n.n(i),s=(n(59),n(41)),g=n.n(s),l=(n(366),n(96)),y=n.n(l),u=(n(31),n(21)),v=n.n(u),d=(n(34),n(10)),_=n.n(d),c=(n(45),n(27)),f=n.n(c),p=n(13),h=n(14),b=n(15),w=n(16),M=n(22),k=n(17),S=(n(26),n(7)),x=n.n(S),E=(n(377),n(97)),T=n.n(E),C=(n(58),n(18)),L=n.n(C),D=(n(64),n(35)),O=n.n(D),N=(n(39),n(9)),P=n.n(N),j=n(0),Y=n.n(j),I=n(1),A=n(43),R=(n(690),P.a.Item),H=O.a.Row,F=O.a.Col,z=L.a.Column,W=T.a.Panel,B=(0,x.a.config)((o=r=function(e){function t(e){var n;return Object(p.a)(this,t),(n=Object(b.a)(this,Object(w.a)(t).call(this,e))).getQueryLater=function(){setTimeout(function(){return n.queryClusterStateList()})},n.setNowNameSpace=function(e,t){return n.setState({nowNamespaceName:e,nowNamespaceId:t})},n.rowColor=function(e){return{className:(e.voteFor,"")}},n.state={loading:!1,total:0,pageSize:10,currentPage:1,keyword:"",dataSource:[]},n.field=new f.a(Object(M.a)(n)),n}return Object(k.a)(t,e),Object(h.a)(t,[{key:"openLoading",value:function(){this.setState({loading:!0})}},{key:"closeLoading",value:function(){this.setState({loading:!1})}},{key:"openEditServiceDialog",value:function(){try{this.editServiceDialog.current.getInstance().show(this.state.service)}catch(e){}}},{key:"queryClusterStateList",value:function(){var i=this,e=this.state,t=e.currentPage,n=e.pageSize,a=e.keyword,r=e.withInstances,o=["withInstances=".concat(void 0!==r&&r),"pageNo=".concat(t),"pageSize=".concat(n),"keyword=".concat(a)];Object(I.c)({url:"v1/core/cluster/nodes?".concat(o.join("&")),beforeSend:function(){return i.openLoading()},success:function(e){var t=0this.state.pageSize&&Y.a.createElement("div",{style:{marginTop:10,textAlign:"right"}},Y.a.createElement(g.a,{current:this.state.currentPage,total:this.state.total,pageSize:this.state.pageSize,onChange:function(e){return t.setState({currentPage:e},function(){return t.queryClusterStateList()})}}))))}}]),t}(Y.a.Component),r.displayName="ClusterNodeList",a=o))||a;t.a=B},function(e,t,J){"use strict";J.r(t),function(e){J(46);var t,n=J(30),a=J.n(n),r=(J(26),J(7)),o=J.n(r),i=J(13),s=J(14),l=J(15),u=J(16),d=J(17),c=J(23),f=J(0),p=J.n(f),h=J(25),m=J.n(h),g=J(79),y=J(381),v=J(382),_=J(42),b=J(51),w=J(89),M=(J(482),J(403)),k=J(29),S=J(404),x=J(396),E=J(405),T=J(406),C=J(407),L=J(398),D=J(408),O=J(409),N=J(410),P=J(411),j=J(395),Y=J(399),I=J(397),A=J(412),R=J(413),H=J(400),F=J(401),z=J(402),W=J(393),B=J(394),V=J(93);J(693);e.hot,localStorage.getItem(k.e)||localStorage.setItem(k.e,"zh-CN"===navigator.language?"zh-CN":"en-US");var U=Object(g.c)(Object(c.a)({},B.a,{routing:y.routerReducer})),K=Object(g.e)(U,Object(g.d)(Object(g.a)(v.a),window[k.h]?window[k.h]():function(e){return e})),q=[{path:"/",exact:!0,render:function(){return p.a.createElement(b.a,{to:"/welcome"})}},{path:"/welcome",component:W.a},{path:"/namespace",component:x.a},{path:"/newconfig",component:E.a},{path:"/configsync",component:T.a},{path:"/configdetail",component:C.a},{path:"/configeditor",component:L.a},{path:"/historyDetail",component:D.a},{path:"/configRollback",component:O.a},{path:"/historyRollback",component:N.a},{path:"/listeningToQuery",component:P.a},{path:"/configurationManagement",component:j.a},{path:"/serviceManagement",component:Y.a},{path:"/serviceDetail",component:I.a},{path:"/subscriberList",component:A.a},{path:"/clusterManagement",component:R.a},{path:"/userManagement",component:H.a},{path:"/rolesManagement",component:z.a},{path:"/permissionsManagement",component:F.a}],G=Object(_.b)(function(e){return Object(c.a)({},e.locale)},{changeLanguage:V.a})(t=function(e){function n(e){var t;return Object(i.a)(this,n),(t=Object(l.a)(this,Object(u.a)(n).call(this,e))).state={shownotice:"none",noticecontent:"",nacosLoading:{}},t}return Object(d.a)(n,e),Object(s.a)(n,[{key:"componentDidMount",value:function(){var e=localStorage.getItem(k.e);this.props.changeLanguage(e)}},{key:"render",value:function(){var e=this.props.locale;return p.a.createElement(a.a,Object.assign({className:"nacos-loading",shape:"flower",tip:"loading...",visible:!1,fullScreen:!0},this.state.nacosLoading),p.a.createElement(o.a,{locale:e},this.router))}},{key:"router",get:function(){return p.a.createElement(w.a,null,p.a.createElement(b.d,null,p.a.createElement(b.b,{path:"/login",component:S.a}),p.a.createElement(M.a,null,q.map(function(e){return p.a.createElement(b.b,Object.assign({key:e.path},e))}))))}}]),n}(p.a.Component))||t;m.a.render(p.a.createElement(_.a,{store:K},p.a.createElement(G,null)),document.getElementById("root"))}.call(this,J(165)(e))},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){e.exports={default:n(420),__esModule:!0}},function(e,t,n){n(421),e.exports=n(73).Object.assign},function(e,t,n){var a=n(98);a(a.S+a.F,"Object",{assign:n(423)})},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){"use strict";var f=n(74),p=n(109),h=n(134),m=n(112),g=n(135),y=n(170),r=Object.assign;e.exports=!r||n(100)(function(){var e={},t={},n=Symbol(),a="abcdefghijklmnopqrst";return e[n]=7,a.split("").forEach(function(e){t[e]=e}),7!=r({},e)[n]||Object.keys(r({},t)).join("")!=a})?function(e,t){for(var n=g(e),a=arguments.length,r=1,o=h.f,i=m.f;r=t.length?{value:void 0,done:!0}:(e=a(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var l=n(130),u=n(129);e.exports=function(s){return function(e,t){var n,a,r=String(u(e)),o=l(t),i=r.length;return o<0||i<=o?s?"":void 0:(n=r.charCodeAt(o))<55296||56319=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values"),o.Arguments=o.Array,a("keys"),a("values"),a("entries")},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){e.exports={default:n(440),__esModule:!0}},function(e,t,n){n(441),n(446),n(447),n(448),e.exports=n(73).Symbol},function(e,t,n){"use strict";function a(e){var t=q[e]=D(H[W]);return t._k=e,t}function r(e,t){S(e);for(var n,a=M(t=T(t)),r=0,o=a.length;rr;)d(q,t=n[r++])||t==B||t==h||a.push(t);return a}function l(e){for(var t,n=e===J,a=R(n?G:T(e)),r=[],o=0;a.length>o;)!d(q,t=a[o++])||n&&!d(J,t)||r.push(q[t]);return r}var u=n(70),d=n(75),c=n(74),f=n(98),p=n(173),h=n(442).KEY,m=n(100),g=n(132),y=n(138),v=n(111),_=n(84),b=n(139),w=n(140),M=n(443),k=n(444),S=n(99),x=n(82),E=n(135),T=n(83),C=n(128),L=n(108),D=n(137),O=n(445),N=n(175),P=n(134),j=n(81),Y=n(109),I=N.f,A=j.f,R=O.f,H=u.Symbol,F=u.JSON,z=F&&F.stringify,W="prototype",B=_("_hidden"),V=_("toPrimitive"),U={}.propertyIsEnumerable,K=g("symbol-registry"),q=g("symbols"),G=g("op-symbols"),J=Object[W],$="function"==typeof H&&!!P.f,X=u.QObject,Q=!X||!X[W]||!X[W].findChild,Z=c&&m(function(){return 7!=D(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a})?function(e,t,n){var a=I(J,t);a&&delete J[t],A(e,t,n),a&&e!==J&&A(J,t,a)}:A,ee=$&&"symbol"==typeof H.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof H},te=function(e,t,n){return e===J&&te(G,t,n),S(e),t=C(t,!0),S(n),d(q,t)?(n.enumerable?(d(e,B)&&e[B][t]&&(e[B][t]=!1),n=D(n,{enumerable:L(0,!1)})):(d(e,B)||A(e,B,L(1,{})),e[B][t]=!0),Z(e,t,n)):A(e,t,n)};$||(p((H=function(e){if(this instanceof H)throw TypeError("Symbol is not a constructor!");var t=v(0ae;)_(ne[ae++]);for(var re=Y(_.store),oe=0;re.length>oe;)w(re[oe++]);f(f.S+f.F*!$,"Symbol",{for:function(e){return d(K,e+="")?K[e]:K[e]=H(e)},keyFor:function(e){if(!ee(e))throw TypeError(e+" is not a symbol!");for(var t in K)if(K[t]===e)return t},useSetter:function(){Q=!0},useSimple:function(){Q=!1}}),f(f.S+f.F*!$,"Object",{create:function(e,t){return void 0===t?D(e):r(D(e),t)},defineProperty:te,defineProperties:r,getOwnPropertyDescriptor:i,getOwnPropertyNames:s,getOwnPropertySymbols:l});var ie=m(function(){P.f(1)});f(f.S+f.F*ie,"Object",{getOwnPropertySymbols:function(e){return P.f(E(e))}}),F&&f(f.S+f.F*(!$||m(function(){var e=H();return"[null]"!=z([e])||"{}"!=z({a:e})||"{}"!=z(Object(e))})),"JSON",{stringify:function(e){for(var t,n,a=[e],r=1;ri;)o.call(e,a=r[i++])&&t.push(a);return t}},function(e,t,n){var a=n(171);e.exports=Array.isArray||function(e){return"Array"==a(e)}},function(e,t,n){var a=n(83),r=n(174).f,o={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&"[object Window]"==o.call(e)?function(e){try{return r(e)}catch(e){return i.slice()}}(e):r(a(e))}},function(e,t){},function(e,t,n){n(140)("asyncIterator")},function(e,t,n){n(140)("observable")},function(e,t,n){e.exports={default:n(450),__esModule:!0}},function(e,t,n){n(451),e.exports=n(73).Object.setPrototypeOf},function(e,t,n){var a=n(98);a(a.S,"Object",{setPrototypeOf:n(452).set})},function(e,t,r){function o(e,t){if(a(e),!n(t)&&null!==t)throw TypeError(t+": can't set as prototype!")}var n=r(82),a=r(99);e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,a){try{(a=r(166)(Function.call,r(175).f(Object.prototype,"__proto__").set,2))(e,[]),n=!(e instanceof Array)}catch(e){n=!0}return function(e,t){return o(e,t),n?e.__proto__=t:a(e,t),e}}({},!1):void 0),check:o}},function(e,t,n){e.exports={default:n(454),__esModule:!0}},function(e,t,n){n(455);var a=n(73).Object;e.exports=function(e,t){return a.create(e,t)}},function(e,t,n){var a=n(98);a(a.S,"Object",{create:n(137)})},function(e,t,n){"use strict"; +/** @license React v16.12.0 * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var d=n(171),a="function"==typeof Symbol&&Symbol.for,c=a?Symbol.for("react.element"):60103,u=a?Symbol.for("react.portal"):60106,r=a?Symbol.for("react.fragment"):60107,o=a?Symbol.for("react.strict_mode"):60108,i=a?Symbol.for("react.profiler"):60114,s=a?Symbol.for("react.provider"):60109,l=a?Symbol.for("react.context"):60110,f=a?Symbol.for("react.forward_ref"):60112,p=a?Symbol.for("react.suspense"):60113,h=a?Symbol.for("react.memo"):60115,m=a?Symbol.for("react.lazy"):60116,g="function"==typeof Symbol&&Symbol.iterator;function y(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n
diff --git a/core/src/main/java/com/alibaba/nacos/core/auth/Permission.java b/core/src/main/java/com/alibaba/nacos/core/auth/Permission.java index c043787ae36..0e513c7de4b 100644 --- a/core/src/main/java/com/alibaba/nacos/core/auth/Permission.java +++ b/core/src/main/java/com/alibaba/nacos/core/auth/Permission.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.core.auth; -import com.alibaba.fastjson.JSON; - import java.io.Serializable; /** @@ -66,6 +64,9 @@ public void setAction(String action) { @Override public String toString() { - return JSON.toJSONString(this); + return "Permission{" + + "resource='" + resource + '\'' + + ", action='" + action + '\'' + + '}'; } } diff --git a/core/src/main/java/com/alibaba/nacos/core/auth/Resource.java b/core/src/main/java/com/alibaba/nacos/core/auth/Resource.java index da0f89580c6..7f1915575c3 100644 --- a/core/src/main/java/com/alibaba/nacos/core/auth/Resource.java +++ b/core/src/main/java/com/alibaba/nacos/core/auth/Resource.java @@ -15,9 +15,6 @@ */ package com.alibaba.nacos.core.auth; - -import com.alibaba.fastjson.JSON; - import java.io.Serializable; /** @@ -51,6 +48,8 @@ public String parseName() { @Override public String toString() { - return JSON.toJSONString(this); + return "Resource{" + + "key='" + key + '\'' + + '}'; } } diff --git a/core/src/main/java/com/alibaba/nacos/core/auth/Secured.java b/core/src/main/java/com/alibaba/nacos/core/auth/Secured.java index 7ed611cc8bd..b6db37eecce 100644 --- a/core/src/main/java/com/alibaba/nacos/core/auth/Secured.java +++ b/core/src/main/java/com/alibaba/nacos/core/auth/Secured.java @@ -44,7 +44,7 @@ String resource() default StringUtils.EMPTY; /** - * Resource name parser. Should have lower priority than name() + * Resource name parser. Should have lower priority than resource() * * @return class type of resource parser */ diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/MemberMetaDataConstants.java b/core/src/main/java/com/alibaba/nacos/core/cluster/MemberMetaDataConstants.java index a0a077f495f..c15f1c6e6bb 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/MemberMetaDataConstants.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/MemberMetaDataConstants.java @@ -25,19 +25,25 @@ public class MemberMetaDataConstants { /** * Raft port,This parameter is dropped when GRPC is used as a whole */ - public static final String RAFT_PORT = "raft_port"; + public static final String RAFT_PORT = "raftPort"; public static final String SITE_KEY = "site"; - public static final String AD_WEIGHT = "adweight"; + public static final String AD_WEIGHT = "adWeight"; public static final String WEIGHT = "weight"; + public static final String LAST_REFRESH_TIME = "lastRefreshTime"; + + public static final String VERSION = "version"; + public static final String[] META_KEY_LIST = new String[]{ RAFT_PORT, SITE_KEY, AD_WEIGHT, WEIGHT, + LAST_REFRESH_TIME, + VERSION, }; } diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java b/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java index 191d8edfa42..449f0d68709 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java @@ -134,9 +134,7 @@ public static void syncToFile(Collection members) { @SuppressWarnings("PMD.UndefineMagicConstantRule") public static Collection kRandom(Collection members, - Predicate filter) { - int k = ApplicationUtils - .getProperty("nacos.core.member.report.random-num", Integer.class, 3); + Predicate filter, int k) { Set kMembers = new HashSet<>(); diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/NodeState.java b/core/src/main/java/com/alibaba/nacos/core/cluster/NodeState.java index 88bc486679c..0df406668e4 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/NodeState.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/NodeState.java @@ -19,7 +19,7 @@ /** * The life cycle state of a node plays an important role * - *

1.3.0-BETA The unified sinking operation should be done first, and the node state + *

1.3.0 The unified sinking operation should be done first, and the node state * should be radiated out later, mainly for whether the request can be processed and so on

* * @author liaochuntao diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java b/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java index d02d0ec2dac..3d69cc40376 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java @@ -27,12 +27,14 @@ import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.ConcurrentHashSet; import com.alibaba.nacos.common.utils.ExceptionUtil; +import com.alibaba.nacos.common.utils.VersionUtils; import com.alibaba.nacos.core.cluster.lookup.LookupFactory; import com.alibaba.nacos.core.notify.Event; import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.notify.listener.Subscribe; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.Commons; +import com.alibaba.nacos.core.utils.Constants; import com.alibaba.nacos.core.utils.GenericType; import com.alibaba.nacos.core.utils.GlobalExecutor; import com.alibaba.nacos.core.utils.InetUtils; @@ -40,6 +42,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.context.ApplicationListener; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @@ -123,18 +126,20 @@ public class ServerMemberManager */ private final MemberInfoReportTask infoReportTask = new MemberInfoReportTask(); - public ServerMemberManager(ServletContext servletContext) { + public ServerMemberManager(ServletContext servletContext) throws Exception { this.serverList = new ConcurrentSkipListMap(); ApplicationUtils.setContextPath(servletContext.getContextPath()); MemberUtils.setManager(this); + + init(); } - @PostConstruct - public void init() throws NacosException { + protected void init() throws NacosException { Loggers.CORE.info("Nacos-related cluster resource initialization"); this.port = ApplicationUtils.getProperty("server.port", Integer.class, 8848); this.localAddress = InetUtils.getSelfIp() + ":" + port; this.self = MemberUtils.singleParse(this.localAddress); + this.self.setExtendVal(MemberMetaDataConstants.VERSION, VersionUtils.VERSION); serverList.put(self.getAddress(), self); // register NodeChangeEvent publisher to NotifyManager @@ -198,11 +203,7 @@ public boolean update(Member newMember) { Loggers.CLUSTER.debug("Node information update : {}", newMember); String address = newMember.getAddress(); - - if (Objects.equals(newMember, self)) { - serverList.put(newMember.getAddress(), newMember); - return true; - } + newMember.setExtendVal(MemberMetaDataConstants.LAST_REFRESH_TIME, System.currentTimeMillis()); if (!serverList.containsKey(address)) { return false; @@ -238,6 +239,10 @@ public Member getSelf() { return this.self; } + public Member find(String address) { + return serverList.get(address); + } + public Collection allMembers() { // We need to do a copy to avoid affecting the real data HashSet set = new HashSet<>(serverList.values()); @@ -408,10 +413,15 @@ protected void executeBody() { "/cluster/report"); try { - asyncHttpClient.post(url, Header.EMPTY, Query.EMPTY, getSelf(), + asyncHttpClient.post(url, Header.newInstance().addParam(Constants.NACOS_SERVER_HEADER, + VersionUtils.VERSION), Query.EMPTY, getSelf(), reference.getType(), new Callback() { @Override public void onReceive(RestResult result) { + if (result.getCode() == HttpStatus.NOT_IMPLEMENTED.value() || result.getCode() == HttpStatus.NOT_FOUND.value()) { + Loggers.CLUSTER.warn("{} version is too low, it is recommended to upgrade the version : {}", target, VersionUtils.VERSION); + return; + } if (result.ok()) { MemberUtils.onSuccess(target); } diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java index bb1f1b3bfbb..8ac0dbbe68c 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java @@ -17,9 +17,9 @@ package com.alibaba.nacos.core.cluster.lookup; import com.alibaba.nacos.api.exception.NacosException; -import com.alibaba.nacos.common.file.FileChangeEvent; -import com.alibaba.nacos.common.file.FileWatcher; -import com.alibaba.nacos.common.file.WatchFileCenter; +import com.alibaba.nacos.core.file.FileChangeEvent; +import com.alibaba.nacos.core.file.FileWatcher; +import com.alibaba.nacos.core.file.WatchFileCenter; import com.alibaba.nacos.core.cluster.AbstractMemberLookup; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.MemberUtils; diff --git a/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java b/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java index 846d1fb15a0..6d213586719 100644 --- a/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java +++ b/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java @@ -18,9 +18,9 @@ import com.alibaba.nacos.common.executor.ExecutorFactory; import com.alibaba.nacos.common.executor.NameThreadFactory; import com.alibaba.nacos.common.executor.ThreadPoolManager; -import com.alibaba.nacos.common.file.WatchFileCenter; +import com.alibaba.nacos.core.file.WatchFileCenter; import com.alibaba.nacos.common.http.HttpClientManager; -import com.alibaba.nacos.common.utils.DiskUtils; +import com.alibaba.nacos.core.utils.DiskUtils; import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.InetUtils; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/id/IdGeneratorManager.java b/core/src/main/java/com/alibaba/nacos/core/distributed/id/IdGeneratorManager.java index 6ac3bacdee7..d8d783a6d87 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/id/IdGeneratorManager.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/id/IdGeneratorManager.java @@ -45,7 +45,7 @@ public IdGeneratorManager() { if (iterator.hasNext()) { generator = iterator.next(); } else { - generator = new SnakeFlowerIdGenerator(); + generator = new SnowFlowerIdGenerator(); } generator.init(); return generator; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnakeFlowerIdGenerator.java b/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnowFlowerIdGenerator.java similarity index 97% rename from core/src/main/java/com/alibaba/nacos/core/distributed/id/SnakeFlowerIdGenerator.java rename to core/src/main/java/com/alibaba/nacos/core/distributed/id/SnowFlowerIdGenerator.java index a35da62e1cd..064918581b6 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnakeFlowerIdGenerator.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnowFlowerIdGenerator.java @@ -24,7 +24,6 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -43,10 +42,10 @@ * @author liaochuntao */ @SuppressWarnings("all") -public class SnakeFlowerIdGenerator implements IdGenerator { +public class SnowFlowerIdGenerator implements IdGenerator { private static final Logger logger = LoggerFactory - .getLogger(SnakeFlowerIdGenerator.class); + .getLogger(SnowFlowerIdGenerator.class); /** * Start time intercept (2018-08-05 08:34) diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftProtocol.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftProtocol.java index cba502489ba..f2c3f05131a 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftProtocol.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftProtocol.java @@ -17,12 +17,13 @@ package com.alibaba.nacos.core.distributed.raft; import com.alibaba.nacos.common.model.RestResult; +import com.alibaba.nacos.common.utils.MapUtils; import com.alibaba.nacos.common.utils.ThreadUtils; import com.alibaba.nacos.consistency.ProtocolMetaData; import com.alibaba.nacos.consistency.SerializeFactory; import com.alibaba.nacos.consistency.Serializer; import com.alibaba.nacos.consistency.cp.CPProtocol; -import com.alibaba.nacos.consistency.cp.Constants; +import com.alibaba.nacos.consistency.cp.MetadataKey; import com.alibaba.nacos.consistency.cp.LogProcessor4CP; import com.alibaba.nacos.consistency.entity.GetRequest; import com.alibaba.nacos.consistency.entity.Log; @@ -34,17 +35,13 @@ import com.alibaba.nacos.core.notify.Event; import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.notify.listener.Subscribe; -import com.alibaba.nacos.core.utils.InetUtils; import com.alibaba.nacos.core.utils.Loggers; import com.alipay.sofa.jraft.Node; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -102,9 +99,7 @@ public class JRaftProtocol private RaftConfig raftConfig; private JRaftServer raftServer; private JRaftMaintainService jRaftMaintainService; - private Node raftNode; private ServerMemberManager memberManager; - private String selfAddress = InetUtils.getSelfIp(); private final Serializer serializer = SerializeFactory.getDefault(); public JRaftProtocol(ServerMemberManager memberManager) throws Exception { @@ -117,7 +112,6 @@ public JRaftProtocol(ServerMemberManager memberManager) throws Exception { public void init(RaftConfig config) { if (initialized.compareAndSet(false, true)) { this.raftConfig = config; - this.selfAddress = memberManager.getSelf().getAddress(); NotifyCenter.registerToSharePublisher(RaftEvent.class); this.raftServer.init(this.raftConfig); this.raftServer.start(); @@ -137,15 +131,10 @@ public void onEvent(RaftEvent event) { // Leader information needs to be selectively updated. If it is valid data, // the information in the protocol metadata is updated. - if (StringUtils.isNotBlank(leader)) { - properties.put(Constants.LEADER_META_DATA, leader); - } - if (Objects.nonNull(term)) { - properties.put(Constants.TERM_META_DATA, term); - } - if (CollectionUtils.isNotEmpty(raftClusterInfo)) { - properties.put(Constants.RAFT_GROUP_MEMBER, raftClusterInfo); - } + MapUtils.putIfValNoEmpty(properties, MetadataKey.LEADER_META_DATA, leader); + MapUtils.putIfValNoNull(properties, MetadataKey.TERM_META_DATA, term); + MapUtils.putIfValNoEmpty(properties, MetadataKey.RAFT_GROUP_MEMBER, raftClusterInfo); + value.put(groupId, properties); metaData.load(value); @@ -169,6 +158,12 @@ public void addLogProcessors(Collection processors) { @Override public Response getData(GetRequest request) throws Exception { + CompletableFuture future = aGetData(request); + return future.get(5_000L, TimeUnit.MILLISECONDS); + } + + @Override + public CompletableFuture aGetData(GetRequest request) { return raftServer.get(request); } @@ -181,14 +176,12 @@ public Response submit(Log data) throws Exception { @Override public CompletableFuture submitAsync(Log data) { - CompletableFuture future = new CompletableFuture<>(); - raftServer.commit(data.getGroup(), data, future); - return future; + return raftServer.commit(data.getGroup(), data, new CompletableFuture<>()); } @Override public void memberChange(Set addresses) { - for (int i = 0; i < 5; i ++) { + for (int i = 0; i < 5; i++) { if (this.raftServer.peerChange(jRaftMaintainService, addresses)) { return; } @@ -211,7 +204,7 @@ public RestResult execute(Map args) { private void injectProtocolMetaData(ProtocolMetaData metaData) { Member member = memberManager.getSelf(); - member.setExtendVal("raft_meta_data", metaData); + member.setExtendVal("raftMetaData", metaData); memberManager.update(member); } diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java index a098d3ec8e8..5d23e561b7e 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java @@ -19,6 +19,7 @@ import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.ConvertUtils; import com.alibaba.nacos.common.utils.LoggerUtils; +import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.common.utils.ThreadUtils; import com.alibaba.nacos.consistency.LogProcessor; import com.alibaba.nacos.consistency.SerializeFactory; @@ -37,9 +38,12 @@ import com.alibaba.nacos.core.distributed.raft.utils.JRaftUtils; import com.alibaba.nacos.core.distributed.raft.utils.RaftExecutor; import com.alibaba.nacos.core.distributed.raft.utils.RaftOptionsBuilder; +import com.alibaba.nacos.core.monitor.MetricsMonitor; import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.core.utils.ClassUtils; import com.alibaba.nacos.core.utils.Loggers; +import com.alibaba.nacos.core.utils.TimerContext; import com.alipay.sofa.jraft.CliService; import com.alipay.sofa.jraft.Node; import com.alipay.sofa.jraft.RaftGroupService; @@ -274,53 +278,51 @@ synchronized void createMultiRaftGroup(Collection processors) { Random random = new Random(); long period = nodeOptions.getElectionTimeoutMs() + random.nextInt(5 * 1000); RaftExecutor.scheduleRaftMemberRefreshJob(() -> refreshRouteTable(groupName), - period, period, TimeUnit.MILLISECONDS); + nodeOptions.getElectionTimeoutMs(), period, TimeUnit.MILLISECONDS); multiRaftGroup.put(groupName, new RaftGroupTuple(node, processor, raftGroupService, machine)); } } - Response get(final GetRequest request) { + CompletableFuture get(final GetRequest request) { final String group = request.getGroup(); CompletableFuture future = new CompletableFuture<>(); final RaftGroupTuple tuple = findTupleByGroup(group); if (Objects.isNull(tuple)) { future.completeExceptionally(new NoSuchRaftGroupException(group)); - return future.join(); + return future; } final Node node = tuple.node; - + final LogProcessor processor = tuple.processor; try { node.readIndex(BytesUtil.EMPTY_BYTES, new ReadIndexClosure() { @Override public void run(Status status, long index, byte[] reqCtx) { if (status.isOk()) { try { - Response response = tuple.processor.onRequest(request); + Response response = processor.onRequest(request); future.complete(response); } catch (Throwable t) { - future.completeExceptionally(t); + MetricsMonitor.raftReadIndexFailed(); + future.completeExceptionally(new ConsistencyException("The conformance protocol is temporarily unavailable for reading", t)); } return; } + MetricsMonitor.raftReadIndexFailed(); + Loggers.RAFT.error("ReadIndex has error : {}", status.getErrorMsg()); future.completeExceptionally( - new ConsistencyException(status.getErrorMsg())); + new ConsistencyException("The conformance protocol is temporarily unavailable for reading, " + status.getErrorMsg())); } }); - return future.get(rpcRequestTimeoutMs, TimeUnit.MILLISECONDS); + return future; } catch (Throwable e) { + MetricsMonitor.raftReadFromLeader(); Loggers.RAFT.warn("Raft linear read failed, go to Leader read logic : {}", e.toString()); // run raft read readFromLeader(request, future); - try { - return future.get(rpcRequestTimeoutMs, TimeUnit.MILLISECONDS); - } - catch (Throwable ex) { - throw new ConsistencyException( - "Data acquisition failed : " + e.toString() + ", read from leader has error : " + ex.toString()); - } + return future; } } @@ -331,14 +333,14 @@ public void readFromLeader(final GetRequest request, @Override public void accept(Response response, Throwable throwable) { if (Objects.nonNull(throwable)) { - future.completeExceptionally(throwable); + future.completeExceptionally(new ConsistencyException("The conformance protocol is temporarily unavailable for reading", throwable)); return; } if (response.getSuccess()) { future.complete(response); } else { future.completeExceptionally( - new ConsistencyException(response.getErrMsg())); + new ConsistencyException("The conformance protocol is temporarily unavailable for reading, " + response.getErrMsg())); } } }); @@ -392,20 +394,7 @@ void registerSelfToCluster(String groupId, PeerId selfIp, Configuration conf) { } protected PeerId getLeader(final String raftGroupId) { - final PeerId leader = new PeerId(); - final Configuration conf = findNodeByGroup(raftGroupId).getOptions() - .getInitialConf(); - try { - final Status st = cliService.getLeader(raftGroupId, conf, leader); - if (st.isOk()) { - return leader; - } - Loggers.RAFT.error("get Leader has failed : {}", st); - } - catch (final Throwable t) { - Loggers.RAFT.error("get Leader has error : {}", t); - } - return null; + return RouteTable.getInstance().selectLeader(raftGroupId); } synchronized void shutdown() { @@ -524,22 +513,8 @@ void refreshRouteTable(String group) { Configuration oldConf = instance.getConfiguration(groupName); String oldLeader = Optional.ofNullable(instance.selectLeader(groupName)) .orElse(PeerId.emptyPeer()).getEndpoint().toString(); - status = instance.refreshConfiguration(this.cliClientService, groupName, - rpcRequestTimeoutMs); - - if (status.isOk()) { - Configuration conf = instance.getConfiguration(groupName); - String leader = instance.selectLeader(groupName).getEndpoint().toString(); - NacosStateMachine machine = findTupleByGroup(groupName).machine; - if (!Objects.equals(oldLeader, leader) || !Objects - .equals(oldConf, conf)) { - NotifyCenter.publishEvent( - RaftEvent.builder().leader(leader).groupId(groupName) - .term(machine.getTerm()).raftClusterInfo( - JRaftUtils.toStrings(conf.getPeers())).build()); - } - } - else { + status = instance.refreshConfiguration(this.cliClientService, groupName, rpcRequestTimeoutMs); + if (!status.isOk()) { Loggers.RAFT .error("Fail to refresh route configuration for group : {}, status is : {}", groupName, status); @@ -573,7 +548,7 @@ CliService getCliService() { return cliService; } - public static class RaftGroupTuple { + public class RaftGroupTuple { private final LogProcessor processor; private final Node node; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/NacosStateMachine.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/NacosStateMachine.java index d011791ee67..937bb3372c9 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/NacosStateMachine.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/NacosStateMachine.java @@ -16,8 +16,8 @@ package com.alibaba.nacos.core.distributed.raft; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.common.utils.ExceptionUtil; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.LoggerUtils; import com.alibaba.nacos.consistency.LogProcessor; import com.alibaba.nacos.consistency.cp.LogProcessor4CP; @@ -32,11 +32,13 @@ import com.alibaba.nacos.core.distributed.raft.utils.JRaftUtils; import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.utils.Loggers; +import com.alibaba.nacos.core.utils.TimerContext; import com.alipay.sofa.jraft.Closure; import com.alipay.sofa.jraft.Iterator; import com.alipay.sofa.jraft.Node; import com.alipay.sofa.jraft.RouteTable; import com.alipay.sofa.jraft.Status; +import com.alipay.sofa.jraft.conf.Configuration; import com.alipay.sofa.jraft.core.StateMachineAdapter; import com.alipay.sofa.jraft.entity.LeaderChangeContext; import com.alipay.sofa.jraft.entity.LocalFileMetaOutter; @@ -77,7 +79,6 @@ class NacosStateMachine extends StateMachineAdapter { this.server = server; this.processor = processor; this.groupId = processor.group(); - adapterToJRaftSnapshot(processor.loadSnapshotOperate()); } @@ -215,6 +216,13 @@ public void onStartFollowing(LeaderChangeContext ctx) { .raftClusterInfo(allPeers()).build()); } + @Override + public void onConfigurationCommitted(Configuration conf) { + NotifyCenter.publishEvent( + RaftEvent.builder().groupId(groupId) + .raftClusterInfo(JRaftUtils.toStrings(conf.getPeers())).build()); + } + @Override public void onError(RaftException e) { super.onError(e); @@ -305,7 +313,7 @@ public boolean onSnapshotLoad(SnapshotReader reader) { fileMeta = new LocalFileMeta(); } else { - fileMeta = JSON.parseObject(bytes, LocalFileMeta.class); + fileMeta = JacksonUtils.toObj(bytes, LocalFileMeta.class); } metaMap.put(fileName, fileMeta); diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftConfig.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftConfig.java index a5374b1978a..7768d094592 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftConfig.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftConfig.java @@ -19,12 +19,10 @@ import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.consistency.Config; import com.alibaba.nacos.consistency.cp.LogProcessor4CP; -import java.util.ArrayList; -import java.util.Collection; + import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftEvent.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftEvent.java index 3148353e888..b94d6265b2d 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftEvent.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftEvent.java @@ -30,7 +30,7 @@ public class RaftEvent implements SlowEvent { private String groupId; - private String leader; + private String leader = null; private Long term = null; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftSysConstants.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftSysConstants.java index 62809335d53..80c796c35c6 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftSysConstants.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/RaftSysConstants.java @@ -49,56 +49,67 @@ public final class RaftSysConstants { public static final int DEFAULT_RAFT_RPC_REQUEST_TIMEOUT_MS = 5000; /** + * The maximum size of each file RPC (snapshot copy) request between nodes is 128 K by default * 节点之间每次文件 RPC (snapshot拷贝)请求的最大大小,默认为 128 K */ public static final int DEFAULT_MAX_BYTE_COUNT_PER_RPC = 128 * 1024; /** + * The maximum number of logs sent from the leader to the followers is 1024 by default * 从 leader 往 follower 发送的最大日志个数,默认 1024 */ public static final int DEFAULT_MAX_ENTRIES_SIZE = 1024; /** + * The maximum body size of the log sent from the leader to the followers is 512K by default * 从 leader 往 follower 发送日志的最大 body 大小,默认 512K */ public static final int DEFAULT_MAX_BODY_SIZE = 512 * 1024; /** + * The maximum size of the log storage buffer is 256K by default * 日志存储缓冲区最大大小,默认256K */ public static final int DEFAULT_MAX_APPEND_BUFFER_SIZE = 256 * 1024; /** + * The election timer interval will be a random maximum outside the specified time, 1 second by default * 选举定时器间隔会在指定时间之外随机的最大范围,默认1秒 */ public static final int DEFAULT_MAX_ELECTION_DELAY_MS = 1000; /** - * 指定选举超时时间和心跳间隔时间之间的比值。心跳间隔等于 - * electionTimeoutMs/electionHeartbeatFactor,默认10分之一。 + * Specifies the ratio of the election timeout to the heartbeat interval. Heartbeat interval is equal to the electionTimeoutMs/electionHeartbeatFactor, default one of 10 points. + * 指定选举超时时间和心跳间隔时间之间的比值。心跳间隔等于electionTimeoutMs/electionHeartbeatFactor,默认10分之一。 */ public static final int DEFAULT_ELECTION_HEARTBEAT_FACTOR = 10; /** + * The tasks submitted to the leader will accumulate one batch into the maximum batch size stored in the log, and 32 tasks will be assigned by default * 向 leader 提交的任务累积一个批次刷入日志存储的最大批次大小,默认 32 个任务 */ public static final int DEFAULT_APPLY_BATCH = 32; /** + * Call fsync when necessary when writing log, meta information, and it should always be true * 写入日志、元信息的时候必要的时候调用 fsync,通常都应该为 true */ public static final boolean DEFAULT_SYNC = true; /** - * 写入 snapshot/raft 元信息是否调用 fsync,默认为 false, - * 在 sync 为 true 的情况下,优选尊重 sync + * If fsync is called by writing snapshot/raft information, the default is false. If sync is true, it is better to respect sync + * 写入 snapshot/raft 元信息是否调用 fsync,默认为 false,在 sync 为 true 的情况下,优选尊重 sync */ public static final boolean DEFAULT_SYNC_META = false; /** + * Internal disruptor buffer size, need to be appropriately adjusted for high write throughput applications, default 16384 * 内部 disruptor buffer 大小,如果是写入吞吐量较高的应用,需要适当调高该值,默认 16384 */ public static final int DEFAULT_DISRUPTOR_BUFFER_SIZE = 16384; /** + * Whether to enable replicated pipeline request optimization by default * 是否启用复制的 pipeline 请求优化,默认打开 */ public static final boolean DEFAULT_REPLICATOR_PIPELINE = true; /** + * Maximum in-flight requests with pipeline requests enabled, 256 by default * 在启用 pipeline 请求情况下,最大 in-flight 请求数,默认256 */ public static final int DEFAULT_MAX_REPLICATOR_INFLIGHT_MSGS = 256; /** + * Whether LogEntry checksum is enabled * 是否启用 LogEntry checksum */ public static final boolean DEFAULT_ENABLE_LOG_ENTRY_CHECKSUM = false; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/AbstractProcessor.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/AbstractProcessor.java index 37dc09fe02a..471eaf357a2 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/AbstractProcessor.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/AbstractProcessor.java @@ -1,18 +1,18 @@ /* * - * * Copyright 1999-2018 Alibaba Group Holding Ltd. - * * - * * Licensed 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 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. * */ @@ -93,7 +93,6 @@ public void run(Status status) { asyncCtx.sendResponse(Response.newBuilder().setErrMsg(ex.toString()) .setSuccess(false).build()); } else { - ByteString bytes = Objects.nonNull(data) ? ByteString.copyFrom(serializer.serialize(data)) : ByteString.EMPTY; Response response = Response.newBuilder() diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/NacosGetRequestProcessor.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/NacosGetRequestProcessor.java index 1e6f238437a..5b94fedd62b 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/NacosGetRequestProcessor.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/processor/NacosGetRequestProcessor.java @@ -1,18 +1,18 @@ /* * - * * Copyright 1999-2018 Alibaba Group Holding Ltd. - * * - * * Licensed 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 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. * */ diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftOps.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftOps.java index 51ed140ee84..87cf016abd7 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftOps.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftOps.java @@ -1,18 +1,18 @@ /* * - * * Copyright 1999-2018 Alibaba Group Holding Ltd. - * * - * * Licensed 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 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. * */ diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java index 51bcd1ae586..f52f086d5a3 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.core.distributed.raft.utils; -import com.alibaba.nacos.common.utils.DiskUtils; +import com.alibaba.nacos.core.utils.DiskUtils; import com.alibaba.nacos.consistency.SerializeFactory; import com.alibaba.nacos.consistency.entity.GetRequest; import com.alibaba.nacos.common.utils.ThreadUtils; @@ -34,7 +34,6 @@ import com.alipay.sofa.jraft.conf.Configuration; import com.alipay.sofa.jraft.entity.PeerId; import com.alipay.sofa.jraft.option.NodeOptions; -import com.alipay.sofa.jraft.rpc.RaftRpcFactory; import com.alipay.sofa.jraft.rpc.RaftRpcServerFactory; import com.alipay.sofa.jraft.rpc.RpcServer; import com.alipay.sofa.jraft.rpc.impl.GrpcRaftRpcFactory; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftExecutor.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftExecutor.java index 9a0db7a2481..07aec35e9f8 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftExecutor.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftExecutor.java @@ -86,6 +86,16 @@ public static void executeByCommon(Runnable r) { raftCommonExecutor.execute(r); } + public static void scheduleByCommon(Runnable r, long delayMs) { + raftCommonExecutor.schedule(r, delayMs, TimeUnit.MILLISECONDS); + } + + public static void scheduleAtFixedRateByCommon(Runnable command, + long initialDelayMs, + long periodMs) { + raftCommonExecutor.scheduleAtFixedRate(command, initialDelayMs, periodMs, TimeUnit.MILLISECONDS); + } + public static ScheduledExecutorService getRaftCommonExecutor() { return raftCommonExecutor; } diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftOptionsBuilder.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftOptionsBuilder.java index e4066e53f30..f40bb730435 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftOptionsBuilder.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/RaftOptionsBuilder.java @@ -84,17 +84,17 @@ public static RaftOptions initRaftOptions(RaftConfig config) { raftOptions.setApplyBatch( ConvertUtils.toInt(config.getVal(APPLY_BATCH), DEFAULT_APPLY_BATCH)); - raftOptions.setSync(ConvertUtils.toBoolean(config.getVal(SYNC), DEFAULT_SYNC)); + raftOptions.setSync(ConvertUtils.toBool(config.getVal(SYNC), DEFAULT_SYNC)); raftOptions.setSyncMeta( - ConvertUtils.toBoolean(config.getVal(SYNC_META), DEFAULT_SYNC_META)); + ConvertUtils.toBool(config.getVal(SYNC_META), DEFAULT_SYNC_META)); raftOptions.setDisruptorBufferSize(ConvertUtils .toInt(config.getVal(DISRUPTOR_BUFFER_SIZE), DEFAULT_DISRUPTOR_BUFFER_SIZE)); raftOptions.setReplicatorPipeline(ConvertUtils - .toBoolean(config.getVal(REPLICATOR_PIPELINE), + .toBool(config.getVal(REPLICATOR_PIPELINE), DEFAULT_REPLICATOR_PIPELINE)); raftOptions.setMaxReplicatorInflightMsgs(ConvertUtils @@ -102,7 +102,7 @@ public static RaftOptions initRaftOptions(RaftConfig config) { DEFAULT_MAX_REPLICATOR_INFLIGHT_MSGS)); raftOptions.setEnableLogEntryChecksum(ConvertUtils - .toBoolean(config.getVal(ENABLE_LOG_ENTRY_CHECKSUM), + .toBool(config.getVal(ENABLE_LOG_ENTRY_CHECKSUM), DEFAULT_ENABLE_LOG_ENTRY_CHECKSUM)); return raftOptions; diff --git a/common/src/main/java/com/alibaba/nacos/common/file/FileChangeEvent.java b/core/src/main/java/com/alibaba/nacos/core/file/FileChangeEvent.java similarity index 98% rename from common/src/main/java/com/alibaba/nacos/common/file/FileChangeEvent.java rename to core/src/main/java/com/alibaba/nacos/core/file/FileChangeEvent.java index e2a59f4a8ab..d6654828f3d 100644 --- a/common/src/main/java/com/alibaba/nacos/common/file/FileChangeEvent.java +++ b/core/src/main/java/com/alibaba/nacos/core/file/FileChangeEvent.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.alibaba.nacos.common.file; +package com.alibaba.nacos.core.file; import java.io.Serializable; import java.nio.file.WatchEvent; diff --git a/common/src/main/java/com/alibaba/nacos/common/file/FileWatcher.java b/core/src/main/java/com/alibaba/nacos/core/file/FileWatcher.java similarity index 97% rename from common/src/main/java/com/alibaba/nacos/common/file/FileWatcher.java rename to core/src/main/java/com/alibaba/nacos/core/file/FileWatcher.java index 2685451ffb4..519b724fd47 100644 --- a/common/src/main/java/com/alibaba/nacos/common/file/FileWatcher.java +++ b/core/src/main/java/com/alibaba/nacos/core/file/FileWatcher.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.alibaba.nacos.common.file; +package com.alibaba.nacos.core.file; import java.nio.file.WatchEvent; import java.util.concurrent.Executor; diff --git a/common/src/main/java/com/alibaba/nacos/common/file/WatchFileCenter.java b/core/src/main/java/com/alibaba/nacos/core/file/WatchFileCenter.java similarity index 99% rename from common/src/main/java/com/alibaba/nacos/common/file/WatchFileCenter.java rename to core/src/main/java/com/alibaba/nacos/core/file/WatchFileCenter.java index b056ac4d58c..c445df39bab 100644 --- a/common/src/main/java/com/alibaba/nacos/common/file/WatchFileCenter.java +++ b/core/src/main/java/com/alibaba/nacos/core/file/WatchFileCenter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.alibaba.nacos.common.file; +package com.alibaba.nacos.core.file; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.common.executor.ExecutorFactory; diff --git a/core/src/main/java/com/alibaba/nacos/core/monitor/MetricsMonitor.java b/core/src/main/java/com/alibaba/nacos/core/monitor/MetricsMonitor.java new file mode 100644 index 00000000000..91cccd7fdb3 --- /dev/null +++ b/core/src/main/java/com/alibaba/nacos/core/monitor/MetricsMonitor.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.core.monitor; + +import io.micrometer.core.instrument.*; + +/** + * @author liaochuntao + */ +public final class MetricsMonitor { + + private static final DistributionSummary RAFT_READ_INDEX_FAILED; + private static final DistributionSummary RAFT_FROM_LEADER; + private static final Timer RAFT_APPLY_LOG_TIMER; + private static final Timer RAFT_APPLY_READ_TIMER; + + static { + RAFT_READ_INDEX_FAILED = NacosMeterRegistry.summary("protocol", "raft_read_index_failed"); + RAFT_FROM_LEADER = NacosMeterRegistry.summary("protocol", "raft_read_from_leader"); + + RAFT_APPLY_LOG_TIMER = NacosMeterRegistry.timer("protocol", "raft_apply_log_timer"); + RAFT_APPLY_READ_TIMER = NacosMeterRegistry.timer("protocol", "raft_apply_read_timer"); + } + + public static void raftReadIndexFailed() { + RAFT_READ_INDEX_FAILED.record(1); + } + + public static void raftReadFromLeader() { + RAFT_FROM_LEADER.record(1); + } + + public static Timer getRaftApplyLogTimer() { + return RAFT_APPLY_LOG_TIMER; + } + + public static Timer getRaftApplyReadTimer() { + return RAFT_APPLY_READ_TIMER; + } +} diff --git a/core/src/main/java/com/alibaba/nacos/core/monitor/NacosMeterRegistry.java b/core/src/main/java/com/alibaba/nacos/core/monitor/NacosMeterRegistry.java new file mode 100644 index 00000000000..3d41e9678d9 --- /dev/null +++ b/core/src/main/java/com/alibaba/nacos/core/monitor/NacosMeterRegistry.java @@ -0,0 +1,53 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.core.monitor; + +import io.micrometer.core.instrument.DistributionSummary; +import io.micrometer.core.instrument.ImmutableTag; +import io.micrometer.core.instrument.Tag; +import io.micrometer.core.instrument.Timer; +import io.micrometer.core.instrument.composite.CompositeMeterRegistry; + +import java.util.ArrayList; +import java.util.List; + +/** + * Metrics unified usage center + * + * @author liaochuntao + */ +public final class NacosMeterRegistry { + + private static final CompositeMeterRegistry METER_REGISTRY = new CompositeMeterRegistry(); + + public static DistributionSummary summary(String module, String name) { + ImmutableTag moduleTag = new ImmutableTag("module", module); + List tags = new ArrayList<>(); + tags.add(moduleTag); + tags.add(new ImmutableTag("name", name)); + return METER_REGISTRY.summary("nacos_monitor", tags); + } + + public static Timer timer(String module, String name) { + ImmutableTag moduleTag = new ImmutableTag("module", module); + List tags = new ArrayList<>(); + tags.add(moduleTag); + tags.add(new ImmutableTag("name", name)); + return METER_REGISTRY.timer("nacos_monitor", tags); + } + +} diff --git a/core/src/main/java/com/alibaba/nacos/core/notify/DefaultPublisher.java b/core/src/main/java/com/alibaba/nacos/core/notify/DefaultPublisher.java index 61283c0fbd9..16e7bc5adaa 100644 --- a/core/src/main/java/com/alibaba/nacos/core/notify/DefaultPublisher.java +++ b/core/src/main/java/com/alibaba/nacos/core/notify/DefaultPublisher.java @@ -19,6 +19,7 @@ package com.alibaba.nacos.core.notify; import com.alibaba.nacos.common.utils.ConcurrentHashSet; +import com.alibaba.nacos.common.utils.LoggerUtils; import com.alibaba.nacos.common.utils.ThreadUtils; import com.alibaba.nacos.core.notify.listener.SmartSubscribe; import com.alibaba.nacos.core.notify.listener.Subscribe; @@ -57,6 +58,8 @@ public class DefaultPublisher extends Thread implements EventPublisher { @Override public void init(Class type, int bufferSize) { + setDaemon(true); + setName("nacos.publisher-" + type.getName()); this.eventType = type; this.queueMaxSize = bufferSize; this.queue = new ArrayBlockingQueue<>(bufferSize); @@ -155,6 +158,7 @@ public boolean isInitialized() { void receiveEvent(Event event) { final long currentEventSequence = event.sequence(); + final String sourceName = event.getClass().getName(); // Notification single event listener for (Subscribe subscribe : subscribes) { @@ -166,6 +170,12 @@ void receiveEvent(Event event) { event.getClass()); continue; } + + final String targetName = subscribe.subscribeType().getName(); + if (!Objects.equals(sourceName, targetName)) { + continue; + } + notifySubscriber(subscribe, event); } @@ -184,15 +194,11 @@ void receiveEvent(Event event) { @Override public void notifySubscriber(final Subscribe subscribe, final Event event) { + LOGGER.debug("[NotifyCenter] the {} will received by {}", event, subscribe); - final Runnable job = () -> { - try { - subscribe.onEvent(event); - } - catch (ClassCastException ignore) { } - }; + final Runnable job = () -> subscribe.onEvent(event); final Executor executor = subscribe.executor(); if (Objects.nonNull(executor)) { executor.execute(job); diff --git a/core/src/main/java/com/alibaba/nacos/core/notify/NotifyCenter.java b/core/src/main/java/com/alibaba/nacos/core/notify/NotifyCenter.java index e1a32439979..6c45e7980bd 100644 --- a/core/src/main/java/com/alibaba/nacos/core/notify/NotifyCenter.java +++ b/core/src/main/java/com/alibaba/nacos/core/notify/NotifyCenter.java @@ -18,7 +18,6 @@ import com.alibaba.nacos.common.JustForTest; import com.alibaba.nacos.common.utils.ConcurrentHashSet; -import com.alibaba.nacos.common.utils.LoggerUtils; import com.alibaba.nacos.common.utils.ShutdownUtils; import com.alibaba.nacos.core.notify.listener.SmartSubscribe; import com.alibaba.nacos.core.notify.listener.Subscribe; @@ -28,7 +27,6 @@ import java.util.Iterator; import java.util.Map; import java.util.NoSuchElementException; -import java.util.Objects; import java.util.ServiceLoader; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -52,61 +50,10 @@ public class NotifyCenter { private static BiFunction, Integer, EventPublisher> BUILD_FACTORY = null; - private final EventPublisher sharePublisher = new EventPublisher() { - - private EventPublisher target; - - @Override - public void init(Class type, int bufferSize) { - target = BUILD_FACTORY.apply(type, bufferSize); - } - - @Override - public long currentEventSize() { - return target.currentEventSize(); - } - - @Override - public void addSubscribe(Subscribe subscribe) { - target.addSubscribe(subscribe); - } - - @Override - public void unSubscribe(Subscribe subscribe) { - target.unSubscribe(subscribe); - } - - @Override - public boolean publish(Event event) { - return target.publish(event); - } - - @Override - public void notifySubscriber(Subscribe subscribe, Event event) { - // Is to handle a SlowEvent, because the event shares an event - // queue and requires additional filtering logic - if (filter(subscribe, event)) { - return; - } - target.notifySubscriber(subscribe, event); - } - - @Override - public void shutdown() { - target.shutdown(); - } - - private boolean filter(final Subscribe subscribe, final Event event) { - final String sourceName = event.getClass().getName(); - final String targetName = subscribe.subscribeType().getName(); - LoggerUtils.printIfDebugEnabled(LOGGER, "source event name : {}, target event name : {}", sourceName, targetName); - return !Objects.equals(sourceName, targetName); - } - - }; - private static final NotifyCenter INSTANCE = new NotifyCenter(); + private EventPublisher sharePublisher; + /** * Publisher management container */ @@ -120,11 +67,11 @@ private boolean filter(final Subscribe subscribe, final Event event) { static { // Internal ArrayBlockingQueue buffer size. For applications with high write throughput, // this value needs to be increased appropriately. default value is 16384 - String ringBufferSizeProperty = "com.alibaba.nacos.core.notify.ringBufferSize"; + String ringBufferSizeProperty = "nacos.core.notify.ring-buffer-size"; RING_BUFFER_SIZE = Integer.getInteger(ringBufferSizeProperty, 16384); // The size of the public publisher's message staging queue buffer - String shareBufferSizeProperty = "com.alibaba.nacos.core.notify.shareBufferSize"; + String shareBufferSizeProperty = "nacos.core.notify.share-buffer-size"; SHATE_BUFFER_SIZE = Integer.getInteger(shareBufferSizeProperty, 1024); ServiceLoader loader = ServiceLoader.load(EventPublisher.class); @@ -145,7 +92,7 @@ private boolean filter(final Subscribe subscribe, final Event event) { }; } - INSTANCE.sharePublisher.init(SlowEvent.class, SHATE_BUFFER_SIZE); + INSTANCE.sharePublisher = BUILD_FACTORY.apply(SlowEvent.class, SHATE_BUFFER_SIZE); ShutdownUtils.addShutdownHook(new Thread(() -> { shutdown(); })); @@ -259,7 +206,12 @@ public static void deregisterSubscribe(final Subscribe consumer) { * @param event */ public static boolean publishEvent(final Event event) { - return publishEvent(event.getClass(), event); + try { + return publishEvent(event.getClass(), event); + } catch (Throwable ex) { + LOGGER.error("There was an exception to the message publishing : {}", ex); + return false; + } } /** diff --git a/core/src/main/java/com/alibaba/nacos/core/utils/ApplicationUtils.java b/core/src/main/java/com/alibaba/nacos/core/utils/ApplicationUtils.java index b4f613a2e7b..06456acf68c 100644 --- a/core/src/main/java/com/alibaba/nacos/core/utils/ApplicationUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/utils/ApplicationUtils.java @@ -17,9 +17,7 @@ package com.alibaba.nacos.core.utils; import com.alibaba.nacos.common.JustForTest; -import com.alibaba.nacos.common.utils.DiskUtils; import com.alibaba.nacos.common.utils.IoUtils; -import com.alibaba.nacos.common.utils.ShutdownUtils; import com.alibaba.nacos.common.utils.StringUtils; import com.sun.management.OperatingSystemMXBean; import org.springframework.beans.BeansException; diff --git a/core/src/main/java/com/alibaba/nacos/core/utils/ClassUtils.java b/core/src/main/java/com/alibaba/nacos/core/utils/ClassUtils.java index 3b906f75a8b..42a3a02bf09 100644 --- a/core/src/main/java/com/alibaba/nacos/core/utils/ClassUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/utils/ClassUtils.java @@ -18,6 +18,8 @@ import org.springframework.core.ResolvableType; +import java.util.Objects; + /** * @author liaochuntao */ @@ -40,4 +42,34 @@ public static Class findClassByName(String className) { } } + public static String getName(Object obj) { + Objects.requireNonNull(obj, "obj"); + return obj.getClass().getName(); + } + + public static String getCanonicalName(Object obj) { + Objects.requireNonNull(obj, "obj"); + return obj.getClass().getCanonicalName(); + } + + public static String getSimplaName(Object obj) { + Objects.requireNonNull(obj, "obj"); + return obj.getClass().getSimpleName(); + } + + public static String getName(Class cls) { + Objects.requireNonNull(cls, "cls"); + return cls.getName(); + } + + public static String getCanonicalName(Class cls) { + Objects.requireNonNull(cls, "cls"); + return cls.getCanonicalName(); + } + + public static String getSimplaName(Class cls) { + Objects.requireNonNull(cls, "cls"); + return cls.getSimpleName(); + } + } \ No newline at end of file diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/DiskUtils.java b/core/src/main/java/com/alibaba/nacos/core/utils/DiskUtils.java similarity index 99% rename from common/src/main/java/com/alibaba/nacos/common/utils/DiskUtils.java rename to core/src/main/java/com/alibaba/nacos/core/utils/DiskUtils.java index bdb621c65da..023d9644c22 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/DiskUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/utils/DiskUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.alibaba.nacos.common.utils; +package com.alibaba.nacos.core.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -28,7 +28,6 @@ import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.FileChannel; -import java.nio.channels.FileLock; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.StandardCharsets; @@ -41,6 +40,7 @@ import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; +import com.alibaba.nacos.common.utils.ByteUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.output.NullOutputStream; diff --git a/core/src/main/java/com/alibaba/nacos/core/utils/TimerContext.java b/core/src/main/java/com/alibaba/nacos/core/utils/TimerContext.java index 7ed282e4a60..b8495fd34e2 100644 --- a/core/src/main/java/com/alibaba/nacos/core/utils/TimerContext.java +++ b/core/src/main/java/com/alibaba/nacos/core/utils/TimerContext.java @@ -16,13 +16,19 @@ package com.alibaba.nacos.core.utils; +import com.alibaba.nacos.common.utils.LoggerUtils; import com.alibaba.nacos.common.utils.Pair; +import com.alibaba.nacos.common.utils.StringUtils; import org.slf4j.Logger; import java.util.concurrent.Callable; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; /** - * Simple task time calculation + * Simple task time calculation,Currently only the task time statistics task that + * supports synchronizing code blocks is supported * * @author liaochuntao */ @@ -30,15 +36,33 @@ public class TimerContext { private static final ThreadLocal> TIME_RECORD = new ThreadLocal<>(); - public static void start(String name) { + public static void start(final String name) { long startTime = System.currentTimeMillis(); TIME_RECORD.set(Pair.with(name, startTime)); } public static void end(final Logger logger) { + end(logger, LoggerUtils.DEBUG); + } + + public static void end(final Logger logger, final String level) { long endTime = System.currentTimeMillis(); Pair record = TIME_RECORD.get(); - logger.info("{} cost time : {} ms", record.getFirst(), (endTime - record.getSecond())); + if (StringUtils.equals(level, LoggerUtils.DEBUG)) { + LoggerUtils.printIfDebugEnabled(logger, "{} cost time : {} ms", record.getFirst(), (endTime - record.getSecond())); + } + if (StringUtils.equals(level, LoggerUtils.INFO)) { + LoggerUtils.printIfInfoEnabled(logger, "{} cost time : {} ms", record.getFirst(), (endTime - record.getSecond())); + } + if (StringUtils.equals(level, LoggerUtils.TRACE)) { + LoggerUtils.printIfTraceEnabled(logger, "{} cost time : {} ms", record.getFirst(), (endTime - record.getSecond())); + } + if (StringUtils.equals(level, LoggerUtils.ERROR)) { + LoggerUtils.printIfErrorEnabled(logger, "{} cost time : {} ms", record.getFirst(), (endTime - record.getSecond())); + } + if (StringUtils.equals(level, LoggerUtils.WARN)) { + LoggerUtils.printIfWarnEnabled(logger, "{} cost time : {} ms", record.getFirst(), (endTime - record.getSecond())); + } TIME_RECORD.remove(); } @@ -51,10 +75,28 @@ public static void run(final Runnable job, final String name, final Logger logge } } - public static V run(final Callable job, final String name, final Logger logger) throws Exception { + public static V run(final Supplier job, final String name, final Logger logger) { + start(name); + try { + return job.get(); + } finally { + end(logger); + } + } + + public static R run(final Function job, T args, final String name, final Logger logger) { + start(name); + try { + return job.apply(args); + } finally { + end(logger); + } + } + + public static void run(final Consumer job, T args, final String name, final Logger logger) { start(name); try { - return job.call(); + job.accept(args); } finally { end(logger); } diff --git a/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java b/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java index 52521982d27..61a77f52f89 100644 --- a/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java @@ -18,12 +18,16 @@ import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.common.http.HttpUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.web.context.request.async.DeferredResult; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; /** * @author nkorange @@ -90,4 +94,31 @@ public static void response(HttpServletResponse response, String body, int code) response.getWriter().write(body); response.setStatus(code); } + + public static void process(DeferredResult deferredResult, CompletableFuture future, Function errorHandler) { + + deferredResult.onTimeout(future::join); + + future.whenComplete((t, throwable) -> { + if (Objects.nonNull(throwable)) { + deferredResult.setResult(errorHandler.apply(throwable)); + return; + } + deferredResult.setResult(t); + }); + } + + public static void process(DeferredResult deferredResult, CompletableFuture future, Runnable success, Function errorHandler) { + + deferredResult.onTimeout(future::join); + + future.whenComplete((t, throwable) -> { + if (Objects.nonNull(throwable)) { + deferredResult.setResult(errorHandler.apply(throwable)); + return; + } + success.run(); + deferredResult.setResult(t); + }); + } } diff --git a/core/src/main/resources/META-INF/logback/nacos.xml b/core/src/main/resources/META-INF/logback/nacos.xml index 0a0ff4c8e23..6d47222cf9d 100644 --- a/core/src/main/resources/META-INF/logback/nacos.xml +++ b/core/src/main/resources/META-INF/logback/nacos.xml @@ -189,7 +189,7 @@ - + diff --git a/distribution/LICENSE-BIN b/distribution/LICENSE-BIN index 372617233b3..5be5ed21996 100644 --- a/distribution/LICENSE-BIN +++ b/distribution/LICENSE-BIN @@ -245,24 +245,6 @@ The source code of slf4j can be found at https://github.com/qos-ch/slf4j. OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------- -This product has a bundle fastjson, which is available under the ASL2 License. -The source code of fastjson can be found at https://github.com/alibaba/fastjson. - - Copyright 1999-2016 Alibaba Group Holding Ltd. - - Licensed 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 product has a bundle javassist, which is available under the ASL2 License. The source code of javassist can be found at https://github.com/jboss-javassist/javassist. @@ -301,7 +283,7 @@ The source code of jna can be found at https://github.com/java-native-access/jna This product has a bundle guava, which is available under the ASL2 License. The source code of guava can be found at https://github.com/google/guava. - Copyright (C) 2007 The Guava authors + Copyright (C) 2007 The Guava authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/distribution/conf/application.properties b/distribution/conf/application.properties index 8e8e40c1978..87dc5455af1 100644 --- a/distribution/conf/application.properties +++ b/distribution/conf/application.properties @@ -117,7 +117,7 @@ nacos.istio.mcp.server.enabled=false -###*************** Add from 1.3.0-BETA ***************### +###*************** Add from 1.3.0 ***************### #*************** Core Related Configurations ***************# @@ -157,4 +157,4 @@ nacos.istio.mcp.server.enabled=false ### raft linear read strategy, defaults to index # nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe ### rpc request timeout, default 5 seconds -# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 \ No newline at end of file +# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 diff --git a/distribution/conf/application.properties.example b/distribution/conf/application.properties.example index 8e8e40c1978..87dc5455af1 100644 --- a/distribution/conf/application.properties.example +++ b/distribution/conf/application.properties.example @@ -117,7 +117,7 @@ nacos.istio.mcp.server.enabled=false -###*************** Add from 1.3.0-BETA ***************### +###*************** Add from 1.3.0 ***************### #*************** Core Related Configurations ***************# @@ -157,4 +157,4 @@ nacos.istio.mcp.server.enabled=false ### raft linear read strategy, defaults to index # nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe ### rpc request timeout, default 5 seconds -# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 \ No newline at end of file +# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 diff --git a/distribution/conf/nacos-logback.xml b/distribution/conf/nacos-logback.xml index 437d277f253..27da0022bfa 100644 --- a/distribution/conf/nacos-logback.xml +++ b/distribution/conf/nacos-logback.xml @@ -608,7 +608,7 @@ - + diff --git a/distribution/logs/start.out b/distribution/logs/start.out deleted file mode 100644 index 015d9fdfff8..00000000000 --- a/distribution/logs/start.out +++ /dev/null @@ -1,2 +0,0 @@ -/Users/liaochuntao/.sdkman/candidates/java/current/bin/java -DembeddedStorage=true -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Volumes/resources/github/nacos/distribution/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list=127.0.0.1:8080 -Djava.ext.dirs=/Users/liaochuntao/.sdkman/candidates/java/current/jre/lib/ext:/Users/liaochuntao/.sdkman/candidates/java/current/lib/ext -Xloggc:/Volumes/resources/github/nacos/distribution/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/Volumes/resources/github/nacos/distribution/plugins/health,/Volumes/resources/github/nacos/distribution/plugins/cmdb,/Volumes/resources/github/nacos/distribution/plugins/mysql -Dnacos.home=/Volumes/resources/github/nacos/distribution -jar /Volumes/resources/github/nacos/distribution/target/nacos-server.jar --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/Volumes/resources/github/nacos/distribution/conf/ --logging.config=/Volumes/resources/github/nacos/distribution/conf/nacos-logback.xml --server.max-http-header-size=524288 -Error: Unable to access jarfile /Volumes/resources/github/nacos/distribution/target/nacos-server.jar diff --git a/distribution/pom.xml b/distribution/pom.xml index 714b4927e48..e3ffb0b6075 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -18,7 +18,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 ../pom.xml @@ -46,6 +46,7 @@ + org.apache.maven.plugins maven-assembly-plugin @@ -78,6 +79,7 @@ + org.apache.maven.plugins maven-assembly-plugin @@ -105,8 +107,8 @@ nacos-address + org.apache.maven.plugins maven-assembly-plugin - 3.0.0 release-address.xml @@ -136,6 +138,7 @@ + org.apache.maven.plugins maven-assembly-plugin @@ -168,6 +171,7 @@ + org.apache.maven.plugins maven-assembly-plugin @@ -200,8 +204,8 @@ + org.apache.maven.plugins maven-assembly-plugin - 3.0.0 release-nacos.xml diff --git a/example/pom.xml b/example/pom.xml index 209d0992614..514160e2657 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -18,7 +18,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 ../pom.xml @@ -28,7 +28,7 @@ jar nacos-example ${project.version} - http://maven.apache.org + http://nacos.io UTF-8 diff --git a/istio/pom.xml b/istio/pom.xml index 45a64c25bc2..9ae0eb16dbe 100644 --- a/istio/pom.xml +++ b/istio/pom.xml @@ -18,7 +18,7 @@ nacos-all com.alibaba.nacos - 1.3.0-BETA + 1.3.0 4.0.0 @@ -26,7 +26,7 @@ jar nacos-istio ${project.version} - http://maven.apache.org + http://nacos.io @@ -94,7 +94,6 @@ maven-source-plugin - 2.2.1 attach-sources diff --git a/naming/pom.xml b/naming/pom.xml index 3accb3a282a..878202896e4 100644 --- a/naming/pom.xml +++ b/naming/pom.xml @@ -18,7 +18,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 ../pom.xml @@ -28,7 +28,7 @@ jar nacos-naming ${project.version} - http://maven.apache.org + http://nacos.io UTF-8 @@ -52,10 +52,6 @@ nacos-api - - com.alibaba - fastjson - io.netty @@ -211,7 +207,6 @@ org.codehaus.mojo findbugs-maven-plugin - 3.0.4 diff --git a/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerListManager.java b/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerListManager.java new file mode 100644 index 00000000000..75e86a65c7c --- /dev/null +++ b/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerListManager.java @@ -0,0 +1,232 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.naming.cluster; + +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.alibaba.nacos.core.cluster.Member; +import com.alibaba.nacos.core.cluster.MemberChangeEvent; +import com.alibaba.nacos.core.cluster.MemberChangeListener; +import com.alibaba.nacos.core.cluster.MemberMetaDataConstants; +import com.alibaba.nacos.core.cluster.NodeState; +import com.alibaba.nacos.core.cluster.ServerMemberManager; +import com.alibaba.nacos.core.notify.NotifyCenter; +import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeer; +import com.alibaba.nacos.naming.misc.GlobalExecutor; +import com.alibaba.nacos.naming.misc.Loggers; +import com.alibaba.nacos.naming.misc.Message; +import com.alibaba.nacos.naming.misc.NamingProxy; +import com.alibaba.nacos.naming.misc.ServerStatusSynchronizer; +import com.alibaba.nacos.naming.misc.SwitchDomain; +import com.alibaba.nacos.naming.misc.Synchronizer; +import com.alibaba.nacos.naming.misc.UtilsAndCommons; +import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + * The manager to globally refresh and operate server list. + * + * @author nkorange + * @since 1.0.0 + * @deprecated 1.3.0 This object will be deleted sometime after version 1.3.0 + */ +@Component("serverListManager") +public class ServerListManager implements MemberChangeListener { + + private final static String LOCALHOST_SITE = UtilsAndCommons.UNKNOWN_SITE; + + private final SwitchDomain switchDomain; + private final ServerMemberManager memberManager; + private final Synchronizer synchronizer = new ServerStatusSynchronizer(); + + private volatile List servers; + + public ServerListManager(final SwitchDomain switchDomain, + final ServerMemberManager memberManager) { + this.switchDomain = switchDomain; + this.memberManager = memberManager; + NotifyCenter.registerSubscribe(this); + this.servers = new ArrayList<>(memberManager.allMembers()); + } + + @PostConstruct + public void init() { + GlobalExecutor.registerServerStatusReporter(new ServerStatusReporter(), 2000); + GlobalExecutor.registerServerInfoUpdater(new ServerInfoUpdater()); + } + + public boolean contains(String s) { + for (Member server : getServers()) { + if (Objects.equals(s, server.getAddress())) { + return true; + } + } + return false; + } + + public List getServers() { + return servers; + } + + @Override + public void onEvent(MemberChangeEvent event) { + this.servers = new ArrayList<>(event.getMembers()); + } + + /** + * Compatible with older version logic, In version 1.2.1 and before + * + * @param configInfo site:ip:lastReportTime:weight + */ + public synchronized void onReceiveServerStatus(String configInfo) { + + Loggers.SRV_LOG.info("receive config info: {}", configInfo); + + String[] configs = configInfo.split("\r\n"); + if (configs.length == 0) { + return; + } + + for (String config : configs) { + // site:ip:lastReportTime:weight + String[] params = config.split("#"); + if (params.length <= 3) { + Loggers.SRV_LOG.warn("received malformed distro map data: {}", config); + continue; + } + + Member server = Optional.ofNullable(memberManager.find(params[1])).orElse(Member.builder() + .ip(params[1].split(UtilsAndCommons.IP_PORT_SPLITER)[0]) + .state(NodeState.UP) + .port(Integer.parseInt(params[1].split(UtilsAndCommons.IP_PORT_SPLITER)[1])) + .build()); + + server.setExtendVal(MemberMetaDataConstants.SITE_KEY, params[0]); + server.setExtendVal(MemberMetaDataConstants.WEIGHT, params.length == 4 ? Integer.parseInt(params[3]) : 1); + memberManager.update(server); + + if (!contains(server.getAddress())) { + throw new IllegalArgumentException("server: " + server.getAddress() + " is not in serverlist"); + } + } + } + + private class ServerInfoUpdater implements Runnable { + + private int cursor = 0; + + @Override + public void run() { + List members = servers; + if (members.isEmpty()) { + return; + } + + this.cursor = (this.cursor + 1) % members.size(); + Member target = members.get(cursor); + if (Objects.equals(target.getAddress(), ApplicationUtils.getLocalAddress())) { + return; + } + + // This metadata information exists from 1.3.0 onwards "version" + if (target.getExtendVal(MemberMetaDataConstants.VERSION) != null) { + return; + } + + final String path = UtilsAndCommons.NACOS_NAMING_OPERATOR_CONTEXT + UtilsAndCommons.NACOS_NAMING_CLUSTER_CONTEXT + "/state"; + final Map params = Maps.newHashMapWithExpectedSize(2); + final String server = target.getAddress(); + + try { + String content = NamingProxy.reqCommon(path, params, server, false); + if (!StringUtils.EMPTY.equals(content)) { + RaftPeer raftPeer = JacksonUtils.toObj(content, RaftPeer.class); + if (null != raftPeer) { + String json = JacksonUtils.toJson(raftPeer); + Map map = JacksonUtils.toObj(json, HashMap.class); + target.setExtendVal("naming", map); + memberManager.update(target); + } + } + } catch (Exception ignore) { + // + } + } + } + + private class ServerStatusReporter implements Runnable { + + @Override + public void run() { + try { + + if (ApplicationUtils.getPort() <= 0) { + return; + } + + int weight = Runtime.getRuntime().availableProcessors() / 2; + if (weight <= 0) { + weight = 1; + } + + long curTime = System.currentTimeMillis(); + String status = LOCALHOST_SITE + "#" + ApplicationUtils.getLocalAddress() + "#" + curTime + "#" + weight + "\r\n"; + + List allServers = getServers(); + + if (!contains(ApplicationUtils.getLocalAddress())) { + Loggers.SRV_LOG.error("local ip is not in serverlist, ip: {}, serverlist: {}", ApplicationUtils.getLocalAddress(), allServers); + return; + } + + if (allServers.size() > 0 && !ApplicationUtils.getLocalAddress().contains(UtilsAndCommons.LOCAL_HOST_IP)) { + for (Member server : allServers) { + if (Objects.equals(server.getAddress(), ApplicationUtils.getLocalAddress())) { + continue; + } + + // This metadata information exists from 1.3.0 onwards "version" + if (server.getExtendVal(MemberMetaDataConstants.VERSION) != null) { + Loggers.SRV_LOG.debug("[SERVER-STATUS] target {} has extend val {} = {}, use new api report status", server.getAddress(), MemberMetaDataConstants.VERSION, server.getExtendVal(MemberMetaDataConstants.VERSION)); + continue; + } + + Message msg = new Message(); + msg.setData(status); + + synchronizer.send(server.getAddress(), msg); + } + } + } catch (Exception e) { + Loggers.SRV_LOG.error("[SERVER-STATUS] Exception while sending server status", e); + } finally { + GlobalExecutor.registerServerStatusReporter(this, switchDomain.getServerStatusSynchronizationPeriodMillis()); + } + + } + } + +} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/FastJsonSerializer.java b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/FastJsonSerializer.java deleted file mode 100644 index 886f779a242..00000000000 --- a/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/FastJsonSerializer.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed 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. - */ -package com.alibaba.nacos.naming.cluster.transport; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; -import com.alibaba.nacos.naming.consistency.Datum; -import com.alibaba.nacos.naming.misc.Loggers; -import com.alibaba.nacos.naming.pojo.Record; -import org.springframework.stereotype.Component; - -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.Map; - -/** - * Use FastJSON to serialize data - * - * @author nkorange - * @since 1.0.0 - */ -@Component -public class FastJsonSerializer implements Serializer { - - @Override - public byte[] serialize(T data) { - return JSON.toJSONBytes(data); - } - - @Override - public T deserialize(byte[] data, Class clazz) { - return JSON.parseObject(new String(data, StandardCharsets.UTF_8), clazz); - } - - @Override - public T deserialize(byte[] data, TypeReference clazz) { - try { - String dataString = new String(data, StandardCharsets.UTF_8); - return JSON.parseObject(dataString, clazz); - } catch (Exception e) { - Loggers.SRV_LOG.error("deserialize data failed.", e); - } - return null; - } - - @Override - public Map> deserializeMap(byte[] data, Class clazz) { - try { - String dataString = new String(data, StandardCharsets.UTF_8); - Map dataMap = JSON.parseObject(dataString, new TypeReference>() { - }); - - Map> resultMap = new HashMap<>(dataMap.size()); - for (Map.Entry entry : dataMap.entrySet()) { - - Datum datum = new Datum<>(); - datum.timestamp.set(entry.getValue().getLongValue("timestamp")); - datum.key = entry.getValue().getString("key"); - datum.value = JSON.parseObject(entry.getValue().getJSONObject("value").toJSONString(), clazz); - resultMap.put(entry.getKey(), datum); - } - - return resultMap; - } catch (Exception e) { - Loggers.SRV_LOG.error("deserialize data failed.", e); - } - return null; - } -} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/JacksonSerializer.java b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/JacksonSerializer.java new file mode 100644 index 00000000000..fe27af649e6 --- /dev/null +++ b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/JacksonSerializer.java @@ -0,0 +1,66 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.naming.cluster.transport; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.stereotype.Component; + +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.alibaba.nacos.naming.consistency.Datum; +import com.alibaba.nacos.naming.pojo.Record; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + +/** + * Use Jackson to serialize data + * + * @author yangyi + */ +@Component +public class JacksonSerializer implements Serializer { + + @Override + public byte[] serialize(T data) { + return JacksonUtils.toJsonBytes(data); + } + + @Override + public T deserialize(byte[] data, Class clazz) { + return JacksonUtils.toObj(data, clazz); + } + + @Override + public Map> deserializeMap(byte[] data, Class clazz) { + Map> resultMap; + try { + resultMap = JacksonUtils.toObj(data, new TypeReference>>() {}); + } catch (Exception e) { + Map dataMap = JacksonUtils.toObj(data, new TypeReference>() {}); + resultMap = new HashMap<>(dataMap.size()); + for (Map.Entry entry : dataMap.entrySet()) { + Datum datum = new Datum<>(); + datum.timestamp.set(entry.getValue().get("timestamp").asLong()); + datum.key = entry.getValue().get("key").asText(); + datum.value = JacksonUtils.toObj(entry.getValue().get("value").toString(), clazz); + resultMap.put(entry.getKey(), datum); + } + } + return resultMap; + } +} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/Serializer.java b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/Serializer.java index 024638664bf..3aa7fed9720 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/Serializer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/Serializer.java @@ -15,7 +15,6 @@ */ package com.alibaba.nacos.naming.cluster.transport; -import com.alibaba.fastjson.TypeReference; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.pojo.Record; @@ -48,16 +47,6 @@ public interface Serializer { */ T deserialize(byte[] data, Class clazz); - /** - * Deserialize byte array data to target generic type - * - * @param data data to deserialize - * @param clazz target type - * @param target type - * @return deserialized data - */ - T deserialize(byte[] data, TypeReference clazz); - /** * Deserialize byte array data to target type * diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/DelegateConsistencyServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/DelegateConsistencyServiceImpl.java index fa24eee6df0..321d3e9045c 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/DelegateConsistencyServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/DelegateConsistencyServiceImpl.java @@ -19,7 +19,6 @@ import com.alibaba.nacos.naming.consistency.ephemeral.EphemeralConsistencyService; import com.alibaba.nacos.naming.consistency.persistent.PersistentConsistencyService; import com.alibaba.nacos.naming.pojo.Record; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Service; @@ -33,11 +32,15 @@ @Service("consistencyDelegate") public class DelegateConsistencyServiceImpl implements ConsistencyService { - @Autowired - private PersistentConsistencyService persistentConsistencyService; + private final PersistentConsistencyService persistentConsistencyService; + private final EphemeralConsistencyService ephemeralConsistencyService; - @Autowired - private EphemeralConsistencyService ephemeralConsistencyService; + public DelegateConsistencyServiceImpl( + PersistentConsistencyService persistentConsistencyService, + EphemeralConsistencyService ephemeralConsistencyService) { + this.persistentConsistencyService = persistentConsistencyService; + this.ephemeralConsistencyService = ephemeralConsistencyService; + } @Override public void put(String key, Record value) throws NacosException { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DataSyncer.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DataSyncer.java index 451e942ff93..a15925b1d17 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DataSyncer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DataSyncer.java @@ -45,22 +45,23 @@ @DependsOn("ProtocolManager") public class DataSyncer { - @Autowired - private DataStore dataStore; - - @Autowired - private GlobalConfig partitionConfig; - - @Autowired - private Serializer serializer; - - @Autowired - private DistroMapper distroMapper; - - @Autowired - private ServerMemberManager memberManager; - - private Map taskMap = new ConcurrentHashMap<>(); + private final DataStore dataStore; + private final GlobalConfig partitionConfig; + private final Serializer serializer; + private final DistroMapper distroMapper; + private final ServerMemberManager memberManager; + + private Map taskMap = new ConcurrentHashMap<>(16); + + public DataSyncer(DataStore dataStore, GlobalConfig partitionConfig, + Serializer serializer, DistroMapper distroMapper, + ServerMemberManager memberManager) { + this.dataStore = dataStore; + this.partitionConfig = partitionConfig; + this.serializer = serializer; + this.distroMapper = distroMapper; + this.memberManager = memberManager; + } @PostConstruct public void init() { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java index d495907d2e6..6943d45ba32 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java @@ -17,6 +17,7 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.common.utils.Objects; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.utils.ApplicationUtils; @@ -34,12 +35,10 @@ import com.alibaba.nacos.naming.misc.GlobalExecutor; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.NamingProxy; -import com.alibaba.nacos.naming.misc.NetUtils; import com.alibaba.nacos.naming.misc.SwitchDomain; import com.alibaba.nacos.naming.pojo.Record; import org.apache.commons.lang3.StringUtils; import org.javatuples.Pair; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.DependsOn; import javax.annotation.PostConstruct; @@ -49,7 +48,7 @@ import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.ConcurrentLinkedQueue; /** * A consistency protocol algorithm called Distro @@ -69,26 +68,19 @@ @org.springframework.stereotype.Service("distroConsistencyService") public class DistroConsistencyServiceImpl implements EphemeralConsistencyService { - @Autowired - private DistroMapper distroMapper; + private final DistroMapper distroMapper; - @Autowired - private DataStore dataStore; + private final DataStore dataStore; - @Autowired - private TaskDispatcher taskDispatcher; + private final TaskDispatcher taskDispatcher; - @Autowired - private Serializer serializer; + private final Serializer serializer; - @Autowired - private ServerMemberManager memberManager; + private final ServerMemberManager memberManager; - @Autowired - private SwitchDomain switchDomain; + private final SwitchDomain switchDomain; - @Autowired - private GlobalConfig globalConfig; + private final GlobalConfig globalConfig; private boolean initialized = false; @@ -96,10 +88,23 @@ public class DistroConsistencyServiceImpl implements EphemeralConsistencyService private LoadDataTask loadDataTask = new LoadDataTask(); - private Map> listeners = new ConcurrentHashMap<>(); + private Map> listeners = new ConcurrentHashMap<>(); private Map syncChecksumTasks = new ConcurrentHashMap<>(16); + public DistroConsistencyServiceImpl(DistroMapper distroMapper, DataStore dataStore, + TaskDispatcher taskDispatcher, Serializer serializer, + ServerMemberManager memberManager, SwitchDomain switchDomain, + GlobalConfig globalConfig) { + this.distroMapper = distroMapper; + this.dataStore = dataStore; + this.taskDispatcher = taskDispatcher; + this.serializer = serializer; + this.memberManager = memberManager; + this.switchDomain = switchDomain; + this.globalConfig = globalConfig; + } + @PostConstruct public void init() { GlobalExecutor.submit(loadDataTask); @@ -115,6 +120,8 @@ public void run() { if (!initialized) { GlobalExecutor .submit(this, globalConfig.getLoadDataRetryDelayMillis()); + } else { + Loggers.DISTRO.info("load data success"); } } catch (Exception e) { @@ -136,7 +143,7 @@ public void load() throws Exception { for (Map.Entry entry : memberManager.getServerList().entrySet()) { final String address = entry.getValue().getAddress(); - if (NetUtils.localServer().equals(address)) { + if (ApplicationUtils.getLocalAddress().equals(address)) { continue; } if (Loggers.DISTRO.isDebugEnabled()) { @@ -237,10 +244,8 @@ public void onReceiveChecksums(Map checksumMap, String server) { } } - if (Loggers.DISTRO.isDebugEnabled()) { - Loggers.DISTRO.info("to remove keys: {}, to update keys: {}, source: {}", + Loggers.DISTRO.info("to remove keys: {}, to update keys: {}, source: {}", toRemoveKeys, toUpdateKeys, server); - } for (String key : toRemoveKeys) { onRemove(key); @@ -269,8 +274,7 @@ public boolean syncAllDataFromRemote(String server) { try { byte[] data = NamingProxy.getAllData(server); - processData(data); - return true; + return processData(data); } catch (Exception e) { Loggers.DISTRO.error("sync full data from " + server + " failed!", e); @@ -278,7 +282,7 @@ public boolean syncAllDataFromRemote(String server) { } } - public void processData(byte[] data) throws Exception { + public boolean processData(byte[] data) throws Exception { if (data.length > 0) { Map> datumMap = serializer .deserializeMap(data, Instances.class); @@ -300,7 +304,13 @@ public void processData(byte[] data) throws Exception { // now validate the service. if failed, exception will be thrown service.setLastModifiedMillis(System.currentTimeMillis()); service.recalculateChecksum(); - listeners.get(KeyBuilder.SERVICE_META_KEY_PREFIX).get(0).onChange( + + // The Listener corresponding to the key value must not be empty + RecordListener listener = listeners.get(KeyBuilder.SERVICE_META_KEY_PREFIX).peek(); + if (Objects.isNull(listener)) { + return false; + } + listener.onChange( KeyBuilder.buildServiceMetaKey(namespaceId, serviceName), service); } @@ -331,12 +341,13 @@ public void processData(byte[] data) throws Exception { dataStore.put(entry.getKey(), entry.getValue()); } } + return true; } @Override public void listen(String key, RecordListener listener) throws NacosException { if (!listeners.containsKey(key)) { - listeners.put(key, new CopyOnWriteArrayList<>()); + listeners.put(key, new ConcurrentLinkedQueue<>()); } if (listeners.get(key).contains(listener)) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/TaskDispatcher.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/TaskDispatcher.java index 917c5038a0c..fd66f51d497 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/TaskDispatcher.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/TaskDispatcher.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.consistency.ephemeral.distro; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.naming.misc.*; import org.apache.commons.lang3.StringUtils; @@ -125,7 +125,7 @@ public void run() { syncTask.setTargetServer(member.getAddress()); if (Loggers.DISTRO.isDebugEnabled() && StringUtils.isNotBlank(key)) { - Loggers.DISTRO.debug("add sync task: {}", JSON.toJSONString(syncTask)); + Loggers.DISTRO.debug("add sync task: {}", JacksonUtils.toJson(syncTask)); } dataSyncer.submit(syncTask, 0); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java index 3dc2a000edd..8f550fb73f7 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java @@ -15,10 +15,7 @@ */ package com.alibaba.nacos.naming.consistency.persistent.raft; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.consistency.ApplyAction; import com.alibaba.nacos.naming.consistency.Datum; @@ -29,6 +26,10 @@ import com.alibaba.nacos.naming.misc.*; import com.alibaba.nacos.naming.monitor.MetricsMonitor; import com.alibaba.nacos.naming.pojo.Record; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.ning.http.client.AsyncCompletionHandler; import com.ning.http.client.Response; import org.apache.commons.lang3.StringUtils; @@ -155,15 +156,15 @@ public Map> getListeners() { public void signalPublish(String key, Record value) throws Exception { if (!isLeader()) { - JSONObject params = new JSONObject(); + ObjectNode params = JacksonUtils.createEmptyJsonNode(); params.put("key", key); - params.put("value", value); + params.replace("value", JacksonUtils.transferToJsonNode(value)); Map parameters = new HashMap<>(1); parameters.put("key", key); final RaftPeer leader = getLeader(); - raftProxy.proxyPostLarge(leader.ip, API_PUB, params.toJSONString(), parameters); + raftProxy.proxyPostLarge(leader.ip, API_PUB, params.toString(), parameters); return; } @@ -179,13 +180,13 @@ public void signalPublish(String key, Record value) throws Exception { datum.timestamp.set(getDatum(key).timestamp.incrementAndGet()); } - JSONObject json = new JSONObject(); - json.put("datum", datum); - json.put("source", peers.local()); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); + json.replace("datum", JacksonUtils.transferToJsonNode(datum)); + json.replace("source", JacksonUtils.transferToJsonNode(peers.local())); onPublish(datum, peers.local()); - final String content = JSON.toJSONString(json); + final String content = json.toString(); final CountDownLatch latch = new CountDownLatch(peers.majorityCount()); for (final String server : peers.allServersIncludeMyself()) { @@ -239,18 +240,18 @@ public void signalDelete(final String key) throws Exception { return; } - JSONObject json = new JSONObject(); // construct datum: Datum datum = new Datum(); datum.key = key; - json.put("datum", datum); - json.put("source", peers.local()); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); + json.replace("datum", JacksonUtils.transferToJsonNode(datum)); + json.replace("source", JacksonUtils.transferToJsonNode(peers.local())); onDelete(datum.key, peers.local()); for (final String server : peers.allServersWithoutMySelf()) { String url = buildURL(server, API_ON_DEL); - HttpClient.asyncHttpDeleteLarge(url, null, JSON.toJSONString(json) + HttpClient.asyncHttpDeleteLarge(url, null, json.toString() , new AsyncCompletionHandler() { @Override public Integer onCompleted(Response response) throws Exception { @@ -281,14 +282,14 @@ public void onPublish(Datum datum, RaftPeer source) throws Exception { if (!peers.isLeader(source.ip)) { Loggers.RAFT.warn("peer {} tried to publish data but wasn't leader, leader: {}", - JSON.toJSONString(source), JSON.toJSONString(getLeader())); + JacksonUtils.toJson(source), JacksonUtils.toJson(getLeader())); throw new IllegalStateException("peer(" + source.ip + ") tried to publish " + "data but wasn't leader"); } if (source.term.get() < local.term.get()) { Loggers.RAFT.warn("out of date publish, pub-term: {}, cur-term: {}", - JSON.toJSONString(source), JSON.toJSONString(local)); + JacksonUtils.toJson(source), JacksonUtils.toJson(local)); throw new IllegalStateException("out of date publish, pub-term:" + source.term.get() + ", cur-term: " + local.term.get()); } @@ -326,13 +327,13 @@ public void onDelete(String datumKey, RaftPeer source) throws Exception { if (!peers.isLeader(source.ip)) { Loggers.RAFT.warn("peer {} tried to publish data but wasn't leader, leader: {}", - JSON.toJSONString(source), JSON.toJSONString(getLeader())); + JacksonUtils.toJson(source), JacksonUtils.toJson(getLeader())); throw new IllegalStateException("peer(" + source.ip + ") tried to publish data but wasn't leader"); } if (source.term.get() < local.term.get()) { Loggers.RAFT.warn("out of date publish, pub-term: {}, cur-term: {}", - JSON.toJSONString(source), JSON.toJSONString(local)); + JacksonUtils.toJson(source), JacksonUtils.toJson(local)); throw new IllegalStateException("out of date publish, pub-term:" + source.term + ", cur-term: " + local.term); } @@ -391,7 +392,7 @@ public void sendVote() { RaftPeer local = peers.get(NetUtils.localServer()); Loggers.RAFT.info("leader timeout, start voting,leader: {}, term: {}", - JSON.toJSONString(getLeader()), local.term); + JacksonUtils.toJson(getLeader()), local.term); peers.reset(); @@ -400,7 +401,7 @@ public void sendVote() { local.state = RaftPeer.State.CANDIDATE; Map params = new HashMap<>(1); - params.put("vote", JSON.toJSONString(local)); + params.put("vote", JacksonUtils.toJson(local)); for (final String server : peers.allServersWithoutMySelf()) { final String url = buildURL(server, API_VOTE); try { @@ -412,9 +413,9 @@ public Integer onCompleted(Response response) throws Exception { return 1; } - RaftPeer peer = JSON.parseObject(response.getResponseBody(), RaftPeer.class); + RaftPeer peer = JacksonUtils.toObj(response.getResponseBody(), RaftPeer.class); - Loggers.RAFT.info("received approve from peer: {}", JSON.toJSONString(peer)); + Loggers.RAFT.info("received approve from peer: {}", JacksonUtils.toJson(peer)); peers.decideLeader(peer); @@ -494,10 +495,10 @@ public void sendBeat() throws IOException, InterruptedException { local.resetLeaderDue(); // build data - JSONObject packet = new JSONObject(); - packet.put("peer", local); + ObjectNode packet = JacksonUtils.createEmptyJsonNode(); + packet.replace("peer", JacksonUtils.transferToJsonNode(local)); - JSONArray array = new JSONArray(); + ArrayNode array = JacksonUtils.createEmptyArrayNode(); if (switchDomain.isSendBeatOnly()) { Loggers.RAFT.info("[SEND-BEAT-ONLY] {}", String.valueOf(switchDomain.isSendBeatOnly())); @@ -506,25 +507,25 @@ public void sendBeat() throws IOException, InterruptedException { if (!switchDomain.isSendBeatOnly()) { for (Datum datum : datums.values()) { - JSONObject element = new JSONObject(); + ObjectNode element = JacksonUtils.createEmptyJsonNode(); if (KeyBuilder.matchServiceMetaKey(datum.key)) { element.put("key", KeyBuilder.briefServiceMetaKey(datum.key)); } else if (KeyBuilder.matchInstanceListKey(datum.key)) { element.put("key", KeyBuilder.briefInstanceListkey(datum.key)); } - element.put("timestamp", datum.timestamp); + element.put("timestamp", datum.timestamp.get()); array.add(element); } } - packet.put("datums", array); + packet.replace("datums", array); // broadcast Map params = new HashMap(1); - params.put("beat", JSON.toJSONString(packet)); + params.put("beat", JacksonUtils.toJson(packet)); - String content = JSON.toJSONString(params); + String content = JacksonUtils.toJson(params); ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(out); @@ -555,7 +556,7 @@ public Integer onCompleted(Response response) throws Exception { return 1; } - peers.update(JSON.parseObject(response.getResponseBody(), RaftPeer.class)); + peers.update(JacksonUtils.toObj(response.getResponseBody(), RaftPeer.class)); if (Loggers.RAFT.isDebugEnabled()) { Loggers.RAFT.debug("receive beat response from: {}", url); } @@ -577,38 +578,39 @@ public void onThrowable(Throwable t) { } } - public RaftPeer receivedBeat(JSONObject beat) throws Exception { + public RaftPeer receivedBeat(JsonNode beat) throws Exception { final RaftPeer local = peers.local(); final RaftPeer remote = new RaftPeer(); - remote.ip = beat.getJSONObject("peer").getString("ip"); - remote.state = RaftPeer.State.valueOf(beat.getJSONObject("peer").getString("state")); - remote.term.set(beat.getJSONObject("peer").getLongValue("term")); - remote.heartbeatDueMs = beat.getJSONObject("peer").getLongValue("heartbeatDueMs"); - remote.leaderDueMs = beat.getJSONObject("peer").getLongValue("leaderDueMs"); - remote.voteFor = beat.getJSONObject("peer").getString("voteFor"); + JsonNode peer = beat.get("peer"); + remote.ip = peer.get("ip").asText(); + remote.state = RaftPeer.State.valueOf(peer.get("state").asText()); + remote.term.set(peer.get("term").asLong()); + remote.heartbeatDueMs = peer.get("heartbeatDueMs").asLong(); + remote.leaderDueMs = peer.get("leaderDueMs").asLong(); + remote.voteFor = peer.get("voteFor").asText(); if (remote.state != RaftPeer.State.LEADER) { Loggers.RAFT.info("[RAFT] invalid state from master, state: {}, remote peer: {}", - remote.state, JSON.toJSONString(remote)); + remote.state, JacksonUtils.toJson(remote)); throw new IllegalArgumentException("invalid state from master, state: " + remote.state); } if (local.term.get() > remote.term.get()) { Loggers.RAFT.info("[RAFT] out of date beat, beat-from-term: {}, beat-to-term: {}, remote peer: {}, and leaderDueMs: {}" - , remote.term.get(), local.term.get(), JSON.toJSONString(remote), local.leaderDueMs); + , remote.term.get(), local.term.get(), JacksonUtils.toJson(remote), local.leaderDueMs); throw new IllegalArgumentException("out of date beat, beat-from-term: " + remote.term.get() + ", beat-to-term: " + local.term.get()); } if (local.state != RaftPeer.State.FOLLOWER) { - Loggers.RAFT.info("[RAFT] make remote as leader, remote peer: {}", JSON.toJSONString(remote)); + Loggers.RAFT.info("[RAFT] make remote as leader, remote peer: {}", JacksonUtils.toJson(remote)); // mk follower local.state = RaftPeer.State.FOLLOWER; local.voteFor = remote.ip; } - final JSONArray beatDatums = beat.getJSONArray("datums"); + final JsonNode beatDatums = beat.get("datums"); local.resetLeaderDue(); local.resetHeartbeatDue(); @@ -633,8 +635,8 @@ public RaftPeer receivedBeat(JSONObject beat) throws Exception { for (Object object : beatDatums) { processedCount = processedCount + 1; - JSONObject entry = (JSONObject) object; - String key = entry.getString("key"); + JsonNode entry = (JsonNode) object; + String key = entry.get("key").asText(); final String datumKey; if (KeyBuilder.matchServiceMetaKey(key)) { @@ -646,7 +648,7 @@ public RaftPeer receivedBeat(JSONObject beat) throws Exception { continue; } - long timestamp = entry.getLong("timestamp"); + long timestamp = entry.get("timestamp").asLong(); receivedKeysMap.put(datumKey, 1); @@ -681,37 +683,34 @@ public Integer onCompleted(Response response) throws Exception { return 1; } - List datumList = JSON.parseObject(response.getResponseBody(), new TypeReference>() { - }); + List datumList = JacksonUtils.toObj(response.getResponseBody(), new TypeReference>() {}); - for (JSONObject datumJson : datumList) { + for (JsonNode datumJson : datumList) { OPERATE_LOCK.lock(); Datum newDatum = null; try { - Datum oldDatum = getDatum(datumJson.getString("key")); + Datum oldDatum = getDatum(datumJson.get("key").asText()); - if (oldDatum != null && datumJson.getLongValue("timestamp") <= oldDatum.timestamp.get()) { + if (oldDatum != null && datumJson.get("timestamp").asLong() <= oldDatum.timestamp.get()) { Loggers.RAFT.info("[NACOS-RAFT] timestamp is smaller than that of mine, key: {}, remote: {}, local: {}", - datumJson.getString("key"), datumJson.getLongValue("timestamp"), oldDatum.timestamp); + datumJson.get("key").asText(), datumJson.get("timestamp").asLong(), oldDatum.timestamp); continue; } - if (KeyBuilder.matchServiceMetaKey(datumJson.getString("key"))) { + if (KeyBuilder.matchServiceMetaKey(datumJson.get("key").asText())) { Datum serviceDatum = new Datum<>(); - serviceDatum.key = datumJson.getString("key"); - serviceDatum.timestamp.set(datumJson.getLongValue("timestamp")); - serviceDatum.value = - JSON.parseObject(JSON.toJSONString(datumJson.getJSONObject("value")), Service.class); + serviceDatum.key = datumJson.get("key").asText(); + serviceDatum.timestamp.set(datumJson.get("timestamp").asLong()); + serviceDatum.value = JacksonUtils.toObj(datumJson.get("value").toString(), Service.class); newDatum = serviceDatum; } - if (KeyBuilder.matchInstanceListKey(datumJson.getString("key"))) { + if (KeyBuilder.matchInstanceListKey(datumJson.get("key").asText())) { Datum instancesDatum = new Datum<>(); - instancesDatum.key = datumJson.getString("key"); - instancesDatum.timestamp.set(datumJson.getLongValue("timestamp")); - instancesDatum.value = - JSON.parseObject(JSON.toJSONString(datumJson.getJSONObject("value")), Instances.class); + instancesDatum.key = datumJson.get("key").asText(); + instancesDatum.timestamp.set(datumJson.get("timestamp").asLong()); + instancesDatum.value = JacksonUtils.toObj(datumJson.get("value").toString(), Instances.class); newDatum = instancesDatum; } @@ -737,7 +736,7 @@ public Integer onCompleted(Response response) throws Exception { raftStore.updateTerm(local.term.get()); Loggers.RAFT.info("data updated, key: {}, timestamp: {}, from {}, local term: {}", - newDatum.key, newDatum.timestamp, JSON.toJSONString(remote), local.term); + newDatum.key, newDatum.timestamp, JacksonUtils.toJson(remote), local.term); } catch (Throwable e) { Loggers.RAFT.error("[RAFT-BEAT] failed to sync datum from leader, datum: {}", newDatum, e); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftListener.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftListener.java index 57071da76ff..36c130d3b32 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftListener.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftListener.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.naming.consistency.persistent.raft; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import org.springframework.beans.factory.annotation.Autowired; @@ -52,8 +52,8 @@ public void onApplicationEvent(ApplicationEvent event) { if (event instanceof BaseRaftEvent) { BaseRaftEvent raftEvent = (BaseRaftEvent) event; RaftPeer local = raftEvent.getLocal(); - String json = JSON.toJSONString(local); - Map map = JSON.parseObject(json, HashMap.class); + String json = JacksonUtils.toJson(local); + Map map = JacksonUtils.toObj(json, HashMap.class); Member self = memberManager.getSelf(); self.setExtendVal(GROUP, map); memberManager.update(self); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java index 42945572cb4..19dddf4a06c 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.consistency.persistent.raft; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.MemberChangeListener; import com.alibaba.nacos.core.cluster.MemberChangeEvent; @@ -171,7 +171,7 @@ public RaftPeer makeLeader(RaftPeer candidate) { leader = candidate; ApplicationUtils.publishEvent(new MakeLeaderEvent(this, leader, local())); Loggers.RAFT.info("{} has become the LEADER, local: {}, leader: {}", - leader.ip, JSON.toJSONString(local()), JSON.toJSONString(leader)); + leader.ip, JacksonUtils.toJson(local()), JacksonUtils.toJson(leader)); } for (final RaftPeer peer : peers.values()) { @@ -189,7 +189,7 @@ public Integer onCompleted(Response response) throws Exception { return 1; } - update(JSON.parseObject(response.getResponseBody(), RaftPeer.class)); + update(JacksonUtils.toObj(response.getResponseBody(), RaftPeer.class)); return 0; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftStore.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftStore.java index 3dd877b9938..cc71a115adc 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftStore.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftStore.java @@ -15,10 +15,8 @@ */ package com.alibaba.nacos.naming.consistency.persistent.raft; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.consistency.ApplyAction; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; @@ -29,6 +27,9 @@ import com.alibaba.nacos.naming.misc.SwitchDomain; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.alibaba.nacos.naming.monitor.MetricsMonitor; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -126,8 +127,7 @@ public synchronized Datum readDatum(File file, String namespaceId) throws IOExce } if (KeyBuilder.matchSwitchKey(file.getName())) { - return JSON.parseObject(json, new TypeReference>() { - }); + return JacksonUtils.toObj(json, new TypeReference>() {}); } if (KeyBuilder.matchServiceMetaKey(file.getName())) { @@ -135,15 +135,14 @@ public synchronized Datum readDatum(File file, String namespaceId) throws IOExce Datum serviceDatum; try { - serviceDatum = JSON.parseObject(json.replace("\\", ""), new TypeReference>() { - }); + serviceDatum = JacksonUtils.toObj(json.replace("\\", ""), new TypeReference>() {}); } catch (Exception e) { - JSONObject jsonObject = JSON.parseObject(json); + JsonNode jsonObject = JacksonUtils.toObj(json); serviceDatum = new Datum<>(); - serviceDatum.timestamp.set(jsonObject.getLongValue("timestamp")); - serviceDatum.key = jsonObject.getString("key"); - serviceDatum.value = JSON.parseObject(jsonObject.getString("value"), Service.class); + serviceDatum.timestamp.set(jsonObject.get("timestamp").asLong()); + serviceDatum.key = jsonObject.get("key").asText(); + serviceDatum.value = JacksonUtils.toObj(jsonObject.get("value").toString(), Service.class); } if (StringUtils.isBlank(serviceDatum.value.getGroupName())) { @@ -162,23 +161,22 @@ public synchronized Datum readDatum(File file, String namespaceId) throws IOExce Datum instancesDatum; try { - instancesDatum = JSON.parseObject(json, new TypeReference>() { - }); + instancesDatum = JacksonUtils.toObj(json, new TypeReference>() {}); } catch (Exception e) { - JSONObject jsonObject = JSON.parseObject(json); + JsonNode jsonObject = JacksonUtils.toObj(json); instancesDatum = new Datum<>(); - instancesDatum.timestamp.set(jsonObject.getLongValue("timestamp")); + instancesDatum.timestamp.set(jsonObject.get("timestamp").asLong()); - String key = jsonObject.getString("key"); + String key = jsonObject.get("key").asText(); String serviceName = KeyBuilder.getServiceName(key); key = key.substring(0, key.indexOf(serviceName)) + Constants.DEFAULT_GROUP + Constants.SERVICE_INFO_SPLITER + serviceName; instancesDatum.key = key; instancesDatum.value = new Instances(); - instancesDatum.value.setInstanceList(JSON.parseObject(jsonObject.getString("value"), - new TypeReference>() { - })); + instancesDatum.value.setInstanceList(JacksonUtils.toObj(jsonObject.get("value").toString(), + new TypeReference>() {}) + ); if (!instancesDatum.value.getInstanceList().isEmpty()) { for (Instance instance : instancesDatum.value.getInstanceList()) { instance.setEphemeral(false); @@ -189,7 +187,7 @@ public synchronized Datum readDatum(File file, String namespaceId) throws IOExce return instancesDatum; } - return JSON.parseObject(json, Datum.class); + return JacksonUtils.toObj(json, Datum.class); } catch (Exception e) { Loggers.RAFT.warn("waning: failed to deserialize key: {}", file.getName()); @@ -222,7 +220,7 @@ public synchronized void write(final Datum datum) throws Exception { FileChannel fc = null; ByteBuffer data; - data = ByteBuffer.wrap(JSON.toJSONString(datum).getBytes(StandardCharsets.UTF_8)); + data = ByteBuffer.wrap(JacksonUtils.toJson(datum).getBytes(StandardCharsets.UTF_8)); try { fc = new FileOutputStream(cacheFile, false).getChannel(); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java index ef11fcaf12e..261220ef4d5 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java @@ -15,10 +15,10 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.CommonParams; import com.alibaba.nacos.api.naming.utils.NamingUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.ServiceManager; @@ -26,6 +26,8 @@ import com.alibaba.nacos.naming.push.ClientInfo; import com.alibaba.nacos.naming.web.CanDistro; import com.alibaba.nacos.core.utils.OverrideParameterRequestWrapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.codehaus.jackson.util.VersionUtil; @@ -54,11 +56,11 @@ public class ApiController extends InstanceController { private ServiceManager serviceManager; @RequestMapping("/allDomNames") - public JSONObject allDomNames(HttpServletRequest request) throws Exception { + public ObjectNode allDomNames(HttpServletRequest request) throws Exception { boolean responsibleOnly = Boolean.parseBoolean(WebUtils.optional(request, "responsibleOnly", "false")); Map> domMap = serviceManager.getAllServiceNames(); - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); // For old DNS-F client: String dnsfVersion = "1.0.1"; String agent = WebUtils.getUserAgent(request); @@ -74,7 +76,7 @@ public JSONObject allDomNames(HttpServletRequest request) throws Exception { } if (CollectionUtils.isEmpty(domSet)) { - result.put("doms", new HashSet<>()); + result.put("doms", JacksonUtils.transferToJsonNode(new HashSet<>())); result.put("count", 0); return result; } @@ -85,7 +87,7 @@ public JSONObject allDomNames(HttpServletRequest request) throws Exception { } } - result.put("doms", doms); + result.put("doms", JacksonUtils.transferToJsonNode(doms)); result.put("count", doms.size()); return result; } @@ -102,7 +104,7 @@ public JSONObject allDomNames(HttpServletRequest request) throws Exception { count += doms.get(namespaceId).size(); } - result.put("doms", doms); + result.put("doms", JacksonUtils.transferToJsonNode(doms)); result.put("count", count); return result; @@ -116,7 +118,7 @@ public String hello(HttpServletRequest request) throws Exception { @RequestMapping("/srvIPXT") @ResponseBody - public JSONObject srvIPXT(HttpServletRequest request) throws Exception { + public ObjectNode srvIPXT(HttpServletRequest request) throws Exception { String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); @@ -141,7 +143,7 @@ public JSONObject srvIPXT(HttpServletRequest request) throws Exception { @CanDistro @RequestMapping("/clientBeat") - public JSONObject clientBeat(HttpServletRequest request) throws Exception { + public ObjectNode clientBeat(HttpServletRequest request) throws Exception { OverrideParameterRequestWrapper requestWrapper = OverrideParameterRequestWrapper.buildRequest(request); requestWrapper.addParameter(CommonParams.SERVICE_NAME, Constants.DEFAULT_GROUP + Constants.SERVICE_INFO_SPLITER + WebUtils.required(request, "dom")); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/CatalogController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/CatalogController.java index b0270d15855..66cb4143120 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/CatalogController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/CatalogController.java @@ -15,13 +15,12 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.CommonParams; import com.alibaba.nacos.api.naming.pojo.Cluster; import com.alibaba.nacos.api.naming.utils.NamingUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.auth.ActionTypes; import com.alibaba.nacos.core.auth.Secured; import com.alibaba.nacos.core.utils.WebUtils; @@ -35,6 +34,9 @@ import com.alibaba.nacos.naming.pojo.ServiceDetailInfo; import com.alibaba.nacos.naming.pojo.ServiceView; import com.alibaba.nacos.naming.web.NamingResourceParser; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -58,7 +60,7 @@ public class CatalogController { @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) @GetMapping("/service") - public JSONObject serviceDetail(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, + public ObjectNode serviceDetail(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, String serviceName) throws NacosException { Service detailedService = serviceManager.getService(namespaceId, serviceName); @@ -67,16 +69,16 @@ public JSONObject serviceDetail(@RequestParam(defaultValue = Constants.DEFAULT_N throw new NacosException(NacosException.NOT_FOUND, "service " + serviceName + " is not found!"); } - JSONObject detailView = new JSONObject(); + ObjectNode detailView = JacksonUtils.createEmptyJsonNode(); - JSONObject serviceObject = new JSONObject(); + ObjectNode serviceObject = JacksonUtils.createEmptyJsonNode(); serviceObject.put("name", NamingUtils.getServiceName(serviceName)); serviceObject.put("protectThreshold", detailedService.getProtectThreshold()); serviceObject.put("groupName", NamingUtils.getGroupName(serviceName)); - serviceObject.put("selector", detailedService.getSelector()); - serviceObject.put("metadata", detailedService.getMetadata()); + serviceObject.replace("selector", JacksonUtils.transferToJsonNode(detailedService.getSelector())); + serviceObject.replace("metadata", JacksonUtils.transferToJsonNode(detailedService.getMetadata())); - detailView.put("service", serviceObject); + detailView.replace("service", serviceObject); List clusters = new ArrayList<>(); @@ -92,14 +94,14 @@ public JSONObject serviceDetail(@RequestParam(defaultValue = Constants.DEFAULT_N clusters.add(clusterView); } - detailView.put("clusters", clusters); + detailView.replace("clusters", JacksonUtils.transferToJsonNode(clusters)); return detailView; } @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) @RequestMapping(value = "/instances") - public JSONObject instanceList(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, + public ObjectNode instanceList(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, @RequestParam String serviceName, @RequestParam String clusterName, @RequestParam(name = "pageNo") int page, @@ -132,8 +134,8 @@ public JSONObject instanceList(@RequestParam(defaultValue = Constants.DEFAULT_NA end = instances.size(); } - JSONObject result = new JSONObject(); - result.put("list", instances.subList(start, end)); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); + result.replace("list", JacksonUtils.transferToJsonNode(instances.subList(start, end))); result.put("count", instances.size()); return result; @@ -175,19 +177,19 @@ public Object listDetail(@RequestParam(required = false) boolean withInstances, return serviceDetailInfoList; } - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); List services = new ArrayList<>(); int total = serviceManager.getPagedService(namespaceId, pageNo - 1, pageSize, param, containedInstance, services, hasIpCount); if (CollectionUtils.isEmpty(services)) { - result.put("serviceList", Collections.emptyList()); + result.replace("serviceList", JacksonUtils.transferToJsonNode(Collections.emptyList())); result.put("count", 0); return result; } - JSONArray serviceJsonArray = new JSONArray(); + List serviceViews = new LinkedList<>(); for (Service service : services) { ServiceView serviceView = new ServiceView(); serviceView.setName(NamingUtils.getServiceName(service.getName())); @@ -196,17 +198,17 @@ public Object listDetail(@RequestParam(required = false) boolean withInstances, serviceView.setIpCount(service.allIPs().size()); serviceView.setHealthyInstanceCount(service.healthyInstanceCount()); serviceView.setTriggerFlag(service.triggerFlag() ? "true" : "false"); - serviceJsonArray.add(serviceView); + serviceViews.add(serviceView); } - result.put("serviceList", serviceJsonArray); + result.replace("serviceList", JacksonUtils.transferToJsonNode(serviceViews)); result.put("count", total); return result; } @RequestMapping("/rt/service") - public JSONObject rt4Service(HttpServletRequest request) { + public ObjectNode rt4Service(HttpServletRequest request) { String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); @@ -218,11 +220,11 @@ public JSONObject rt4Service(HttpServletRequest request) { throw new IllegalArgumentException("request service doesn't exist"); } - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); - JSONArray clusters = new JSONArray(); + ArrayNode clusters = JacksonUtils.createEmptyArrayNode(); for (Map.Entry entry : service.getClusterMap().entrySet()) { - JSONObject packet = new JSONObject(); + ObjectNode packet = JacksonUtils.createEmptyJsonNode(); HealthCheckTask task = entry.getValue().getHealthCheckTask(); packet.put("name", entry.getKey()); @@ -232,8 +234,7 @@ public JSONObject rt4Service(HttpServletRequest request) { clusters.add(packet); } - result.put("clusters", clusters); - + result.replace("clusters", clusters); return result; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ClusterController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ClusterController.java index 760d3602fa0..6b8f7f6ce89 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ClusterController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ClusterController.java @@ -15,19 +15,17 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.CommonParams; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.HealthCheckerFactory; import com.alibaba.nacos.core.auth.ActionTypes; import com.alibaba.nacos.core.auth.Secured; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.Service; import com.alibaba.nacos.naming.core.ServiceManager; -import com.alibaba.nacos.naming.healthcheck.HealthCheckType; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import org.apache.commons.lang3.BooleanUtils; @@ -77,14 +75,7 @@ public String update(HttpServletRequest request) throws Exception { cluster.setDefCkport(NumberUtils.toInt(checkPort)); cluster.setUseIPPort4Check(BooleanUtils.toBoolean(useInstancePort4Check)); - JSONObject healthCheckObj = JSON.parseObject(healthChecker); - AbstractHealthChecker abstractHealthChecker; - String type = healthCheckObj.getString("type"); - Class healthCheckClass = HealthCheckType.ofHealthCheckerClass(type); - if(healthCheckClass == null){ - throw new NacosException(NacosException.INVALID_PARAM, "unknown health check type:" + healthChecker); - } - abstractHealthChecker = JSON.parseObject(healthChecker, healthCheckClass); + AbstractHealthChecker abstractHealthChecker = HealthCheckerFactory.deserialize(healthChecker); cluster.setHealthChecker(abstractHealthChecker); cluster.setMetadata(UtilsAndCommons.parseMetadata(metadata)); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java index 9801c19c617..42eb10880d5 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java @@ -15,8 +15,8 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.cluster.transport.Serializer; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; @@ -27,6 +27,8 @@ import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.SwitchDomain; import com.alibaba.nacos.naming.misc.UtilsAndCommons; +import com.fasterxml.jackson.databind.JsonNode; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -90,9 +92,10 @@ public ResponseEntity syncChecksum(@RequestParam String source, @RequestBody Map } @GetMapping("/datum") - public ResponseEntity get(@RequestBody JSONObject body) throws Exception { + public ResponseEntity get(@RequestBody String body) throws Exception { - String keys = body.getString("keys"); + JsonNode bodyNode = JacksonUtils.toObj(body); + String keys = bodyNode.get("keys").asText(); String keySplitter = ","; Map datumMap = new HashMap<>(64); for (String key : keys.split(keySplitter)) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java index 746b3027531..e870bb7655f 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java @@ -15,10 +15,10 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.CommonParams; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.auth.ActionTypes; import com.alibaba.nacos.core.auth.Secured; import com.alibaba.nacos.core.utils.ApplicationUtils; @@ -26,11 +26,12 @@ import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.core.Service; import com.alibaba.nacos.naming.core.ServiceManager; -import com.alibaba.nacos.naming.healthcheck.HealthCheckType; +import com.alibaba.nacos.api.naming.pojo.healthcheck.HealthCheckType; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.alibaba.nacos.naming.push.PushService; import com.alibaba.nacos.naming.web.CanDistro; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.collect.Lists; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -65,8 +66,8 @@ public class HealthController { private PushService pushService; @RequestMapping("/server") - public JSONObject server() { - JSONObject result = new JSONObject(); + public ObjectNode server() { + ObjectNode result = JacksonUtils.createEmptyJsonNode(); result.put("msg", "Hello! I am Nacos-Naming and healthy! total services: raft " + serviceManager.getServiceCount() + ", local port:" + ApplicationUtils.getPort()); return result; @@ -121,11 +122,11 @@ public String update(HttpServletRequest request) { @GetMapping("checkers") public ResponseEntity checkers() { - List classes = HealthCheckType.getLoadedHealthCheckerClasses(); + List> classes = HealthCheckType.getLoadedHealthCheckerClasses(); Map checkerMap = new HashMap<>(8); - for (Class clazz : classes) { + for (Class clazz : classes) { try { - AbstractHealthChecker checker = (AbstractHealthChecker) clazz.newInstance(); + AbstractHealthChecker checker = clazz.newInstance(); checkerMap.put(checker.getType(), checker); } catch (InstantiationException | IllegalAccessException e) { Loggers.EVT_LOG.error("checkers error ", e); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java index efd537825aa..f9b6b604dc2 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java @@ -15,14 +15,12 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.CommonParams; import com.alibaba.nacos.api.naming.NamingResponseCode; import com.alibaba.nacos.api.naming.utils.NamingUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.auth.ActionTypes; import com.alibaba.nacos.core.auth.Secured; import com.alibaba.nacos.core.utils.WebUtils; @@ -39,6 +37,9 @@ import com.alibaba.nacos.naming.push.PushService; import com.alibaba.nacos.naming.web.CanDistro; import com.alibaba.nacos.naming.web.NamingResourceParser; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -84,7 +85,7 @@ public class InstanceController { @Override public String getData(PushService.PushClient client) { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); try { result = doSrvIPXT(client.getNamespaceId(), client.getServiceName(), client.getAgent(), client.getClusters(), @@ -100,7 +101,7 @@ public String getData(PushService.PushClient client) { result.put("cacheMillis", switchDomain.getPushCacheMillis(client.getServiceName())); - return result.toJSONString(); + return result.toString(); } }; @@ -214,7 +215,7 @@ public String patch(HttpServletRequest request) throws Exception { @GetMapping("/list") @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) - public JSONObject list(HttpServletRequest request) throws Exception { + public ObjectNode list(HttpServletRequest request) throws Exception { String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); @@ -241,7 +242,7 @@ public JSONObject list(HttpServletRequest request) throws Exception { @GetMapping @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) - public JSONObject detail(HttpServletRequest request) throws Exception { + public ObjectNode detail(HttpServletRequest request) throws Exception { String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); @@ -268,14 +269,14 @@ public JSONObject detail(HttpServletRequest request) throws Exception { for (Instance instance : ips) { if (instance.getIp().equals(ip) && instance.getPort() == port) { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); result.put("service", serviceName); result.put("ip", ip); result.put("port", port); result.put("clusterName", cluster); result.put("weight", instance.getWeight()); result.put("healthy", instance.isHealthy()); - result.put("metadata", instance.getMetadata()); + result.put("metadata", JacksonUtils.transferToJsonNode(instance.getMetadata())); result.put("instanceId", instance.getInstanceId()); return result; } @@ -287,9 +288,9 @@ public JSONObject detail(HttpServletRequest request) throws Exception { @CanDistro @PutMapping("/beat") @Secured(parser = NamingResourceParser.class, action = ActionTypes.WRITE) - public JSONObject beat(HttpServletRequest request) throws Exception { + public ObjectNode beat(HttpServletRequest request) throws Exception { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); result.put("clientBeatInterval", switchDomain.getClientBeatInterval()); String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); @@ -303,7 +304,7 @@ public JSONObject beat(HttpServletRequest request) throws Exception { RsInfo clientBeat = null; if (StringUtils.isNotBlank(beat)) { - clientBeat = JSON.parseObject(beat, RsInfo.class); + clientBeat = JacksonUtils.toObj(beat, RsInfo.class); } if (clientBeat != null) { @@ -368,7 +369,7 @@ public JSONObject beat(HttpServletRequest request) throws Exception { } @RequestMapping("/statuses") - public JSONObject listWithHealthStatus(@RequestParam String key) + public ObjectNode listWithHealthStatus(@RequestParam String key) throws NacosException { String serviceName; @@ -392,14 +393,14 @@ public JSONObject listWithHealthStatus(@RequestParam String key) List ips = service.allIPs(); - JSONObject result = new JSONObject(); - JSONArray ipArray = new JSONArray(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); + ArrayNode ipArray = JacksonUtils.createEmptyArrayNode(); for (Instance ip : ips) { ipArray.add(ip.toIPAddr() + "_" + ip.isHealthy()); } - result.put("ips", ipArray); + result.replace("ips", ipArray); return result; } @@ -470,12 +471,12 @@ private void checkIfDisabled(Service service) throws Exception { } } - public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent, + public ObjectNode doSrvIPXT(String namespaceId, String serviceName, String agent, String clusters, String clientIP, int udpPort, String env, boolean isCheck, String app, String tid, boolean healthyOnly) throws Exception { ClientInfo clientInfo = new ClientInfo(agent); - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); Service service = serviceManager.getService(namespaceId, serviceName); if (service == null) { @@ -485,7 +486,7 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent } result.put("name", serviceName); result.put("clusters", clusters); - result.put("hosts", new JSONArray()); + result.replace("hosts", JacksonUtils.createEmptyArrayNode()); return result; } @@ -534,7 +535,7 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent result.put("dom", NamingUtils.getServiceName(serviceName)); } - result.put("hosts", new JSONArray()); + result.put("hosts", JacksonUtils.createEmptyArrayNode()); result.put("name", serviceName); result.put("cacheMillis", cacheMillis); result.put("lastRefTime", System.currentTimeMillis()); @@ -542,7 +543,7 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent result.put("useSpecifiedURL", false); result.put("clusters", clusters); result.put("env", env); - result.put("metadata", service.getMetadata()); + result.put("metadata", JacksonUtils.transferToJsonNode(service.getMetadata())); return result; } @@ -576,10 +577,10 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent result.put("protectThreshold", service.getProtectThreshold()); result.put("reachLocalSiteCallThreshold", false); - return new JSONObject(); + return JacksonUtils.createEmptyJsonNode(); } - JSONArray hosts = new JSONArray(); + ArrayNode hosts = JacksonUtils.createEmptyArrayNode(); for (Map.Entry> entry : ipMap.entrySet()) { List ips = entry.getValue(); @@ -595,7 +596,7 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent continue; } - JSONObject ipObj = new JSONObject(); + ObjectNode ipObj = JacksonUtils.createEmptyJsonNode(); ipObj.put("ip", instance.getIp()); ipObj.put("port", instance.getPort()); @@ -604,7 +605,7 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent ipObj.put("healthy", entry.getKey()); ipObj.put("marked", instance.isMarked()); ipObj.put("instanceId", instance.getInstanceId()); - ipObj.put("metadata", instance.getMetadata()); + ipObj.put("metadata", JacksonUtils.transferToJsonNode(instance.getMetadata())); ipObj.put("enabled", instance.isEnabled()); ipObj.put("weight", instance.getWeight()); ipObj.put("clusterName", instance.getClusterName()); @@ -624,7 +625,7 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent } } - result.put("hosts", hosts); + result.replace("hosts", hosts); if (clientInfo.type == ClientInfo.ClientType.JAVA && clientInfo.version.compareTo(VersionUtil.parseVersion("1.0.0")) >= 0) { result.put("dom", serviceName); @@ -639,7 +640,7 @@ public JSONObject doSrvIPXT(String namespaceId, String serviceName, String agent result.put("useSpecifiedURL", false); result.put("clusters", clusters); result.put("env", env); - result.put("metadata", service.getMetadata()); + result.replace("metadata", JacksonUtils.transferToJsonNode(service.getMetadata())); return result; } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java index 80a4a8e0ee1..09af7fa68d6 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java @@ -15,25 +15,27 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.auth.ActionTypes; import com.alibaba.nacos.core.auth.Secured; +import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.NodeState; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.naming.cluster.ServerListManager; import com.alibaba.nacos.naming.cluster.ServerStatusManager; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftCore; -import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeer; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.Service; import com.alibaba.nacos.naming.core.ServiceManager; import com.alibaba.nacos.naming.misc.*; import com.alibaba.nacos.naming.push.PushService; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -50,34 +52,35 @@ @RequestMapping({UtilsAndCommons.NACOS_NAMING_CONTEXT + "/operator", UtilsAndCommons.NACOS_NAMING_CONTEXT + "/ops"}) public class OperatorController { - @Autowired - private PushService pushService; - - @Autowired - private SwitchManager switchManager; - - @Autowired - private ServiceManager serviceManager; - - @Autowired - private ServerMemberManager memberManager; - - @Autowired - private ServerStatusManager serverStatusManager; - - @Autowired - private SwitchDomain switchDomain; - - @Autowired - private DistroMapper distroMapper; - - @Autowired - private RaftCore raftCore; + private final PushService pushService; + private final SwitchManager switchManager; + private final ServerListManager serverListManager; + private final ServiceManager serviceManager; + private final ServerMemberManager memberManager; + private final ServerStatusManager serverStatusManager; + private final SwitchDomain switchDomain; + private final DistroMapper distroMapper; + private final RaftCore raftCore; + + public OperatorController(PushService pushService, SwitchManager switchManager, + ServerListManager serverListManager, ServiceManager serviceManager, ServerMemberManager memberManager, + ServerStatusManager serverStatusManager, SwitchDomain switchDomain, + DistroMapper distroMapper, RaftCore raftCore) { + this.pushService = pushService; + this.switchManager = switchManager; + this.serverListManager = serverListManager; + this.serviceManager = serviceManager; + this.memberManager = memberManager; + this.serverStatusManager = serverStatusManager; + this.switchDomain = switchDomain; + this.distroMapper = distroMapper; + this.raftCore = raftCore; + } @RequestMapping("/push/state") - public JSONObject pushState(@RequestParam(required = false) boolean detail, @RequestParam(required = false) boolean reset) { + public ObjectNode pushState(@RequestParam(required = false) boolean detail, @RequestParam(required = false) boolean reset) { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); List failedPushes = PushService.getFailedPushes(); int failedPushCount = pushService.getFailedPushCount(); @@ -90,7 +93,7 @@ public JSONObject pushState(@RequestParam(required = false) boolean detail, @Req result.put("ratio", 0); } - JSONArray dataArray = new JSONArray(); + ArrayNode dataArray = JacksonUtils.createEmptyArrayNode(); if (detail) { for (PushService.Receiver.AckEntry entry : failedPushes) { try { @@ -99,7 +102,7 @@ public JSONObject pushState(@RequestParam(required = false) boolean detail, @Req dataArray.add("[encoding failure]"); } } - result.put("data", dataArray); + result.replace("data", dataArray); } if (reset) { @@ -128,9 +131,9 @@ public String updateSwitch(@RequestParam(required = false) boolean debug, @Secured(resource = "naming/metrics", action = ActionTypes.READ) @GetMapping("/metrics") - public JSONObject metrics(HttpServletRequest request) { + public ObjectNode metrics(HttpServletRequest request) { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); int serviceCount = serviceManager.getServiceCount(); int ipCount = serviceManager.getInstanceCount(); @@ -152,7 +155,7 @@ public JSONObject metrics(HttpServletRequest request) { } @GetMapping("/distro/server") - public JSONObject getResponsibleServer4Service(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, + public ObjectNode getResponsibleServer4Service(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, @RequestParam String serviceName) { Service service = serviceManager.getService(namespaceId, serviceName); @@ -161,7 +164,7 @@ public JSONObject getResponsibleServer4Service(@RequestParam(defaultValue = Cons throw new IllegalArgumentException("service not found"); } - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); result.put("responsibleServer", distroMapper.mapSrv(serviceName)); @@ -169,12 +172,12 @@ public JSONObject getResponsibleServer4Service(@RequestParam(defaultValue = Cons } @GetMapping("/distro/status") - public JSONObject distroStatus(@RequestParam(defaultValue = "view") String action) { + public ObjectNode distroStatus(@RequestParam(defaultValue = "view") String action) { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); if (StringUtils.equals(SwitchEntry.ACTION_VIEW, action)) { - result.put("status", memberManager.allMembers()); + result.replace("status", JacksonUtils.transferToJsonNode(memberManager.allMembers())); return result; } @@ -182,32 +185,50 @@ public JSONObject distroStatus(@RequestParam(defaultValue = "view") String actio } @GetMapping("/servers") - public JSONObject getHealthyServerList(@RequestParam(required = false) boolean healthy) { + public ObjectNode getHealthyServerList(@RequestParam(required = false) boolean healthy) { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); if (healthy) { - result.put("servers", memberManager.allMembers().stream() - .filter(member -> member.getState() == NodeState.UP).collect(ArrayList::new, - ArrayList::add, ArrayList::addAll)); + List healthyMember = memberManager.allMembers().stream() + .filter(member -> member.getState() == NodeState.UP).collect(ArrayList::new, + ArrayList::add, ArrayList::addAll); + result.replace("servers", JacksonUtils.transferToJsonNode(healthyMember)); } else { - result.put("servers", memberManager.allMembers()); + result.replace("servers", JacksonUtils.transferToJsonNode(memberManager.allMembers())); } return result; } + /** + * This interface will be removed in a future release + * + * @deprecated 1.3.0 This function will be deleted sometime after version 1.3.0 + * @param serverStatus server status + * @return "ok" + */ + @Deprecated + @RequestMapping("/server/status") + public String serverStatus(@RequestParam String serverStatus) { + serverListManager.onReceiveServerStatus(serverStatus); + return "ok"; + } + @PutMapping("/log") public String setLogLevel(@RequestParam String logName, @RequestParam String logLevel) { Loggers.setLogLevel(logName, logLevel); return "ok"; } + /** + * This interface will be removed in a future release + * + * @deprecated 1.3.0 This function will be deleted sometime after version 1.3.0 + * @return {@link JsonNode} + */ + @Deprecated @RequestMapping(value = "/cluster/state", method = RequestMethod.GET) - public JSONObject getClusterStates() { - - RaftPeer peer = serviceManager.getMySelfClusterState(); - - return JSON.parseObject(JSON.toJSONString(peer)); - + public JsonNode getClusterStates() { + return JacksonUtils.transferToJsonNode(serviceManager.getMySelfClusterState()); } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/RaftController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/RaftController.java index 762cac2ca4f..2813543a276 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/RaftController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/RaftController.java @@ -15,12 +15,9 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.common.utils.IoUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; @@ -34,6 +31,11 @@ import com.alibaba.nacos.naming.misc.NetUtils; import com.alibaba.nacos.naming.misc.SwitchDomain; import com.alibaba.nacos.naming.misc.UtilsAndCommons; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -67,31 +69,30 @@ public class RaftController { private RaftCore raftCore; @PostMapping("/vote") - public JSONObject vote(HttpServletRequest request, HttpServletResponse response) throws Exception { + public JsonNode vote(HttpServletRequest request, HttpServletResponse response) throws Exception { RaftPeer peer = raftCore.receivedVote( - JSON.parseObject(WebUtils.required(request, "vote"), RaftPeer.class)); + JacksonUtils.toObj(WebUtils.required(request, "vote"), RaftPeer.class)); - return JSON.parseObject(JSON.toJSONString(peer)); + return JacksonUtils.transferToJsonNode(peer); } @PostMapping("/beat") - public JSONObject beat(HttpServletRequest request, HttpServletResponse response) throws Exception { + public JsonNode beat(HttpServletRequest request, HttpServletResponse response) throws Exception { String entity = new String(IoUtils.tryDecompress(request.getInputStream()), StandardCharsets.UTF_8); String value = URLDecoder.decode(entity, "UTF-8"); value = URLDecoder.decode(value, "UTF-8"); - JSONObject json = JSON.parseObject(value); - JSONObject beat = JSON.parseObject(json.getString("beat")); + JsonNode json = JacksonUtils.toObj(value); - RaftPeer peer = raftCore.receivedBeat(beat); + RaftPeer peer = raftCore.receivedBeat(JacksonUtils.toObj(json.get("beat").asText())); - return JSON.parseObject(JSON.toJSONString(peer)); + return JacksonUtils.transferToJsonNode(peer); } @GetMapping("/peer") - public JSONObject getPeer(HttpServletRequest request, HttpServletResponse response) { + public JsonNode getPeer(HttpServletRequest request, HttpServletResponse response) { List peers = raftCore.getPeers(); RaftPeer peer = null; @@ -106,7 +107,7 @@ public JSONObject getPeer(HttpServletRequest request, HttpServletResponse respon peer.ip = NetUtils.localServer(); } - return JSON.parseObject(JSON.toJSONString(peer)); + return JacksonUtils.transferToJsonNode(peer); } @PutMapping("/datum/reload") @@ -125,21 +126,21 @@ public String publish(HttpServletRequest request, HttpServletResponse response) String entity = IoUtils.toString(request.getInputStream(), "UTF-8"); String value = URLDecoder.decode(entity, "UTF-8"); - JSONObject json = JSON.parseObject(value); + JsonNode json = JacksonUtils.toObj(value); - String key = json.getString("key"); + String key = json.get("key").asText(); if (KeyBuilder.matchInstanceListKey(key)) { - raftConsistencyService.put(key, JSON.parseObject(json.getString("value"), Instances.class)); + raftConsistencyService.put(key, JacksonUtils.toObj(json.get("value").toString(), Instances.class)); return "ok"; } if (KeyBuilder.matchSwitchKey(key)) { - raftConsistencyService.put(key, JSON.parseObject(json.getString("value"), SwitchDomain.class)); + raftConsistencyService.put(key, JacksonUtils.toObj(json.get("value").toString(), SwitchDomain.class)); return "ok"; } if (KeyBuilder.matchServiceMetaKey(key)) { - raftConsistencyService.put(key, JSON.parseObject(json.getString("value"), Service.class)); + raftConsistencyService.put(key, JacksonUtils.toObj(json.get("value").toString(), Service.class)); return "ok"; } @@ -172,19 +173,19 @@ public String get(HttpServletRequest request, HttpServletResponse response) thro datums.add(datum); } - return JSON.toJSONString(datums); + return JacksonUtils.toJson(datums); } @GetMapping("/state") - public JSONObject state(HttpServletRequest request, HttpServletResponse response) throws Exception { + public JsonNode state(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setHeader("Content-Type", "application/json; charset=" + getAcceptEncoding(request)); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Content-Encode", "gzip"); - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); result.put("services", serviceManager.getServiceCount()); - result.put("peers", raftCore.getPeers()); + result.replace("peers", JacksonUtils.transferToJsonNode(raftCore.getPeers())); return result; } @@ -198,21 +199,22 @@ public String onPublish(HttpServletRequest request, HttpServletResponse response String entity = IoUtils.toString(request.getInputStream(), "UTF-8"); String value = URLDecoder.decode(entity, "UTF-8"); - JSONObject jsonObject = JSON.parseObject(value); + + JsonNode jsonObject = JacksonUtils.toObj(value); String key = "key"; - RaftPeer source = JSON.parseObject(jsonObject.getString("source"), RaftPeer.class); - JSONObject datumJson = jsonObject.getJSONObject("datum"); + RaftPeer source = JacksonUtils.toObj(jsonObject.get("source").toString(), RaftPeer.class); + JsonNode datumJson = jsonObject.get("datum"); Datum datum = null; - if (KeyBuilder.matchInstanceListKey(datumJson.getString(key))) { - datum = JSON.parseObject(jsonObject.getString("datum"), new TypeReference>() { + if (KeyBuilder.matchInstanceListKey(datumJson.get(key).asText())) { + datum = JacksonUtils.toObj(jsonObject.get("datum").toString(), new TypeReference>() { }); - } else if (KeyBuilder.matchSwitchKey(datumJson.getString(key))) { - datum = JSON.parseObject(jsonObject.getString("datum"), new TypeReference>() { + } else if (KeyBuilder.matchSwitchKey(datumJson.get(key).asText())) { + datum = JacksonUtils.toObj(jsonObject.get("datum").toString(), new TypeReference>() { }); - } else if (KeyBuilder.matchServiceMetaKey(datumJson.getString(key))) { - datum = JSON.parseObject(jsonObject.getString("datum"), new TypeReference>() { + } else if (KeyBuilder.matchServiceMetaKey(datumJson.get(key).asText())) { + datum = JacksonUtils.toObj(jsonObject.get("datum").toString(), new TypeReference>() { }); } @@ -230,34 +232,35 @@ public String onDelete(HttpServletRequest request, HttpServletResponse response) String entity = IoUtils.toString(request.getInputStream(), "UTF-8"); String value = URLDecoder.decode(entity, "UTF-8"); value = URLDecoder.decode(value, "UTF-8"); - JSONObject jsonObject = JSON.parseObject(value); - Datum datum = JSON.parseObject(jsonObject.getString("datum"), Datum.class); - RaftPeer source = JSON.parseObject(jsonObject.getString("source"), RaftPeer.class); + JsonNode jsonObject = JacksonUtils.toObj(value); + + Datum datum = JacksonUtils.toObj(jsonObject.get("datum").toString(), Datum.class); + RaftPeer source = JacksonUtils.toObj(jsonObject.get("source").toString(), RaftPeer.class); raftConsistencyService.onRemove(datum, source); return "ok"; } @GetMapping("/leader") - public JSONObject getLeader(HttpServletRequest request, HttpServletResponse response) { + public JsonNode getLeader(HttpServletRequest request, HttpServletResponse response) { - JSONObject result = new JSONObject(); - result.put("leader", JSONObject.toJSONString(raftCore.getLeader())); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); + result.put("leader", JacksonUtils.toJson(raftCore.getLeader())); return result; } @GetMapping("/listeners") - public JSONObject getAllListeners(HttpServletRequest request, HttpServletResponse response) { + public JsonNode getAllListeners(HttpServletRequest request, HttpServletResponse response) { - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); Map> listeners = raftCore.getListeners(); - JSONArray listenerArray = new JSONArray(); + ArrayNode listenerArray = JacksonUtils.createEmptyArrayNode(); for (String key : listeners.keySet()) { listenerArray.add(key); } - result.put("listeners", listenerArray); + result.replace("listeners", listenerArray); return result; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ServiceController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ServiceController.java index 693ebacaf0a..bf4a694aa06 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ServiceController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ServiceController.java @@ -15,15 +15,13 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.CommonParams; import com.alibaba.nacos.api.naming.utils.NamingUtils; import com.alibaba.nacos.api.selector.SelectorType; import com.alibaba.nacos.common.utils.IoUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.auth.ActionTypes; import com.alibaba.nacos.core.auth.Secured; import com.alibaba.nacos.core.cluster.ServerMemberManager; @@ -36,6 +34,10 @@ import com.alibaba.nacos.naming.selector.NoneSelector; import com.alibaba.nacos.naming.selector.Selector; import com.alibaba.nacos.naming.web.NamingResourceParser; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -113,7 +115,7 @@ public String remove(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID @GetMapping @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) - public JSONObject detail(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, + public ObjectNode detail(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPACE_ID) String namespaceId, @RequestParam String serviceName) throws NacosException { Service service = serviceManager.getService(namespaceId, serviceName); @@ -121,31 +123,31 @@ public JSONObject detail(@RequestParam(defaultValue = Constants.DEFAULT_NAMESPAC throw new NacosException(NacosException.NOT_FOUND, "service " + serviceName + " is not found!"); } - JSONObject res = new JSONObject(); + ObjectNode res = JacksonUtils.createEmptyJsonNode(); res.put("name", NamingUtils.getServiceName(serviceName)); res.put("namespaceId", service.getNamespaceId()); res.put("protectThreshold", service.getProtectThreshold()); - res.put("metadata", service.getMetadata()); - res.put("selector", service.getSelector()); + res.replace("metadata", JacksonUtils.transferToJsonNode(service.getMetadata())); + res.replace("selector", JacksonUtils.transferToJsonNode(service.getSelector())); res.put("groupName", NamingUtils.getGroupName(serviceName)); - JSONArray clusters = new JSONArray(); + ArrayNode clusters = JacksonUtils.createEmptyArrayNode(); for (Cluster cluster : service.getClusterMap().values()) { - JSONObject clusterJson = new JSONObject(); + ObjectNode clusterJson = JacksonUtils.createEmptyJsonNode(); clusterJson.put("name", cluster.getName()); - clusterJson.put("healthChecker", cluster.getHealthChecker()); - clusterJson.put("metadata", cluster.getMetadata()); + clusterJson.replace("healthChecker", JacksonUtils.transferToJsonNode(cluster.getHealthChecker())); + clusterJson.replace("metadata", JacksonUtils.transferToJsonNode(cluster.getMetadata())); clusters.add(clusterJson); } - res.put("clusters", clusters); + res.replace("clusters", clusters); return res; } @GetMapping("/list") @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) - public JSONObject list(HttpServletRequest request) throws Exception { + public ObjectNode list(HttpServletRequest request) throws Exception { int pageNo = NumberUtils.toInt(WebUtils.required(request, "pageNo")); int pageSize = NumberUtils.toInt(WebUtils.required(request, "pageSize")); @@ -156,10 +158,10 @@ public JSONObject list(HttpServletRequest request) throws Exception { List serviceNameList = serviceManager.getAllServiceNameList(namespaceId); - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); if (serviceNameList == null || serviceNameList.isEmpty()) { - result.put("doms", Collections.emptyList()); + result.replace("doms", JacksonUtils.transferToJsonNode(Collections.emptyList())); result.put("count", 0); return result; } @@ -168,10 +170,10 @@ public JSONObject list(HttpServletRequest request) throws Exception { if (StringUtils.isNotBlank(selectorString)) { - JSONObject selectorJson = JSON.parseObject(selectorString); + JsonNode selectorJson = JacksonUtils.toObj(selectorString); - SelectorType selectorType = SelectorType.valueOf(selectorJson.getString("type")); - String expression = selectorJson.getString("expression"); + SelectorType selectorType = SelectorType.valueOf(selectorJson.get("type").asText()); + String expression = selectorJson.get("expression").asText(); if (SelectorType.label.equals(selectorType) && StringUtils.isNotBlank(expression)) { expression = StringUtils.deleteWhitespace(expression); @@ -208,7 +210,7 @@ public JSONObject list(HttpServletRequest request) throws Exception { serviceNameList.set(i, serviceNameList.get(i).replace(groupName + Constants.SERVICE_INFO_SPLITER, "")); } - result.put("doms", serviceNameList.subList(start, end)); + result.replace("doms", JacksonUtils.transferToJsonNode(serviceNameList.subList(start, end))); result.put("count", serviceNameList.size()); return result; @@ -247,7 +249,7 @@ public String update(HttpServletRequest request) throws Exception { @RequestMapping("/names") @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) - public JSONObject searchService(@RequestParam(defaultValue = StringUtils.EMPTY) String namespaceId, + public ObjectNode searchService(@RequestParam(defaultValue = StringUtils.EMPTY) String namespaceId, @RequestParam(defaultValue = StringUtils.EMPTY) String expr, @RequestParam(required = false) boolean responsibleOnly) { @@ -270,9 +272,9 @@ public JSONObject searchService(@RequestParam(defaultValue = StringUtils.EMPTY) } } - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); - result.put("services", serviceNameMap); + result.replace("services", JacksonUtils.transferToJsonNode(serviceNameMap)); result.put("count", services.size()); return result; @@ -283,11 +285,11 @@ public String serviceStatus(HttpServletRequest request) throws Exception { String entity = IoUtils.toString(request.getInputStream(), "UTF-8"); String value = URLDecoder.decode(entity, "UTF-8"); - JSONObject json = JSON.parseObject(value); + JsonNode json = JacksonUtils.toObj(value); //format: service1@@checksum@@@service2@@checksum - String statuses = json.getString("statuses"); - String serverIp = json.getString("clientIP"); + String statuses = json.get("statuses").asText(); + String serverIp = json.get("clientIP").asText(); if (!memberManager.hasMember(serverIp)) { throw new NacosException(NacosException.INVALID_PARAM, @@ -295,7 +297,7 @@ public String serviceStatus(HttpServletRequest request) throws Exception { } try { - ServiceManager.ServiceChecksum checksums = JSON.parseObject(statuses, ServiceManager.ServiceChecksum.class); + ServiceManager.ServiceChecksum checksums = JacksonUtils.toObj(statuses, ServiceManager.ServiceChecksum.class); if (checksums == null) { Loggers.SRV_LOG.warn("[DOMAIN-STATUS] receive malformed data: null"); return "fail"; @@ -331,7 +333,7 @@ public String serviceStatus(HttpServletRequest request) throws Exception { } @PutMapping("/checksum") - public JSONObject checksum(HttpServletRequest request) throws Exception { + public ObjectNode checksum(HttpServletRequest request) throws Exception { String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); @@ -345,7 +347,7 @@ public JSONObject checksum(HttpServletRequest request) throws Exception { service.recalculateChecksum(); - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); result.put("checksum", service.getChecksum()); @@ -360,7 +362,7 @@ public JSONObject checksum(HttpServletRequest request) throws Exception { */ @GetMapping("/subscribers") @Secured(parser = NamingResourceParser.class, action = ActionTypes.READ) - public JSONObject subscribers(HttpServletRequest request) { + public ObjectNode subscribers(HttpServletRequest request) { int pageNo = NumberUtils.toInt(WebUtils.required(request, "pageNo")); int pageSize = NumberUtils.toInt(WebUtils.required(request, "pageSize")); @@ -370,7 +372,7 @@ public JSONObject subscribers(HttpServletRequest request) { String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); boolean aggregation = Boolean.parseBoolean(WebUtils.optional(request, "aggregation", String.valueOf(Boolean.TRUE))); - JSONObject result = new JSONObject(); + ObjectNode result = JacksonUtils.createEmptyJsonNode(); try { List subscribers = subscribeManager.getSubscribers(serviceName, namespaceId, aggregation); @@ -388,13 +390,13 @@ public JSONObject subscribers(HttpServletRequest request) { end = count; } - result.put("subscribers", subscribers.subList(start, end)); + result.replace("subscribers", JacksonUtils.transferToJsonNode(subscribers.subList(start, end))); result.put("count", count); return result; } catch (Exception e) { Loggers.SRV_LOG.warn("query subscribers failed!", e); - result.put("subscribers", new JSONArray()); + result.replace("subscribers", JacksonUtils.createEmptyArrayNode()); result.put("count", 0); return result; } @@ -440,12 +442,12 @@ private Selector parseSelector(String selectorJsonString) throws Exception { return new NoneSelector(); } - JSONObject selectorJson = JSON.parseObject(URLDecoder.decode(selectorJsonString, "UTF-8")); - switch (SelectorType.valueOf(selectorJson.getString("type"))) { + JsonNode selectorJson = JacksonUtils.toObj(URLDecoder.decode(selectorJsonString, "UTF-8")); + switch (SelectorType.valueOf(selectorJson.get("type").asText())) { case none: return new NoneSelector(); case label: - String expression = selectorJson.getString("expression"); + String expression = selectorJson.get("expression").asText(); Set labels = LabelSelector.parseExpression(expression); LabelSelector labelSelector = new LabelSelector(); labelSelector.setExpression(expression); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/Cluster.java b/naming/src/main/java/com/alibaba/nacos/naming/core/Cluster.java index 61cdf7c871a..9c8037b63f9 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/Cluster.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/Cluster.java @@ -15,11 +15,12 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.nacos.naming.healthcheck.HealthCheckReactor; import com.alibaba.nacos.naming.healthcheck.HealthCheckStatus; import com.alibaba.nacos.naming.healthcheck.HealthCheckTask; import com.alibaba.nacos.naming.misc.Loggers; +import com.fasterxml.jackson.annotation.JsonIgnore; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.util.Assert; @@ -43,19 +44,19 @@ public class Cluster extends com.alibaba.nacos.api.naming.pojo.Cluster implement private int defIPPort = -1; - @JSONField(serialize = false) + @JsonIgnore private HealthCheckTask checkTask; - @JSONField(serialize = false) + @JsonIgnore private Set persistentInstances = new HashSet<>(); - @JSONField(serialize = false) + @JsonIgnore private Set ephemeralInstances = new HashSet<>(); - @JSONField(serialize = false) + @JsonIgnore private Service service; - @JSONField(serialize = false) + @JsonIgnore private volatile boolean inited = false; private Map metadata = new ConcurrentHashMap<>(); @@ -118,6 +119,7 @@ public void destroy() { } } + @JsonIgnore public HealthCheckTask getHealthCheckTask() { return checkTask; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java b/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java index 448c1f7d5cd..90c91b333c7 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java @@ -22,16 +22,15 @@ import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.misc.Loggers; -import com.alibaba.nacos.naming.misc.NetUtils; import com.alibaba.nacos.naming.misc.SwitchDomain; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Objects; /** * @author nkorange @@ -85,8 +84,8 @@ public boolean responsible(String serviceName) { return false; } - int index = servers.indexOf(NetUtils.localServer()); - int lastIndex = servers.lastIndexOf(NetUtils.localServer()); + int index = servers.indexOf(ApplicationUtils.getLocalAddress()); + int lastIndex = servers.lastIndexOf(ApplicationUtils.getLocalAddress()); if (lastIndex < 0 || index < 0) { return true; } @@ -99,24 +98,31 @@ public String mapSrv(String serviceName) { final List servers = healthyList; if (CollectionUtils.isEmpty(servers) || !switchDomain.isDistroEnabled()) { - return NetUtils.localServer(); + return ApplicationUtils.getLocalAddress(); } try { - return servers.get(distroHash(serviceName) % servers.size()); + int index = distroHash(serviceName) % servers.size(); + return servers.get(index); } catch (Throwable e) { - Loggers.SRV_LOG.warn("distro mapper failed, return localhost: " + NetUtils.localServer(), e); - return NetUtils.localServer(); + Loggers.SRV_LOG.warn("[NACOS-DISTRO] distro mapper failed, return localhost: " + ApplicationUtils.getLocalAddress(), e); + return ApplicationUtils.getLocalAddress(); } } public int distroHash(String serviceName) { - return Math.abs(Objects.hash(serviceName) % Integer.MAX_VALUE); + return Math.abs(serviceName.hashCode() % Integer.MAX_VALUE); } @Override public void onEvent(MemberChangeEvent event) { - healthyList = Collections.unmodifiableList(MemberUtils.simpleMembers(event.getMembers())); + // Here, the node list must be sorted to ensure that all nacos-server's + // node list is in the same order + List list = MemberUtils.simpleMembers(event.getMembers()); + Collections.sort(list); + Collection old = healthyList; + healthyList = Collections.unmodifiableList(list); + Loggers.SRV_LOG.info("[NACOS-DISTRO] healthy server list changed, old: {}, new: {}", old, healthyList); } @Override diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/Instance.java b/naming/src/main/java/com/alibaba/nacos/naming/core/Instance.java index 9b07cfc03d1..8e111f4773c 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/Instance.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/Instance.java @@ -15,13 +15,16 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.healthcheck.HealthCheckStatus; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.UtilsAndCommons; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + import org.apache.commons.lang3.math.NumberUtils; import java.util.Set; @@ -34,6 +37,7 @@ * * @author nkorange */ +@JsonInclude(Include.NON_NULL) public class Instance extends com.alibaba.nacos.api.naming.pojo.Instance implements Comparable { private static final double MAX_WEIGHT_VALUE = 10000.0D; @@ -42,7 +46,7 @@ public class Instance extends com.alibaba.nacos.api.naming.pojo.Instance impleme private volatile long lastBeat = System.currentTimeMillis(); - @JSONField(serialize = false) + @JsonIgnore private volatile boolean mockValid = false; private volatile boolean marked = false; @@ -173,7 +177,7 @@ public String toString() { } public String toJSON() { - return JSON.toJSONString(this); + return JacksonUtils.toJson(this); } @@ -181,7 +185,7 @@ public static Instance fromJSON(String json) { Instance ip; try { - ip = JSON.parseObject(json, Instance.class); + ip = JacksonUtils.toObj(json, Instance.class); } catch (Exception e) { ip = fromString(json); } @@ -224,7 +228,7 @@ public boolean equals(Object obj) { && this.isEphemeral() == other.isEphemeral(); } - @JSONField(serialize = false) + @JsonIgnore public String getDatumKey() { if (getPort() > 0) { return getIp() + ":" + getPort() + ":" + UtilsAndCommons.LOCALHOST_SITE + ":" + getClusterName(); @@ -233,7 +237,7 @@ public String getDatumKey() { } } - @JSONField(serialize = false) + @JsonIgnore public String getDefaultKey() { if (getPort() > 0) { return getIp() + ":" + getPort() + ":" + UtilsAndCommons.UNKNOWN_SITE; @@ -255,22 +259,22 @@ public boolean markChecking() { return HealthCheckStatus.get(this).isBeingChecked.compareAndSet(false, true); } - @JSONField(serialize = false) + @JsonIgnore public long getCheckRT() { return HealthCheckStatus.get(this).checkRT; } - @JSONField(serialize = false) + @JsonIgnore public AtomicInteger getOKCount() { return HealthCheckStatus.get(this).checkOKCount; } - @JSONField(serialize = false) + @JsonIgnore public AtomicInteger getFailCount() { return HealthCheckStatus.get(this).checkFailCount; } - @JSONField(serialize = false) + @JsonIgnore public void setCheckRT(long checkRT) { HealthCheckStatus.get(this).checkRT = checkRT; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/Instances.java b/naming/src/main/java/com/alibaba/nacos/naming/core/Instances.java index fc6106ee9b8..3961dd8cff6 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/Instances.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/Instances.java @@ -15,11 +15,12 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.annotation.JSONField; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.MD5Utils; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.naming.pojo.Record; +import com.fasterxml.jackson.annotation.JsonIgnore; + import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; @@ -47,11 +48,15 @@ public void setInstanceList(List instanceList) { @Override public String toString() { - return JSON.toJSONString(this); + try { + return JacksonUtils.toJson(this); + } catch (Exception e) { + throw new RuntimeException("Instances toJSON failed", e); + } } @Override - @JSONField(serialize = false) + @JsonIgnore public String getChecksum() { return recalculateChecksum(); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java b/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java index 2a744f0de6d..91aed029404 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java @@ -15,8 +15,7 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.annotation.JSONField; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.common.utils.MD5Utils; import com.alibaba.nacos.api.common.Constants; @@ -32,6 +31,10 @@ import com.alibaba.nacos.naming.push.PushService; import com.alibaba.nacos.naming.selector.NoneSelector; import com.alibaba.nacos.naming.selector.Selector; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.ListUtils; import org.apache.commons.lang3.StringUtils; @@ -48,11 +51,12 @@ * * @author nkorange */ +@JsonInclude(Include.NON_NULL) public class Service extends com.alibaba.nacos.api.naming.pojo.Service implements Record, RecordListener { private static final String SERVICE_NAME_SYNTAX = "[0-9a-zA-Z@\\.:_-]+"; - @JSONField(serialize = false) + @JsonIgnore private ClientBeatCheckTask clientBeatCheckTask = new ClientBeatCheckTask(this); /** @@ -90,7 +94,7 @@ public Service(String name) { super(name); } - @JSONField(serialize = false) + @JsonIgnore public PushService getPushService() { return ApplicationUtils.getBean(PushService.class); } @@ -322,10 +326,10 @@ public List srvIPs(List clusters) { } public String toJSON() { - return JSON.toJSONString(this); + return JacksonUtils.toJson(this); } - @JSONField(serialize = false) + @JsonIgnore public String getServiceString() { Map serviceObject = new HashMap(10); Service service = this; @@ -369,7 +373,11 @@ public String getServiceString() { serviceObject.put("clusters", clustersList); - return JSON.toJSONString(serviceObject); + try { + return JacksonUtils.toJson(serviceObject); + } catch (Exception e) { + throw new RuntimeException("Service toJson failed", e); + } } public String getToken() { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java index 6e59df26c21..1488ac0cfb3 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @@ -15,12 +15,10 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.utils.NamingUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.naming.consistency.ConsistencyService; @@ -32,14 +30,14 @@ import com.alibaba.nacos.naming.misc.GlobalExecutor; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.Message; -import com.alibaba.nacos.naming.misc.NamingProxy; import com.alibaba.nacos.naming.misc.NetUtils; import com.alibaba.nacos.naming.misc.ServiceStatusSynchronizer; import com.alibaba.nacos.naming.misc.SwitchDomain; import com.alibaba.nacos.naming.misc.Synchronizer; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.alibaba.nacos.naming.push.PushService; -import com.google.common.collect.Maps; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.collect.Sets; import java.util.ArrayList; import java.util.Collection; @@ -60,9 +58,7 @@ import javax.annotation.Resource; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -88,34 +84,39 @@ public class ServiceManager implements RecordListener { @Resource(name = "consistencyDelegate") private ConsistencyService consistencyService; - @Autowired - private SwitchDomain switchDomain; + private final SwitchDomain switchDomain; - @Autowired - private DistroMapper distroMapper; + private final DistroMapper distroMapper; - @Autowired - private ServerMemberManager memberManager; + private final ServerMemberManager memberManager; - @Autowired - private PushService pushService; + private final PushService pushService; - @Autowired - private RaftPeerSet raftPeerSet; - - @Value("${nacos.naming.empty-service.auto-clean:false}") - private boolean emptyServiceAutoClean; + private final RaftPeerSet raftPeerSet; private int maxFinalizeCount = 3; private final Object putServiceLock = new Object(); + @Value("${nacos.naming.empty-service.auto-clean:false}") + private boolean emptyServiceAutoClean; + @Value("${nacos.naming.empty-service.clean.initial-delay-ms:60000}") private int cleanEmptyServiceDelay; @Value("${nacos.naming.empty-service.clean.period-time-ms:20000}") private int cleanEmptyServicePeriod; + public ServiceManager(SwitchDomain switchDomain, DistroMapper distroMapper, + ServerMemberManager memberManager, PushService pushService, + RaftPeerSet raftPeerSet) { + this.switchDomain = switchDomain; + this.distroMapper = distroMapper; + this.memberManager = memberManager; + this.pushService = pushService; + this.raftPeerSet = raftPeerSet; + } + @PostConstruct public void init() { @@ -274,13 +275,13 @@ public RaftPeer getMySelfClusterState() { public void updatedHealthStatus(String namespaceId, String serviceName, String serverIP) { Message msg = synchronizer.get(serverIP, UtilsAndCommons.assembleFullServiceName(namespaceId, serviceName)); - JSONObject serviceJson = JSON.parseObject(msg.getData()); + JsonNode serviceJson = JacksonUtils.toObj(msg.getData()); - JSONArray ipList = serviceJson.getJSONArray("ips"); + ArrayNode ipList = (ArrayNode) serviceJson.get("ips"); Map ipsMap = new HashMap<>(ipList.size()); for (int i = 0; i < ipList.size(); i++) { - String ip = ipList.getString(i); + String ip = ipList.get(i).asText(); String[] strings = ip.split("_"); ipsMap.put(strings[0], strings[1]); } @@ -308,17 +309,15 @@ public void updatedHealthStatus(String namespaceId, String serviceName, String s if (changed) { pushService.serviceChanged(service); - } - - StringBuilder stringBuilder = new StringBuilder(); - List allIps = service.allIPs(); - for (Instance instance : allIps) { - stringBuilder.append(instance.toIPAddr()).append("_").append(instance.isHealthy()).append(","); - } - - if (changed && Loggers.EVT_LOG.isDebugEnabled()) { - Loggers.EVT_LOG.debug("[HEALTH-STATUS-UPDATED] namespace: {}, service: {}, ips: {}", - service.getNamespaceId(), service.getName(), stringBuilder.toString()); + if (Loggers.EVT_LOG.isDebugEnabled()){ + StringBuilder stringBuilder = new StringBuilder(); + List allIps = service.allIPs(); + for (Instance instance : allIps) { + stringBuilder.append(instance.toIPAddr()).append("_").append(instance.isHealthy()).append(","); + } + Loggers.EVT_LOG.debug("[HEALTH-STATUS-UPDATED] namespace: {}, service: {}, ips: {}", + service.getNamespaceId(), service.getName(), stringBuilder.toString()); + } } } @@ -567,7 +566,7 @@ public List updateIpAddresses(Service service, String action, boolean if (instanceMap.size() <= 0 && UtilsAndCommons.UPDATE_INSTANCE_ACTION_ADD.equals(action)) { throw new IllegalArgumentException("ip list can not be empty, service: " + service.getName() + ", ip list: " - + JSON.toJSONString(instanceMap.values())); + + JacksonUtils.toJson(instanceMap.values())); } return new ArrayList<>(instanceMap.values()); @@ -841,7 +840,7 @@ public void run() { Message msg = new Message(); - msg.setData(JSON.toJSONString(checksum)); + msg.setData(JacksonUtils.toJson(checksum)); Collection sameSiteServers = memberManager.allMembers(); @@ -895,7 +894,7 @@ public ServiceKey(String namespaceId, String serviceName, String serverIP, Strin @Override public String toString() { - return JSON.toJSONString(this); + return JacksonUtils.toJson(this); } } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java index 971ae957150..9ce3ed7697f 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java @@ -15,8 +15,8 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.naming.CommonParams; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.utils.ApplicationUtils; @@ -93,7 +93,7 @@ public List getSubscribers(String serviceName, String namespaceId, b + UtilsAndCommons.NACOS_NAMING_CONTEXT + SUBSCRIBER_ON_SYNC_URL, new ArrayList<>(), paramValues); if (HttpURLConnection.HTTP_OK == result.code) { - Subscribers subscribers = (Subscribers) JSONObject.parseObject(result.content, Subscribers.class); + Subscribers subscribers = JacksonUtils.toObj(result.content, Subscribers.class); subscriberList.addAll(subscribers.getSubscribers()); } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java index 3f610909a32..f68144fc842 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java @@ -15,8 +15,7 @@ */ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.annotation.JSONField; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.consistency.KeyBuilder; import com.alibaba.nacos.naming.core.DistroMapper; @@ -25,6 +24,7 @@ import com.alibaba.nacos.naming.healthcheck.events.InstanceHeartbeatTimeoutEvent; import com.alibaba.nacos.naming.misc.*; import com.alibaba.nacos.naming.push.PushService; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.ning.http.client.AsyncCompletionHandler; import com.ning.http.client.Response; @@ -45,13 +45,12 @@ public ClientBeatCheckTask(Service service) { this.service = service; } - - @JSONField(serialize = false) + @JsonIgnore public PushService getPushService() { return ApplicationUtils.getBean(PushService.class); } - @JSONField(serialize = false) + @JsonIgnore public DistroMapper getDistroMapper() { return ApplicationUtils.getBean(DistroMapper.class); } @@ -110,7 +109,7 @@ public void run() { if (System.currentTimeMillis() - instance.getLastBeat() > instance.getIpDeleteTimeout()) { // delete instance - Loggers.SRV_LOG.info("[AUTO-DELETE-IP] service: {}, ip: {}", service.getName(), JSON.toJSONString(instance)); + Loggers.SRV_LOG.info("[AUTO-DELETE-IP] service: {}, ip: {}", service.getName(), JacksonUtils.toJson(instance)); deleteIP(instance); } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java index 149c881350c..911106f26c8 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.naming.healthcheck; - -import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.Instance; @@ -24,6 +22,7 @@ import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.alibaba.nacos.naming.push.PushService; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.List; import java.util.concurrent.TimeUnit; @@ -38,7 +37,7 @@ public class ClientBeatProcessor implements Runnable { private RsInfo rsInfo; private Service service; - @JSONField(serialize = false) + @JsonIgnore public PushService getPushService() { return ApplicationUtils.getBean(PushService.class); } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java index 0c012fa7501..3b0c721f0be 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.utils.ApplicationUtils; @@ -88,10 +88,10 @@ public void run() { continue; } Map params = new HashMap<>(10); - params.put("result", JSON.toJSONString(list)); + params.put("result", JacksonUtils.toJson(list)); if (Loggers.SRV_LOG.isDebugEnabled()) { Loggers.SRV_LOG.debug("[HEALTH-SYNC] server: {}, healthCheckResults: {}", - server, JSON.toJSONString(list)); + server, JacksonUtils.toJson(list)); } HttpClient.HttpResult httpResult = HttpClient.httpPost("http://" + server.getAddress() @@ -100,7 +100,7 @@ public void run() { if (httpResult.code != HttpURLConnection.HTTP_OK) { Loggers.EVT_LOG.warn("[HEALTH-CHECK-SYNC] failed to send result to {}, result: {}", - server, JSON.toJSONString(list)); + server, JacksonUtils.toJson(list)); } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java index d7a6c439a9a..163dc69be3d 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java @@ -15,12 +15,13 @@ */ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.SwitchDomain; +import com.fasterxml.jackson.annotation.JsonIgnore; + import org.apache.commons.lang3.RandomUtils; /** @@ -41,13 +42,13 @@ public class HealthCheckTask implements Runnable { private volatile boolean cancelled = false; - @JSONField(serialize = false) + @JsonIgnore private DistroMapper distroMapper; - @JSONField(serialize = false) + @JsonIgnore private SwitchDomain switchDomain; - @JSONField(serialize = false) + @JsonIgnore private HealthCheckProcessor healthCheckProcessor; public HealthCheckTask(Cluster cluster) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HttpHealthCheckProcessor.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HttpHealthCheckProcessor.java index b03f7e359ad..4331080c6ba 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HttpHealthCheckProcessor.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HttpHealthCheckProcessor.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Http; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.misc.SwitchDomain; @@ -115,7 +115,7 @@ public void process(HealthCheckTask task) { continue; } - AbstractHealthChecker.Http healthChecker = (AbstractHealthChecker.Http) cluster.getHealthChecker(); + Http healthChecker = (Http) cluster.getHealthChecker(); int ckPort = cluster.isUseIPPort4Check() ? ip.getPort() : cluster.getDefCkport(); URL host = new URL("http://" + ip.getIp() + ":" + ckPort); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/JsonAdapter.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/JsonAdapter.java deleted file mode 100644 index 3a756d28a70..00000000000 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/JsonAdapter.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed 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. - */ -package com.alibaba.nacos.naming.healthcheck; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.parser.DefaultJSONParser; -import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; -import com.alibaba.fastjson.serializer.JSONSerializer; -import com.alibaba.fastjson.serializer.ObjectSerializer; -import com.alibaba.fastjson.serializer.SerializeWriter; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; - -import java.io.IOException; -import java.lang.reflect.Type; - -/** - * @author nkorange - */ -public class JsonAdapter implements ObjectDeserializer, ObjectSerializer { - - private static JsonAdapter INSTANCE = new JsonAdapter(); - - private JsonAdapter() { - } - - public static JsonAdapter getInstance() { - return INSTANCE; - } - - @SuppressWarnings("unchecked") - @Override - public T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { - JSONObject jsonObj = (JSONObject) parser.parse(); - String checkType = jsonObj.getString("type"); - - Class target = HealthCheckType.ofHealthCheckerClass(checkType); - - if(target != null){ - return (T) JSON.parseObject(jsonObj.toJSONString(), target); - } - - return null; - } - - @Override - public int getFastMatchToken() { - return 0; - } - - @Override - public void write(JSONSerializer jsonSerializer, Object o, Object o1, Type type, int i) throws IOException { - SerializeWriter writer = jsonSerializer.getWriter(); - if (o == null) { - writer.writeNull(); - return; - } - - AbstractHealthChecker config = (AbstractHealthChecker) o; - - writer.writeFieldValue(',', "type", config.getType()); - - config.jsonAdapterCallback(writer); - } -} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/MysqlHealthCheckProcessor.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/MysqlHealthCheckProcessor.java index 1ce59f46c43..d670221d24e 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/MysqlHealthCheckProcessor.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/MysqlHealthCheckProcessor.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Mysql; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.misc.Loggers; @@ -146,7 +146,7 @@ public void run() { Cluster cluster = task.getCluster(); String key = cluster.getService().getName() + ":" + cluster.getName() + ":" + ip.getIp() + ":" + ip.getPort(); Connection connection = CONNECTION_POOL.get(key); - AbstractHealthChecker.Mysql config = (AbstractHealthChecker.Mysql) cluster.getHealthChecker(); + Mysql config = (Mysql) cluster.getHealthChecker(); if (connection == null || connection.isClosed()) { MysqlDataSource dataSource = new MysqlDataSource(); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/RsInfo.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/RsInfo.java index 95913e6a5b4..9760f35ef40 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/RsInfo.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/RsInfo.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import java.util.Map; @@ -145,6 +145,6 @@ public void setMetadata(Map metadata) { @Override public String toString() { - return JSON.toJSONString(this); + return JacksonUtils.toJson(this); } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/extend/HealthCheckExtendProvider.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/extend/HealthCheckExtendProvider.java index 9e18bb4ad62..fe64073688b 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/extend/HealthCheckExtendProvider.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/extend/HealthCheckExtendProvider.java @@ -15,9 +15,9 @@ */ package com.alibaba.nacos.naming.healthcheck.extend; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker; import com.alibaba.nacos.naming.healthcheck.HealthCheckProcessor; -import com.alibaba.nacos.naming.healthcheck.HealthCheckType; +import com.alibaba.nacos.api.naming.pojo.healthcheck.HealthCheckType; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/GlobalExecutor.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/GlobalExecutor.java index a871129064f..32411ee736b 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/GlobalExecutor.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/GlobalExecutor.java @@ -30,8 +30,6 @@ public class GlobalExecutor { public static final long TICK_PERIOD_MS = TimeUnit.MILLISECONDS.toMillis(500L); - private static final long NACOS_SERVER_LIST_REFRESH_INTERVAL = TimeUnit.SECONDS.toMillis(5); - private static final long PARTITION_DATA_TIMED_SYNC_INTERVAL = TimeUnit.SECONDS.toMillis(5); private static final long SERVER_STATUS_UPDATE_PERIOD = TimeUnit.SECONDS.toMillis(5); @@ -150,8 +148,8 @@ public static void registerMasterElection(Runnable runnable) { executorService.scheduleAtFixedRate(runnable, 0, TICK_PERIOD_MS, TimeUnit.MILLISECONDS); } - public static void registerServerListUpdater(Runnable runnable) { - executorService.scheduleAtFixedRate(runnable, 0, NACOS_SERVER_LIST_REFRESH_INTERVAL, TimeUnit.MILLISECONDS); + public static void registerServerInfoUpdater(Runnable runnable) { + executorService.scheduleAtFixedRate(runnable, 0, 2, TimeUnit.SECONDS); } public static void registerServerStatusReporter(Runnable runnable, long delay) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java index 7e7b1a0f0c5..7513349008d 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java @@ -110,6 +110,7 @@ public static HttpResult request(String url, List headers, Map checksumMap, String server) HttpClient.asyncHttpPutLarge("http://" + server + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL + "?source=" + NetUtils.localServer(), - headers, JSON.toJSONBytes(checksumMap), + headers, JacksonUtils.toJsonBytes(checksumMap), new AsyncCompletionHandler() { @Override public Object onCompleted(Response response) throws Exception { @@ -81,7 +81,7 @@ public static byte[] getData(List keys, String server) throws Exception Map params = new HashMap<>(8); params.put("keys", StringUtils.join(keys, ",")); HttpClient.HttpResult result = HttpClient.httpGetLarge("http://" + server + ApplicationUtils.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL, new HashMap<>(8), JSON.toJSONString(params)); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL, new HashMap<>(8), JacksonUtils.toJson(params)); if (HttpURLConnection.HTTP_OK == result.code) { return result.content.getBytes(); @@ -112,7 +112,7 @@ public static byte[] getAllData(String server) throws Exception { public static boolean syncData(byte[] data, String curServer) { Map headers = new HashMap<>(128); - + headers.put(HttpHeaderConsts.CLIENT_VERSION_HEADER, VersionUtils.VERSION); headers.put(HttpHeaderConsts.USER_AGENT_HEADER, UtilsAndCommons.SERVER_VERSION); headers.put("Accept-Encoding", "gzip,deflate,sdch"); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java index 13a82dba581..e5708d35749 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java @@ -27,6 +27,7 @@ /** * Report local server status to other server * + * @deprecated 1.3.0 This object will be deleted sometime after version 1.3.0 * @author nacos */ public class ServerStatusSynchronizer implements Synchronizer { @@ -55,7 +56,6 @@ public Integer onCompleted(Response response) throws Exception { if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { Loggers.SRV_LOG.warn("[STATUS-SYNCHRONIZE] failed to request serverStatus, remote server: {}", serverIP); - return 1; } return 0; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java index 323ad3a6e62..11e411c233c 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.misc; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.utils.ApplicationUtils; import com.ning.http.client.AsyncCompletionHandler; import com.ning.http.client.Response; @@ -50,7 +50,7 @@ public void send(final String serverIP, Message msg) { } try { - HttpClient.asyncHttpPostLarge(url, null, JSON.toJSONString(params), new AsyncCompletionHandler() { + HttpClient.asyncHttpPostLarge(url, null, JacksonUtils.toJson(params), new AsyncCompletionHandler() { @Override public Integer onCompleted(Response response) throws Exception { if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java index f4383c9d696..dd2c144db6e 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java @@ -15,7 +15,7 @@ */ package com.alibaba.nacos.naming.misc; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.pojo.Record; import org.springframework.stereotype.Component; @@ -368,7 +368,7 @@ public void setLightBeatEnabled(boolean lightBeatEnabled) { @Override public String toString() { - return JSON.toJSONString(this); + return JacksonUtils.toJson(this); } @Override diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchManager.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchManager.java index 5cb713da0d7..d4d8249a029 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchManager.java @@ -15,9 +15,9 @@ */ package com.alibaba.nacos.naming.misc; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.consistency.ConsistencyService; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; @@ -78,7 +78,7 @@ public void update(String entry, String value, boolean debug) throws Exception { if (SwitchEntry.BATCH.equals(entry)) { //batch update - SwitchDomain dom = JSON.parseObject(value, SwitchDomain.class); + SwitchDomain dom = JacksonUtils.toObj(value, SwitchDomain.class); dom.setEnableStandalone(switchDomain.isEnableStandalone()); if (dom.getHttpHealthParams().getMin() < SwitchDomain.HttpHealthParams.MIN_MIN || dom.getTcpHealthParams().getMin() < SwitchDomain.HttpHealthParams.MIN_MIN) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java index 48d37d113cc..1dc90b7592b 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java @@ -15,18 +15,15 @@ */ package com.alibaba.nacos.naming.misc; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.alibaba.fastjson.parser.ParserConfig; -import com.alibaba.fastjson.serializer.SerializeConfig; -import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.nacos.api.exception.NacosException; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; +import com.alibaba.nacos.api.selector.SelectorType; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.VersionUtils; import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.naming.healthcheck.JsonAdapter; -import com.alibaba.nacos.naming.selector.Selector; -import com.alibaba.nacos.naming.selector.SelectorJsonAdapter; +import com.alibaba.nacos.naming.selector.LabelSelector; +import com.alibaba.nacos.naming.selector.NoneSelector; +import com.fasterxml.jackson.core.type.TypeReference; + import org.apache.commons.lang3.StringUtils; import java.io.File; @@ -130,23 +127,21 @@ public class UtilsAndCommons { static { - // custom serializer and deserializer for fast-json - SerializeConfig.getGlobalInstance() - .put(AbstractHealthChecker.class, JsonAdapter.getInstance()); - ParserConfig.getGlobalInstance() - .putDeserializer(AbstractHealthChecker.class, JsonAdapter.getInstance()); + /* + Register subType for serialization - SerializeConfig.getGlobalInstance() - .put(Selector.class, SelectorJsonAdapter.getInstance()); - ParserConfig.getGlobalInstance() - .putDeserializer(Selector.class, SelectorJsonAdapter.getInstance()); + Now these subType implementation class has registered in static code. + But there are some problem for classloader. The implementation class + will be loaded when they are used, which will make deserialize + before register. - // write null values, otherwise will cause compatibility issues - JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullStringAsEmpty.getMask(); - JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullListAsEmpty.getMask(); - JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullBooleanAsFalse.getMask(); - JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteMapNullValue.getMask(); - JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullNumberAsZero.getMask(); + 子类实现类中的静态代码串中已经向Jackson进行了注册,但是由于classloader的原因,只有当 + 该子类被使用的时候,才会加载该类。这可能会导致Jackson先进性反序列化,再注册子类,从而导致 + 反序列化失败。 + */ + // TODO register in implementation class or remove subType + JacksonUtils.registerSubtype(NoneSelector.class, SelectorType.none.name()); + JacksonUtils.registerSubtype(LabelSelector.class, SelectorType.label.name()); SERVICE_SYNCHRONIZATION_EXECUTOR = new ScheduledThreadPoolExecutor(1, new ThreadFactory() { @@ -207,8 +202,7 @@ public static Map parseMetadata(String metadata) throws NacosExc } try { - metadataMap = JSON.parseObject(metadata, new TypeReference>() { - }); + metadataMap = JacksonUtils.toObj(metadata, new TypeReference>() {}); } catch (Exception e) { String[] datas = metadata.split(","); if (datas.length > 0) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/pojo/ClusterStateView.java b/naming/src/main/java/com/alibaba/nacos/naming/pojo/ClusterStateView.java index ca06da76590..39f74555275 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/pojo/ClusterStateView.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/pojo/ClusterStateView.java @@ -15,9 +15,6 @@ */ package com.alibaba.nacos.naming.pojo; -import com.alibaba.fastjson.JSON; - - /** * @author: universefeeler * @Date: 2019/05/19 15:51 @@ -89,6 +86,13 @@ public void setClusterTerm(long clusterTerm) { @Override public String toString() { - return JSON.toJSONString(this); + return "ClusterStateView{" + + "nodeIp='" + nodeIp + '\'' + + ", nodeState='" + nodeState + '\'' + + ", clusterTerm=" + clusterTerm + + ", leaderDueMs=" + leaderDueMs + + ", voteFor='" + voteFor + '\'' + + ", heartbeatDueMs=" + heartbeatDueMs + + '}'; } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceDetailView.java b/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceDetailView.java index e00ab49570c..6a29a449521 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceDetailView.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceDetailView.java @@ -15,7 +15,6 @@ */ package com.alibaba.nacos.naming.pojo; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.naming.pojo.Cluster; import com.alibaba.nacos.api.naming.pojo.Service; @@ -48,6 +47,9 @@ public void setClusters(List clusters) { @Override public String toString() { - return JSON.toJSONString(this); + return "ServiceDetailView{" + + "service=" + service + + ", clusters=" + clusters + + '}'; } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceView.java b/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceView.java index afe2e21ea5c..d283317b312 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceView.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/pojo/ServiceView.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.naming.pojo; -import com.alibaba.fastjson.JSON; - /** * @author nkorange */ @@ -79,6 +77,13 @@ public void setTriggerFlag(String triggerFlag) { @Override public String toString() { - return JSON.toJSONString(this); + return "ServiceView{" + + "name='" + name + '\'' + + ", groupName='" + groupName + '\'' + + ", clusterCount=" + clusterCount + + ", ipCount=" + ipCount + + ", healthyInstanceCount=" + healthyInstanceCount + + ", triggerFlag='" + triggerFlag + '\'' + + '}'; } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/push/PushService.java b/naming/src/main/java/com/alibaba/nacos/naming/push/PushService.java index d2f5d134fbc..71d5c8663ad 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/push/PushService.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/push/PushService.java @@ -15,9 +15,8 @@ */ package com.alibaba.nacos.naming.push; -import com.alibaba.fastjson.JSON; -import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.utils.NamingUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.core.Service; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.SwitchDomain; @@ -39,7 +38,6 @@ import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.*; @@ -555,7 +553,7 @@ private static Receiver.AckEntry prepareAckEntry(PushClient client, Map getLabels() { @@ -90,7 +96,7 @@ public void setLabels(Set labels) { } public LabelSelector() { - setType(SelectorType.label.name()); + super(); } private CmdbReader getCmdbReader() { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/selector/NoneSelector.java b/naming/src/main/java/com/alibaba/nacos/naming/selector/NoneSelector.java index 38bab06a193..f4527401db4 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/selector/NoneSelector.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/selector/NoneSelector.java @@ -15,7 +15,11 @@ */ package com.alibaba.nacos.naming.selector; +import com.alibaba.nacos.api.selector.SelectorType; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.core.Instance; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; import java.util.List; @@ -25,8 +29,13 @@ * @author nkorange * @since 0.7.0 */ +@JsonTypeInfo(use = Id.NAME, property = "type") public class NoneSelector extends com.alibaba.nacos.api.selector.NoneSelector implements Selector { + static { + JacksonUtils.registerSubtype(NoneSelector.class, SelectorType.none.name()); + } + @Override public List select(String consumer, List providers) { return providers; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/selector/Selector.java b/naming/src/main/java/com/alibaba/nacos/naming/selector/Selector.java index 13e29eacbb7..91d55fcb192 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/selector/Selector.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/selector/Selector.java @@ -16,6 +16,8 @@ package com.alibaba.nacos.naming.selector; import com.alibaba.nacos.naming.core.Instance; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; import java.util.List; @@ -30,12 +32,15 @@ *

* Every extended selector should also register its type to class SelectorType so Nacos * recognizes it and can correctly create this type of selector. + *

+ * Sub class should register their type to JacksonUtil. * * @author nkorange * @see com.alibaba.nacos.api.selector.SelectorType - * @see SelectorJsonAdapter + * @see com.alibaba.nacos.common.utils.JacksonUtils * @since 0.7.0 */ +@JsonTypeInfo(use = Id.NAME, property = "type", defaultImpl = NoneSelector.class) public interface Selector { /** diff --git a/naming/src/main/java/com/alibaba/nacos/naming/selector/SelectorJsonAdapter.java b/naming/src/main/java/com/alibaba/nacos/naming/selector/SelectorJsonAdapter.java deleted file mode 100644 index 6f887f8b073..00000000000 --- a/naming/src/main/java/com/alibaba/nacos/naming/selector/SelectorJsonAdapter.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed 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. - */ -package com.alibaba.nacos.naming.selector; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.parser.DefaultJSONParser; -import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; -import com.alibaba.fastjson.serializer.JSONSerializer; -import com.alibaba.fastjson.serializer.ObjectSerializer; -import com.alibaba.fastjson.serializer.SerializeWriter; -import com.alibaba.nacos.api.selector.SelectorType; -import org.apache.commons.lang3.StringUtils; - -import java.io.IOException; -import java.lang.reflect.Type; - -/** - * Json adapter for class Selector. - *

- * When deserializing object for class Selector, we should consider to convert the selector to - * its runtime child class object. And this adapter helps us to finish it. - * - * @author nkorange - * @since 0.7.0 - */ -public class SelectorJsonAdapter implements ObjectDeserializer, ObjectSerializer { - - private static SelectorJsonAdapter INSTANCE = new SelectorJsonAdapter(); - - private SelectorJsonAdapter() { - } - - public static SelectorJsonAdapter getInstance() { - return INSTANCE; - } - - @Override - public T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { - - JSONObject jsonObj = (JSONObject) parser.parse(); - - if (jsonObj == null) { - return null; - } - - String checkType = jsonObj.getString("type"); - - if (StringUtils.equals(checkType, SelectorType.label.name())) { - return (T) JSON.parseObject(jsonObj.toJSONString(), LabelSelector.class); - } - - if (StringUtils.equals(checkType, SelectorType.none.name())) { - return (T) JSON.parseObject(jsonObj.toJSONString(), NoneSelector.class); - } - - return null; - } - - @Override - public int getFastMatchToken() { - return 0; - } - - @Override - public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { - - SerializeWriter writer = serializer.getWriter(); - if (object == null) { - writer.writeNull(); - return; - } - - Selector selector = (Selector) object; - - writer.writeFieldValue(',', "type", selector.getType()); - - if (StringUtils.equals(selector.getType(), SelectorType.label.name())) { - LabelSelector labelSelector = (LabelSelector) selector; - writer.writeFieldValue(',', "labels", JSON.toJSONString(labelSelector.getLabels())); - } - } -} diff --git a/naming/src/main/resources/META-INF/logback/naming-included.xml b/naming/src/main/resources/META-INF/logback/naming-included.xml index 9f0bfca22ff..81258d44fdc 100644 --- a/naming/src/main/resources/META-INF/logback/naming-included.xml +++ b/naming/src/main/resources/META-INF/logback/naming-included.xml @@ -187,6 +187,23 @@ + + ${LOG_HOME}/naming-distro.log + true + + ${LOG_HOME}/naming-distro.log.%d{yyyy-MM-dd}.%i + 1GB + 7 + 3GB + true + + + %date %level %msg%n%n + UTF-8 + + + @@ -195,6 +212,10 @@ + + + + diff --git a/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java b/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java index b8642a421d7..f0a7d991bbf 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java @@ -15,6 +15,7 @@ */ package com.alibaba.nacos.naming; +import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftCore; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeer; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeerSet; @@ -27,19 +28,30 @@ import org.junit.Before; import org.junit.Rule; import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; import org.mockito.Spy; -import org.springframework.context.ApplicationContext; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.mock.env.MockEnvironment; import static org.mockito.Mockito.doReturn; /** * @author nkorange */ +@RunWith(MockitoJUnitRunner.class) public class BaseTest { + protected static final String TEST_CLUSTER_NAME = "test-cluster"; + + protected static final String TEST_SERVICE_NAME = "test-service"; + + protected static final String TEST_GROUP_NAME = "test-group-name"; + + protected static final String TEST_NAMESPACE = "test-namespace"; + @Mock public ServiceManager serviceManager; @@ -52,36 +64,52 @@ public class BaseTest { @Rule public ExpectedException expectedException = ExpectedException.none(); + @Spy + protected ConfigurableApplicationContext context; + + @Mock + protected DistroMapper distroMapper; + + @Spy + protected SwitchDomain switchDomain; + + @Mock + protected HealthCheckProcessorDelegate delegate; + + @Mock + protected PushService pushService; + + @Spy + private MockEnvironment environment; + @Before public void before() { - MockitoAnnotations.initMocks(this); + ApplicationUtils.injectEnvironment(environment); + ApplicationUtils.injectContext(context); + } + protected void mockRaft() { RaftPeer peer = new RaftPeer(); peer.ip = NetUtils.localServer(); raftCore.setPeerSet(peerSet); Mockito.when(peerSet.local()).thenReturn(peer); Mockito.when(peerSet.getLeader()).thenReturn(peer); Mockito.when(peerSet.isLeader(NetUtils.localServer())).thenReturn(true); + } - doReturn(distroMapper).when(context).getBean(DistroMapper.class); - doReturn(switchDomain).when(context).getBean(SwitchDomain.class); - doReturn(delegate).when(context).getBean(HealthCheckProcessorDelegate.class); + protected void mockInjectPushServer() { doReturn(pushService).when(context).getBean(PushService.class); } - protected static final String TEST_CLUSTER_NAME = "test-cluster"; - protected static final String TEST_SERVICE_NAME = "test-service"; - protected static final String TEST_GROUP_NAME = "test-group-name"; - protected static final String TEST_NAMESPACE = "test-namespace"; + protected void mockInjectHealthCheckProcessor() { + doReturn(delegate).when(context).getBean(HealthCheckProcessorDelegate.class); + } - @Spy - protected ApplicationContext context; - @Mock - protected DistroMapper distroMapper; - @Spy - protected SwitchDomain switchDomain; - @Mock - protected HealthCheckProcessorDelegate delegate; - @Mock - protected PushService pushService; + protected void mockInjectSwitchDomain() { + doReturn(switchDomain).when(context).getBean(SwitchDomain.class); + } + + protected void mockInjectDistroMapper() { + doReturn(distroMapper).when(context).getBean(DistroMapper.class); + } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/cluster/transport/SerializerTest.java b/naming/src/test/java/com/alibaba/nacos/naming/cluster/transport/SerializerTest.java new file mode 100644 index 00000000000..f0660369ecc --- /dev/null +++ b/naming/src/test/java/com/alibaba/nacos/naming/cluster/transport/SerializerTest.java @@ -0,0 +1,78 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed 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. + */ + +package com.alibaba.nacos.naming.cluster.transport; + +import com.alibaba.nacos.common.utils.ByteUtils; +import com.alibaba.nacos.naming.consistency.Datum; +import com.alibaba.nacos.naming.core.Instance; +import com.alibaba.nacos.naming.core.Instances; +import org.junit.Before; +import org.junit.Test; + +import java.util.Map; + +import static org.junit.Assert.*; + +public class SerializerTest { + + private Serializer serializer; + + private Instances instances; + + @Before + public void setUp() throws Exception { + serializer = new JacksonSerializer(); + instances = new Instances(); + instances.getInstanceList().add(new Instance("1.1.1.1", 1234, "cluster")); + } + + @Test + public void testSerialize() { + String actual = new String(serializer.serialize(instances)); + assertTrue(actual.contains("\"instanceList\":[")); + assertTrue(actual.contains("\"clusterName\":\"cluster\"")); + assertTrue(actual.contains("\"ip\":\"1.1.1.1\"")); + assertTrue(actual.contains("\"port\":1234")); + } + + @Test + public void testDeserialize() { + String example = "{\"instanceList\":[{\"ip\":\"1.1.1.1\",\"port\":1234,\"weight\":1.0,\"healthy\":true,\"enabled\":true,\"ephemeral\":true,\"clusterName\":\"cluster\",\"metadata\":{},\"lastBeat\":1590563397264,\"marked\":false,\"instanceIdGenerator\":\"simple\",\"instanceHeartBeatInterval\":5000,\"instanceHeartBeatTimeOut\":15000,\"ipDeleteTimeout\":30000}]}"; + Instances actual = serializer.deserialize(ByteUtils.toBytes(example), Instances.class); + assertEquals(1, actual.getInstanceList().size()); + Instance actualInstance = actual.getInstanceList().get(0); + assertEquals("1.1.1.1", actualInstance.getIp()); + assertEquals("cluster", actualInstance.getClusterName()); + assertEquals(1234, actualInstance.getPort()); + } + + @Test + public void testDeserializeMap() { + String example = "{\"datum\":{\"key\":\"instances\",\"value\":{\"instanceList\":[{\"ip\":\"1.1.1.1\",\"port\":1234,\"weight\":1.0,\"healthy\":true,\"enabled\":true,\"ephemeral\":true,\"clusterName\":\"cluster\",\"metadata\":{},\"lastBeat\":1590563397533,\"marked\":false,\"instanceIdGenerator\":\"simple\",\"instanceHeartBeatInterval\":5000,\"instanceHeartBeatTimeOut\":15000,\"ipDeleteTimeout\":30000}]},\"timestamp\":100000}}"; + Map> actual = serializer.deserializeMap(ByteUtils.toBytes(example), Instances.class); + assertEquals(actual.size(), 1); + assertTrue(actual.containsKey("datum")); + Datum actualDatum = actual.get("datum"); + assertEquals("instances", actualDatum.key); + assertEquals(100000L, actualDatum.timestamp.get()); + assertEquals(1, actualDatum.value.getInstanceList().size()); + Instance actualInstance = actualDatum.value.getInstanceList().get(0); + assertEquals("1.1.1.1", actualInstance.getIp()); + assertEquals("cluster", actualInstance.getClusterName()); + assertEquals(1234, actualInstance.getPort()); + } +} diff --git a/naming/src/test/java/com/alibaba/nacos/naming/controllers/CatalogControllerTest.java b/naming/src/test/java/com/alibaba/nacos/naming/controllers/CatalogControllerTest.java index 7a5ccc2fc7d..d8f6f0416c7 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/controllers/CatalogControllerTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/controllers/CatalogControllerTest.java @@ -15,84 +15,107 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; -import com.alibaba.nacos.api.naming.CommonParams; +import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.naming.core.Cluster; +import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.core.Service; import com.alibaba.nacos.naming.core.ServiceManager; -import com.alibaba.nacos.naming.misc.UtilsAndCommons; -import org.junit.Assert; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; - -import static org.mockito.Mockito.anyString; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.lang.reflect.Field; +import java.util.Collections; + +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; /** * @author jifengnan 2019-04-29 */ -@RunWith(SpringRunner.class) -@SpringBootTest -@AutoConfigureMockMvc +@RunWith(MockitoJUnitRunner.class) public class CatalogControllerTest { - @Autowired - private MockMvc mockmvc; - - @MockBean + @Mock private ServiceManager serviceManager; - @Test - public void testServiceDetail() throws Exception { - Service service = new Service(TEST_SERVICE_NAME); + private CatalogController catalogController; + + private Service service; + + private Cluster cluster; + + @Before + public void setUp() throws NoSuchFieldException, IllegalAccessException { + catalogController = new CatalogController(); + Field field = catalogController.getClass().getDeclaredField("serviceManager"); + field.setAccessible(true); + field.set(catalogController, serviceManager); + service = new Service(TEST_SERVICE_NAME); service.setNamespaceId(Constants.DEFAULT_NAMESPACE_ID); service.setProtectThreshold(12.34f); service.setGroupName(TEST_GROUP_NAME); - Cluster cluster = new Cluster(TEST_CLUSTER_NAME, service); + cluster = new Cluster(TEST_CLUSTER_NAME, service); cluster.setDefaultPort(1); - service.addCluster(cluster); - when(serviceManager.getService(anyString(), anyString())).thenReturn(service); - String result1 = mockmvc.perform(get(UtilsAndCommons.NACOS_NAMING_CONTEXT + "/catalog/service") - .param(CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID) - .param(CommonParams.SERVICE_NAME, TEST_SERVICE_NAME) - .param(CommonParams.GROUP_NAME, TEST_GROUP_NAME)) - .andReturn().getResponse().getContentAsString(); - JSONObject result = JSONObject.parseObject(result1); - JSONObject serviceResult = (JSONObject) result.get("service"); - Assert.assertEquals(TEST_SERVICE_NAME, serviceResult.get("name")); - Assert.assertEquals(12.34, Float.parseFloat(serviceResult.get("protectThreshold").toString()), 0.01); - Assert.assertEquals(TEST_GROUP_NAME, serviceResult.get("groupName")); - - JSONArray clusterResults = (JSONArray) result.get("clusters"); - Assert.assertEquals(1, clusterResults.size()); - JSONObject clusterResult = (JSONObject) clusterResults.get(0); - Assert.assertEquals(TEST_CLUSTER_NAME, clusterResult.get("name")); - Assert.assertEquals(1, Integer.parseInt(clusterResult.get("defaultPort").toString())); - Assert.assertTrue(Boolean.parseBoolean(clusterResult.get("useIPPort4Check").toString())); - Assert.assertEquals(TEST_SERVICE_NAME, clusterResult.get("serviceName")); - Assert.assertEquals(80, Integer.parseInt(clusterResult.get("defaultCheckPort").toString())); + when(serviceManager.getService(Constants.DEFAULT_NAMESPACE_ID, TEST_GROUP_NAME + Constants.SERVICE_INFO_SPLITER + TEST_SERVICE_NAME)).thenReturn(service); } @Test - public void testServiceDetailNotFound() throws Exception { - String result = mockmvc.perform(get(UtilsAndCommons.NACOS_NAMING_CONTEXT + "/catalog/service") - .param(CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID) - .param(CommonParams.SERVICE_NAME, TEST_SERVICE_NAME)).andReturn().getResponse().getContentAsString(); + public void testServiceDetail() throws Exception { + ObjectNode result = catalogController.serviceDetail(Constants.DEFAULT_NAMESPACE_ID, TEST_GROUP_NAME + Constants.SERVICE_INFO_SPLITER + TEST_SERVICE_NAME); + String actual = result.toString(); + assertTrue(actual.contains("\"service\":{")); + assertTrue(actual.contains("\"groupName\":\"test-group-name\"")); + assertTrue(actual.contains("\"metadata\":{}")); + assertTrue(actual.contains("\"name\":\"test-service\"")); + assertTrue(actual.contains("\"selector\":{\"type\":\"none\"}")); + assertTrue(actual.contains("\"protectThreshold\":12.34")); + assertTrue(actual.contains("\"clusters\":[{")); + assertTrue(actual.contains("\"defaultCheckPort\":80")); + assertTrue(actual.contains("\"defaultPort\":1")); + assertTrue(actual.contains("\"healthChecker\":{\"type\":\"TCP\"}")); + assertTrue(actual.contains("\"metadata\":{}")); + assertTrue(actual.contains("\"name\":\"test-cluster\"")); + assertTrue(actual.contains("\"serviceName\":\"test-service\"")); + assertTrue(actual.contains("\"useIPPort4Check\":true")); + } - Assert.assertTrue(result.contains("test-service is not found!")); + @Test(expected = NacosException.class) + public void testServiceDetailNotFound() throws Exception { + catalogController.serviceDetail(Constants.DEFAULT_NAMESPACE_ID, TEST_SERVICE_NAME); } private static final String TEST_CLUSTER_NAME = "test-cluster"; private static final String TEST_SERVICE_NAME = "test-service"; private static final String TEST_GROUP_NAME = "test-group-name"; + + @Test + public void testInstanceList() throws NacosException { + Instance instance = new Instance("1.1.1.1", 1234, TEST_CLUSTER_NAME); + cluster.updateIPs(Collections.singletonList(instance), false); + ObjectNode result = catalogController.instanceList(Constants.DEFAULT_NAMESPACE_ID, TEST_GROUP_NAME + Constants.SERVICE_INFO_SPLITER + TEST_SERVICE_NAME, + TEST_CLUSTER_NAME, 1, 10); + String actual = result.toString(); + assertTrue(actual.contains("\"count\":1")); + assertTrue(actual.contains("\"list\":[")); + assertTrue(actual.contains("\"clusterName\":\"test-cluster\"")); + assertTrue(actual.contains("\"ip\":\"1.1.1.1\"")); + assertTrue(actual.contains("\"port\":1234")); + } + + @Test + public void testListDetail() { + // TODO + } + + @Test + public void testRt4Service() { + // TODO + } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/controllers/InstanceControllerTest.java b/naming/src/test/java/com/alibaba/nacos/naming/controllers/InstanceControllerTest.java index ee798b7f2dc..ae9e4710600 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/controllers/InstanceControllerTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/controllers/InstanceControllerTest.java @@ -15,16 +15,16 @@ */ package com.alibaba.nacos.naming.controllers; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.BaseTest; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeerSet; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.core.Service; import com.alibaba.nacos.naming.misc.UtilsAndCommons; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -135,18 +135,18 @@ public void getInstances() throws Exception { MockHttpServletResponse response = mockmvc.perform(builder).andReturn().getResponse(); String actualValue = response.getContentAsString(); - JSONObject result = JSON.parseObject(actualValue); + JsonNode result = JacksonUtils.toObj(actualValue); - Assert.assertEquals(TEST_SERVICE_NAME, result.getString("name")); - JSONArray hosts = result.getJSONArray("hosts"); + Assert.assertEquals(TEST_SERVICE_NAME, result.get("name").asText()); + JsonNode hosts = result.get("hosts"); Assert.assertNotNull(hosts); Assert.assertEquals(hosts.size(), 1); - JSONObject host = hosts.getJSONObject(0); + JsonNode host = hosts.get(0); Assert.assertNotNull(host); - Assert.assertEquals("10.10.10.10", host.getString("ip")); - Assert.assertEquals(8888, host.getIntValue("port")); - Assert.assertEquals(2.0, host.getDoubleValue("weight"), 0.001); + Assert.assertEquals("10.10.10.10", host.get("ip").asText()); + Assert.assertEquals(8888, host.get("port").asInt()); + Assert.assertEquals(2.0, host.get("weight").asDouble(), 0.001); } @Test @@ -159,9 +159,9 @@ public void getNullServiceInstances() throws Exception { MockHttpServletResponse response = mockmvc.perform(builder).andReturn().getResponse(); String actualValue = response.getContentAsString(); - JSONObject result = JSON.parseObject(actualValue); + JsonNode result = JacksonUtils.toObj(actualValue); - JSONArray hosts = result.getJSONArray("hosts"); + JsonNode hosts = result.get("hosts"); Assert.assertEquals(hosts.size(), 0); } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java index 6b2bd6ad3d9..eaf89414095 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java @@ -15,30 +15,55 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; -import org.junit.Assert; +import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Http; +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.naming.misc.SwitchDomain; +import com.alibaba.nacos.naming.misc.SwitchDomain.TcpHealthParams; + import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.context.ConfigurableApplicationContext; import java.util.ArrayList; import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + /** * @author nkorange */ +@RunWith(MockitoJUnitRunner.class) public class ClusterTest { private Cluster cluster; + @Mock + private ConfigurableApplicationContext context; + + @Mock + private SwitchDomain switchDomain; + @Before public void before() { - + ApplicationUtils.injectContext(context); + when(context.getBean(SwitchDomain.class)).thenReturn(switchDomain); + when(switchDomain.getTcpHealthParams()).thenReturn(new TcpHealthParams()); Service service = new Service(); service.setName("nacos.service.1"); cluster = new Cluster("nacos-cluster-1", service); cluster.setDefCkport(80); cluster.setDefIPPort(8080); + cluster.init(); } @@ -50,7 +75,7 @@ public void updateCluster() { Cluster newCluster = new Cluster("nacos-cluster-1", service); newCluster.setDefCkport(8888); newCluster.setDefIPPort(9999); - AbstractHealthChecker.Http healthCheckConfig = new AbstractHealthChecker.Http(); + Http healthCheckConfig = new Http(); healthCheckConfig.setPath("/nacos-path-1"); healthCheckConfig.setExpectedResponseCode(500); healthCheckConfig.setHeaders("Client-Version:nacos-test-1"); @@ -58,13 +83,13 @@ public void updateCluster() { cluster.update(newCluster); - Assert.assertEquals(8888, cluster.getDefCkport()); - Assert.assertEquals(9999, cluster.getDefIPPort()); - Assert.assertTrue(cluster.getHealthChecker() instanceof AbstractHealthChecker.Http); - AbstractHealthChecker.Http httpHealthCheck = (AbstractHealthChecker.Http) (cluster.getHealthChecker()); - Assert.assertEquals("/nacos-path-1", httpHealthCheck.getPath()); - Assert.assertEquals(500, httpHealthCheck.getExpectedResponseCode()); - Assert.assertEquals("Client-Version:nacos-test-1", httpHealthCheck.getHeaders()); + assertEquals(8888, cluster.getDefCkport()); + assertEquals(9999, cluster.getDefIPPort()); + assertTrue(cluster.getHealthChecker() instanceof Http); + Http httpHealthCheck = (Http) (cluster.getHealthChecker()); + assertEquals("/nacos-path-1", httpHealthCheck.getPath()); + assertEquals(500, httpHealthCheck.getExpectedResponseCode()); + assertEquals("Client-Version:nacos-test-1", httpHealthCheck.getHeaders()); } @Test @@ -85,12 +110,12 @@ public void updateIps() { cluster.updateIPs(list, false); List ips = cluster.allIPs(); - Assert.assertNotNull(ips); - Assert.assertEquals(2, ips.size()); - Assert.assertEquals("1.1.1.1", ips.get(0).getIp()); - Assert.assertEquals(1234, ips.get(0).getPort()); - Assert.assertEquals("1.1.1.1", ips.get(1).getIp()); - Assert.assertEquals(2345, ips.get(1).getPort()); + assertNotNull(ips); + assertEquals(2, ips.size()); + assertEquals("1.1.1.1", ips.get(0).getIp()); + assertEquals(1234, ips.get(0).getPort()); + assertEquals("1.1.1.1", ips.get(1).getIp()); + assertEquals(2345, ips.get(1).getPort()); } @Test @@ -113,4 +138,39 @@ public void testValidateServiceNull() { cluster.validate(); } + @Test + public void testSerialize() throws Exception { + String actual = JacksonUtils.toJson(cluster); + System.out.println(actual); + assertTrue(actual.contains("\"defaultPort\":80")); + assertTrue(actual.contains("\"defIPPort\":8080")); + assertTrue(actual.contains("\"healthChecker\":{\"type\":\"TCP\"}")); + assertTrue(actual.contains("\"metadata\":{}")); + assertTrue(actual.contains("\"defCkport\":80")); + assertTrue(actual.contains("\"name\":\"nacos-cluster-1\"")); + assertTrue(actual.contains("\"defaultCheckPort\":80")); + assertTrue(actual.contains("\"serviceName\":\"nacos.service.1\"")); + assertTrue(actual.contains("\"useIPPort4Check\":true")); + assertTrue(actual.contains("\"sitegroup\":\"\"")); + assertTrue(actual.contains("\"empty\":true")); + assertFalse(actual.contains("\"service\"")); + + } + + @Test + public void testDeserialize() throws Exception { + String example = "{\"defCkport\":80,\"defIPPort\":8080,\"defaultCheckPort\":80,\"defaultPort\":80,\"empty\":true,\"healthChecker\":{\"type\":\"TCP\"},\"metadata\":{},\"name\":\"nacos-cluster-1\",\"serviceName\":\"nacos.service.1\",\"sitegroup\":\"\",\"useIPPort4Check\":true}"; + Cluster actual = JacksonUtils.toObj(example, Cluster.class); + assertEquals(80, actual.getDefCkport()); + assertEquals(8080, actual.getDefIPPort()); + assertEquals(80, actual.getDefaultCheckPort()); + assertEquals(80, actual.getDefaultPort()); + assertTrue(actual.isEmpty()); + assertTrue(actual.getMetadata().isEmpty()); + assertTrue(actual.isUseIPPort4Check()); + assertEquals("nacos-cluster-1", actual.getName()); + assertEquals("nacos.service.1", actual.getServiceName()); + assertEquals("", actual.getSitegroup()); + assertNull(actual.getHealthCheckTask()); + } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/DomainTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/DomainTest.java index b52203a13ca..e1c3f49b3f3 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/DomainTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/DomainTest.java @@ -15,41 +15,31 @@ */ package com.alibaba.nacos.naming.core; +import com.alibaba.nacos.naming.BaseTest; import com.alibaba.nacos.naming.misc.UtilsAndCommons; -import com.alibaba.nacos.naming.push.PushService; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.Spy; -import org.springframework.context.ApplicationContext; import java.util.ArrayList; import java.util.List; import java.util.Map; -import static org.mockito.Mockito.doReturn; - /** * @author nkorange */ -public class DomainTest { +public class DomainTest extends BaseTest { private Service service; - @Spy - protected ApplicationContext context; - @Mock - protected PushService pushService; @Before public void before() { - MockitoAnnotations.initMocks(this); + super.before(); service = new Service(); service.setName("nacos.service.1"); Cluster cluster = new Cluster(UtilsAndCommons.DEFAULT_CLUSTER_NAME, service); service.addCluster(cluster); - doReturn(pushService).when(context).getBean(PushService.class); + mockInjectPushServer(); } @Test diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/InstanceTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/InstanceTest.java index cca8416331a..a4f1d38c1a7 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/InstanceTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/InstanceTest.java @@ -15,14 +15,18 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.healthcheck.RsInfo; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import java.util.HashMap; import java.util.Map; +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; /** * @author nkorange @@ -42,31 +46,90 @@ public void updateIp() { instance.setPort(1234); instance.setWeight(5); - Assert.assertEquals("1.1.1.1", instance.getIp()); - Assert.assertEquals(1234, instance.getPort()); - Assert.assertEquals(5, instance.getWeight(), 0.001); + assertEquals("1.1.1.1", instance.getIp()); + assertEquals(1234, instance.getPort()); + assertEquals(5, instance.getWeight(), 0.001); + } + + @Test + public void testToJsonWithAllParam() { + instance = new Instance("1.1.1.1", 1234, "TEST", "TENANT", "APP"); + String actual = instance.toJSON(); + assertTrue(actual.contains("\"app\":\"APP\"")); + assertTrue(actual.contains("\"clusterName\":\"TEST\"")); + assertTrue(actual.contains("\"enabled\":true")); + assertTrue(actual.contains("\"ephemeral\":true")); + assertTrue(actual.contains("\"healthy\":true")); + assertTrue(actual.contains("\"instanceHeartBeatInterval\":5000")); + assertTrue(actual.contains("\"instanceHeartBeatTimeOut\":15000")); + assertTrue(actual.contains("\"instanceIdGenerator\":\"simple\"")); + assertTrue(actual.contains("\"ip\":\"1.1.1.1\"")); + assertTrue(actual.contains("\"ipDeleteTimeout\":30000")); + assertTrue(actual.contains("\"lastBeat\":" + instance.getLastBeat())); + assertTrue(actual.contains("\"marked\":false")); + assertTrue(actual.contains("\"metadata\":{}")); + assertTrue(actual.contains("\"port\":1234")); + assertTrue(actual.contains("\"tenant\":\"TENANT\"")); + assertTrue(actual.contains("\"weight\":1.0")); + assertFalse(actual.contains("\"mockValid\"")); + assertFalse(actual.contains("\"failCount\"")); + } + + @Test + public void testToJsonWithoutTenantAndApp() { + instance = new Instance("1.1.1.1", 1234, "TEST"); + String actual = instance.toJSON(); + System.out.println(actual); + assertTrue(actual.contains("\"clusterName\":\"TEST\"")); + assertTrue(actual.contains("\"enabled\":true")); + assertTrue(actual.contains("\"ephemeral\":true")); + assertTrue(actual.contains("\"healthy\":true")); + assertTrue(actual.contains("\"instanceHeartBeatInterval\":5000")); + assertTrue(actual.contains("\"instanceHeartBeatTimeOut\":15000")); + assertTrue(actual.contains("\"instanceIdGenerator\":\"simple\"")); + assertTrue(actual.contains("\"ip\":\"1.1.1.1\"")); + assertTrue(actual.contains("\"ipDeleteTimeout\":30000")); + assertTrue(actual.contains("\"lastBeat\":" + instance.getLastBeat())); + assertTrue(actual.contains("\"marked\":false")); + assertTrue(actual.contains("\"metadata\":{}")); + assertTrue(actual.contains("\"port\":1234")); + assertTrue(actual.contains("\"weight\":1.0")); + assertFalse(actual.contains("\"app\"")); + assertFalse(actual.contains("\"tenant\":")); + assertFalse(actual.contains("\"mockValid\"")); + assertFalse(actual.contains("\"failCount\"")); + } + + @Test + public void testFromJsonByJson() { + instance = Instance.fromJSON("{\"clusterName\":\"TEST\",\"enabled\":true,\"ephemeral\":true,\"healthy\":true,\"instanceHeartBeatInterval\":5000,\"instanceHeartBeatTimeOut\":15000,\"instanceIdGenerator\":\"simple\",\"ip\":\"1.1.1.1\",\"ipDeleteTimeout\":30000,\"lastBeat\":1590043805463,\"marked\":false,\"metadata\":{},\"port\":1234,\"weight\":1.0}\n"); + assertEquals("1.1.1.1", instance.getIp()); + assertEquals(1234, instance.getPort()); + assertEquals("TEST", instance.getClusterName()); + assertNull(instance.getApp()); + assertNull(instance.getTenant()); } @Test - public void fromJson() { + public void testFromJsonByNoJson() { instance = Instance.fromJSON("2.2.2.2:8888_2_TEST1"); - Assert.assertEquals("2.2.2.2", instance.getIp()); - Assert.assertEquals(8888, instance.getPort()); - Assert.assertEquals(2, instance.getWeight(), 0.001); - Assert.assertEquals("TEST1", instance.getClusterName()); + assertEquals("2.2.2.2", instance.getIp()); + assertEquals(8888, instance.getPort()); + assertEquals(2, instance.getWeight(), 0.001); + assertEquals("TEST1", instance.getClusterName()); } @Test - public void rsInfo() { + public void rsInfo() throws Exception { RsInfo info = new RsInfo(); Map metadata = new HashMap<>(); metadata.put("version", "2222"); info.setMetadata(metadata); - System.out.println(JSON.toJSONString(info)); + System.out.println(JacksonUtils.toJson(info)); - String json = JSON.toJSONString(info); - RsInfo info1 = JSON.parseObject(json, RsInfo.class); + String json = JacksonUtils.toJson(info); + RsInfo info1 = JacksonUtils.toObj(json, RsInfo.class); System.out.println(info1); } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/InstancesTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/InstancesTest.java index 630d7d15934..f170d477eaa 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/InstancesTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/InstancesTest.java @@ -16,13 +16,19 @@ package com.alibaba.nacos.naming.core; import org.junit.Test; - import java.math.BigInteger; import java.nio.charset.Charset; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collection; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; +import com.alibaba.nacos.common.utils.JacksonUtils; +import com.alibaba.nacos.common.utils.StringUtils; + +import static org.junit.Assert.assertEquals; /** * @author lkxiaolou @@ -81,6 +87,34 @@ public void run() { assert catchException.get(); } + @Test + public void testToString() { + Instances actual = new Instances(); + Collection instancesCase = createInstancesCase(); + actual.getInstanceList().addAll(instancesCase); + String expected = "{\"instanceList\":[" + StringUtils.join(instancesCase.stream().map(Instance::toJSON).collect(Collectors.toList()), ",") + "]}"; + assertEquals(expected, actual.toString()); + } + + @Test + public void testDeserializeFromJson() throws Exception { + Collection expected = createInstancesCase(); + String instancesJson = "{\"instanceList\":[" + StringUtils.join(expected.stream().map(Instance::toJSON).collect(Collectors.toList()), ",") + "]}"; + Instances actual = JacksonUtils.toObj(instancesJson, Instances.class); + assertEquals(expected, actual.getInstanceList()); + } + + private Collection createInstancesCase() { + Collection result = new ArrayList<>(); + Instance instanceWithBasicParam = new Instance("1.1.1.1", 1111); + Instance instanceWithCluster = new Instance("1.1.1.1", 1112, "TEST"); + Instance instanceWithAllParam = new Instance("1.1.1.1", 1112, "TEST", "TENANT", "APP"); + result.add(instanceWithBasicParam); + result.add(instanceWithCluster); + result.add(instanceWithAllParam); + return result; + } + //@Test // 跑起来比较久,所以注释掉 public void checkSumThreadSafe() throws Exception { diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java index 3c15404678d..f9b45df44b3 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java @@ -17,10 +17,14 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.PreservedMetadataKeys; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.BaseTest; import com.alibaba.nacos.naming.consistency.ConsistencyService; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; +import com.alibaba.nacos.naming.core.ServiceManager.ServiceChecksum; +import com.alibaba.nacos.naming.misc.Message; +import com.alibaba.nacos.naming.misc.Synchronizer; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.google.common.collect.Maps; import org.junit.Assert; @@ -33,6 +37,7 @@ import java.util.List; import java.util.Map; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; /** @@ -46,9 +51,15 @@ public class ServiceManagerTest extends BaseTest { @Mock private ConsistencyService consistencyService; + @Mock + private Synchronizer synchronizer; + @Before public void before() { super.before(); + mockInjectHealthCheckProcessor(); + mockInjectDistroMapper(); + mockInjectSwitchDomain(); } @Test @@ -113,4 +124,26 @@ public void testSnowflakeInstanceId() throws Exception { int instanceId2 = Integer.parseInt(instance2.getInstanceId()); Assert.assertNotEquals(instanceId1, instanceId2); } + + @Test + public void testUpdatedHealthStatus() { + ReflectionTestUtils.setField(serviceManager, "synchronizer", synchronizer); + String namespaceId = "namespaceId"; + String serviceName = "testService"; + String serverIp = "127.0.0.1"; + String example = "{\"ips\":[\"127.0.0.1:8848_true\"]}"; + Message message = new Message(); + message.setData(example); + when(synchronizer.get(serverIp, UtilsAndCommons.assembleFullServiceName(namespaceId, serviceName))).thenReturn(message); + serviceManager.updatedHealthStatus(namespaceId, serviceName, serverIp); + } + + @Test + public void testSerializeServiceChecksum() { + ServiceChecksum checksum = new ServiceChecksum(); + checksum.addItem("test", "1234567890"); + String actual = JacksonUtils.toJson(checksum); + assertTrue(actual.contains("\"namespaceId\":\"public\"")); + assertTrue(actual.contains("\"serviceName2Checksum\":{\"test\":\"1234567890\"}")); + } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java index 354c344b6ae..bc260baa3f1 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java @@ -15,30 +15,42 @@ */ package com.alibaba.nacos.naming.core; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.BaseTest; +import com.alibaba.nacos.naming.selector.NoneSelector; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.mockito.Spy; import java.util.ArrayList; import java.util.List; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + /** * @author jifengnan 2019-04-28 */ public class ServiceTest extends BaseTest { - @Spy + private Service service; @Before public void before() { super.before(); + service = new Service("test-service"); + mockInjectPushServer(); + mockInjectHealthCheckProcessor(); + mockInjectDistroMapper(); + mockInjectSwitchDomain(); } @Test public void testUpdateIPs() { - service.setName("test-service"); List instances = new ArrayList<>(); Instance instance = new Instance("1.1.1.1", 1, "test-instance1"); instances.add(instance); @@ -55,4 +67,63 @@ public void testUpdateIPs() { instances.remove(null); Assert.assertEquals(instances, service.allIPs(true)); } + + @Test + public void testSerialize() throws Exception { + String actual = new Service("test-service").toJSON(); + System.out.println(actual); + assertTrue(actual.contains("\"checksum\":\"394c845e1160bb880e7f26fb2149ed6d\"")); + assertTrue(actual.contains("\"clusterMap\":{}")); + assertTrue(actual.contains("\"empty\":true")); + assertTrue(actual.contains("\"enabled\":true")); + assertTrue(actual.contains("\"finalizeCount\":0")); + assertTrue(actual.contains("\"ipDeleteTimeout\":30000")); + assertTrue(actual.contains("\"lastModifiedMillis\":0")); + assertTrue(actual.contains("\"metadata\":{}")); + assertTrue(actual.contains("\"name\":\"test-service\"")); + assertTrue(actual.contains("\"owners\":[]")); + assertTrue(actual.contains("\"protectThreshold\":0.0")); + assertTrue(actual.contains("\"resetWeight\":false")); + assertTrue(actual.contains("\"selector\":{\"type\":\"none\"}")); + assertFalse(actual.contains("clientBeatCheckTask")); + assertFalse(actual.contains("serviceString")); + assertFalse(actual.contains("pushService")); + } + + @Test + public void testDeserialize() throws Exception { + String example = "{\"checksum\":\"394c845e1160bb880e7f26fb2149ed6d\",\"clusterMap\":{},\"empty\":true,\"enabled\":true,\"finalizeCount\":0,\"ipDeleteTimeout\":30000,\"lastModifiedMillis\":0,\"metadata\":{},\"name\":\"test-service\",\"owners\":[],\"protectThreshold\":0.0,\"resetWeight\":false,\"selector\":{\"type\":\"none\"}}"; + Service actual = JacksonUtils.toObj(example, Service.class); + assertEquals("394c845e1160bb880e7f26fb2149ed6d", actual.getChecksum()); + assertEquals("test-service", actual.getName()); + assertTrue(actual.getClusterMap().isEmpty()); + assertTrue(actual.isEmpty()); + assertTrue(actual.getEnabled()); + assertTrue(actual.getMetadata().isEmpty()); + assertTrue(actual.getOwners().isEmpty()); + assertEquals(0, actual.getFinalizeCount()); + assertEquals(30000, actual.getIpDeleteTimeout()); + assertEquals(0, actual.getLastModifiedMillis()); + assertEquals(0, actual.getLastModifiedMillis()); + assertEquals(0.0, actual.getProtectThreshold(), 0); + assertFalse(actual.getResetWeight()); + assertThat(actual.getSelector(), instanceOf(NoneSelector.class)); + } + + @Test + public void testGetServiceString() { + String actual = service.getServiceString(); + assertTrue(actual.contains("\"invalidIPCount\":0")); + assertTrue(actual.contains("\"name\":\"test-service\"")); + assertTrue(actual.contains("\"ipCount\":0")); + assertTrue(actual.contains("\"owners\":[]")); + assertTrue(actual.contains("\"protectThreshold\":0.0")); + assertTrue(actual.contains("\"clusters\":[]")); + } + + @Test + public void test() { + String a = "{\"appName\":\"\",\"checksum\":\"d9ce515b2d3f26a06cd7ba43a4cba1a7\",\"clusterMap\":{},\"empty\":true,\"enabled\":true,\"finalizeCount\":0,\"groupName\":\"\",\"ipDeleteTimeout\":30000,\"lastModifiedMillis\":1590401570517,\"metadata\":{},\"name\":\"DEFAULT_GROUP@@nacos.test\",\"namespaceId\":\"public\",\"owners\":[],\"protectThreshold\":0.5,\"pushService\":{\"failedPushCount\":0,\"totalPush\":0},\"resetWeight\":false,\"selector\":{\"type\":\"none\"},\"serviceString\":\"{\\\"invalidIPCount\\\":0,\\\"name\\\":\\\"DEFAULT_GROUP@@nacos.test\\\",\\\"ipCount\\\":0,\\\"owners\\\":[],\\\"protectThreshold\\\":0.5,\\\"clusters\\\":[],\\\"token\\\":null}\",\"token\":\"\"}"; +// JacksonUtils.toObj(a, Service.class); + } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/SubscribeManagerTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/SubscribeManagerTest.java index 7ffa0c4c6e7..fb73bfd09d1 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/SubscribeManagerTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/SubscribeManagerTest.java @@ -14,7 +14,9 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.mock.web.MockServletContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.ArrayList; import java.util.List; @@ -23,7 +25,8 @@ * @author Nicholas */ @SpringBootTest -@RunWith(SpringRunner.class) +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = MockServletContext.class) public class SubscribeManagerTest extends BaseTest { @Mock diff --git a/pom.xml b/pom.xml index 0e6c3dbdc53..0e5903bab54 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 2018 com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 pom Alibaba NACOS ${project.version} @@ -35,7 +35,7 @@ git@github.com:alibaba/nacos.git scm:git@github.com:alibaba/nacos.git scm:git@github.com:alibaba/nacos.git - nacos-all-1.3.0-BETA + nacos-all-1.3.0 @@ -89,19 +89,85 @@ UTF-8 UTF-8 - - false - true 1.8 1.8 + + false + true jacoco ${project.basedir}/../test/target/jacoco-it.exec file:**/generated-sources/**,**/test/** - 3.8.0 + + + 2.2 + 1.0.2 + 2.7 + 1.4.1 + 3.5.1 + 2.10.4 + 3.0.1 + 3.8 + 0.12 + 3.0.2 + 4.3.0 + 0.7.8 + 2.20 + 3.0.4 + 3.0.2 + 1.6 + 2.19.1 + 3.0.0 + + 1.0-beta-4 + 1.3.0 + + + 2.1.1.RELEASE + 3.0 + 2.6 + 3.4 + 2.2 + 3.2.2 + 1.2 + 1.4 + 1.2 + 1.7.7 + 1.2.3 + 2.11.2 + 4.4.1 + 4.5 + 4.1.3 + 1.7.17 + 5.1.34 + 10.14.2.0 + 2.1 + 1.0 + 2.9.10 + 2.9.10.4 + 1.9.10 + 0.10.5 + 4.1.42.Final + 4.1.31.Final + 2.0.0-RC1 + 22.0 + 1.2 + 0.4.1 1.24.0 + 1.17.0 + 3.8.0 + 1.24.0 4.0.63 + 0.9.11 + 1.10.19 + 1.3 + 0.5.0 + 7.0.59 + 0.30 + 3.4.2 + 1.3.2.beta1 + 1.3.2.beta1 @@ -111,21 +177,21 @@ org.codehaus.mojo versions-maven-plugin - 2.2 + ${versions-maven-plugin.version} com.github.vongosling dependency-mediator-maven-plugin - 1.0.2 + ${dependency-mediator-maven-plugin.version} org.codehaus.mojo clirr-maven-plugin - 2.7 + ${clirr-maven-plugin.version} maven-enforcer-plugin - 1.4.1 + ${maven-enforcer-plugin.version} enforce-ban-circular-dependencies @@ -144,13 +210,13 @@ org.codehaus.mojo extra-enforcer-rules - 1.0-beta-4 + ${extra-enforcer-rules.version} maven-compiler-plugin - 3.5.1 + ${maven-compiler-plugin.version} ${maven.compiler.source} ${maven.compiler.target} @@ -161,7 +227,7 @@ maven-javadoc-plugin - 2.10.4 + ${maven-javadoc-plugin.version} UTF-8 @@ -176,7 +242,7 @@ maven-source-plugin - 3.0.1 + ${maven-source-plugin.version} attach-sources @@ -189,7 +255,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.8 + ${maven-pmd-plugin.version} rulesets/java/ali-comment.xml @@ -222,17 +288,15 @@ com.alibaba.p3c p3c-pmd - 1.3.0 + ${p3c-pmd.version} org.apache.rat apache-rat-plugin - 0.12 - + ${apache-rat-plugin.version} - .editorconfig .travis.yml @@ -257,7 +321,7 @@ maven-resources-plugin - 3.0.2 + ${maven-resources-plugin.version} ${project.build.sourceEncoding} @@ -266,12 +330,12 @@ org.eluder.coveralls coveralls-maven-plugin - 4.3.0 + ${coveralls-maven-plugin.version} org.jacoco jacoco-maven-plugin - 0.7.8 + ${jacoco-maven-plugin.version} default-prepare-agent @@ -309,7 +373,7 @@ maven-surefire-plugin - 2.20 + ${maven-surefire-plugin.version} 1 true @@ -319,15 +383,19 @@ org.codehaus.mojo findbugs-maven-plugin - 3.0.4 + ${findbugs-maven-plugin.version} org.sonarsource.scanner.maven sonar-maven-plugin - 3.0.2 + ${sonar-maven-plugin.version} + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven-assembly-plugin.version} - @@ -341,7 +409,7 @@ maven-javadoc-plugin - 2.10.4 + ${maven-javadoc-plugin.version} -Xdoclint:none @@ -352,7 +420,7 @@ maven-javadoc-plugin - 2.10.4 + ${maven-javadoc-plugin.version} -Xdoclint:none @@ -377,7 +445,7 @@ maven-gpg-plugin - 1.6 + ${maven-gpg-plugin.version} sign-artifacts @@ -397,7 +465,7 @@ maven-failsafe-plugin - 2.19.1 + ${maven-failsafe-plugin.version} @{failsafeArgLine} -Dnacos.standalone=true @@ -430,7 +498,7 @@ org.codehaus.mojo findbugs-maven-plugin - 3.0.4 + ${findbugs-maven-plugin.version} @@ -471,7 +539,7 @@ org.springframework.boot spring-boot-dependencies - 2.1.1.RELEASE + ${spring-boot-dependencies.version} pom import @@ -549,24 +617,10 @@ ${project.version} - - - com.alibaba - fastjson - 1.2.58 - - - - - - - - - javax.servlet servlet-api - 3.0 + ${servlet-api.version} provided @@ -574,7 +628,7 @@ com.zaxxer HikariCP - 3.4.2 + ${HikariCP.version} @@ -585,86 +639,91 @@ ${hessian.version} + + commons-lang + commons-lang + ${commons-lang.version} + org.apache.commons commons-lang3 - 3.4 + ${commons-lang3.version} commons-io commons-io - 2.2 + ${commons-io.version} commons-collections commons-collections - 3.2.2 + ${commons-collections.version} commons-logging commons-logging - 1.2 + ${commons-logging.version} commons-dbcp commons-dbcp - 1.4 + ${commons-dbcp.version} commons-cli commons-cli - 1.2 + ${commons-cli.version} org.slf4j slf4j-api - 1.7.7 + ${slf4j-api.version} ch.qos.logback logback-classic - 1.2.3 + ${logback.version} ch.qos.logback logback-core - 1.2.3 + ${logback.version} org.apache.logging.log4j log4j-core - 2.11.2 + ${log4j.version} org.apache.logging.log4j log4j-slf4j-impl - 2.11.2 + ${log4j.version} org.apache.httpcomponents httpcore - 4.4.1 + ${httpcore.version} org.apache.httpcomponents httpclient - 4.5 + ${httpclient.version} commons-logging @@ -676,33 +735,33 @@ org.apache.httpcomponents httpasyncclient - 4.1.3 + ${httpasyncclient.version} com.ning async-http-client - 1.7.17 + ${async-http-client.version} mysql mysql-connector-java - 5.1.34 + ${mysql-connector-java.version} org.apache.derby derby - 10.14.2.0 + ${derby.version} com.alipay.sofa jraft-core - 1.3.2.beta1 + ${jraft-core.version} com.alipay.sofa @@ -730,91 +789,91 @@ com.alipay.sofa rpc-grpc-impl - 1.3.2.beta1 + ${rpc-grpc-impl.version} cglib cglib-nodep - 2.1 + ${cglib-nodep.version} net.jcip jcip-annotations - 1.0 + ${jcip-annotations.version} com.fasterxml.jackson.core jackson-core - 2.9.10 + ${jackson-core.version} com.fasterxml.jackson.core jackson-databind - 2.9.10.4 + ${jackson-databind.version} org.codehaus.jackson jackson-core-asl - 1.9.10 + ${jackson-core-asl.version} io.jsonwebtoken jjwt-api - 0.10.5 + ${jjwt.version} io.jsonwebtoken jjwt-impl - 0.10.5 + ${jjwt.version} runtime io.jsonwebtoken jjwt-jackson - 0.10.5 + ${jjwt.version} runtime io.netty netty-all - 4.1.42.Final + ${netty-all.version} io.netty netty-common - 4.1.31.Final + ${netty-common.version} org.apache.mina mina-core - 2.0.0-RC1 + ${mina-core.version} com.google.guava guava - 22.0 + ${guava.version} org.javatuples javatuples - 1.2 + ${javatuples.version} com.github.keran213539 commonOkHttp - 0.4.1 + ${commonOkHttp.version} test @@ -844,7 +903,7 @@ com.google.api.grpc proto-google-common-protos - 1.17.0 + ${proto-google-common-protos.version} @@ -858,9 +917,38 @@ org.reflections reflections - 0.9.11 + ${reflections.version} + + + + org.mockito + mockito-all + ${mockito-all.version} + + + + org.hamcrest + hamcrest-all + ${hamcrest-all.version} + + io.prometheus + simpleclient + ${prometheus-simpleclient.version} + + + + org.apache.tomcat.embed + tomcat-embed-jasper + ${tomcat-embed-jasper.version} + + + + com.google.truth + truth + ${truth.version} + diff --git a/test/pom.xml b/test/pom.xml index c209c7c4162..93a5312b68b 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -17,7 +17,7 @@ com.alibaba.nacos nacos-all - 1.3.0-BETA + 1.3.0 ../pom.xml 4.0.0 @@ -26,7 +26,7 @@ jar nacos-test ${project.version} - http://maven.apache.org + http://nacos.io UTF-8 @@ -50,7 +50,6 @@ com.google.truth truth - 0.30 @@ -122,7 +121,6 @@ org.apache.maven.plugins maven-surefire-plugin - 2.9 -Dnacos.standalone=true methods diff --git a/test/src/test/java/com/alibaba/nacos/test/BaseTest.java b/test/src/test/java/com/alibaba/nacos/test/BaseTest.java index 4731f7227bd..b88465e031a 100644 --- a/test/src/test/java/com/alibaba/nacos/test/BaseTest.java +++ b/test/src/test/java/com/alibaba/nacos/test/BaseTest.java @@ -16,19 +16,23 @@ package com.alibaba.nacos.test; -import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.healthcheck.RsInfo; import org.junit.Test; /** * @author liaochuntao + * @author yangyi + * + * @deprecated It seems no necessary for super test class, will be removed. */ +@Deprecated public class BaseTest { @Test public void test_rs_json() { String json = "{\"cluster\":\"DEFAULT\",\"ip\":\"127.0.0.1\",\"metadata\":{},\"port\":60000,\"scheduled\":true,\"serviceName\":\"DEFAULT_GROUP@@jinhan9J7ye.Vj6hx.net\",\"weight\":1.0}"; - RsInfo client = JSON.parseObject(json, RsInfo.class); + RsInfo client = JacksonUtils.toObj(json, RsInfo.class); System.out.println(client); } diff --git a/test/src/test/java/com/alibaba/nacos/test/common/HttpUtils_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/common/HttpUtils_ITCase.java index 647a7e2ac46..bcd483e56c9 100644 --- a/test/src/test/java/com/alibaba/nacos/test/common/HttpUtils_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/common/HttpUtils_ITCase.java @@ -16,11 +16,11 @@ package com.alibaba.nacos.test.common; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.common.http.HttpUtils; import com.alibaba.nacos.common.http.handler.ResponseHandler; import com.alibaba.nacos.common.http.param.Query; import com.alibaba.nacos.common.model.RestResult; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.utils.ClassUtils; import com.alibaba.nacos.core.utils.GenericType; import org.junit.Assert; @@ -44,7 +44,7 @@ public class HttpUtils_ITCase { @Test public void test_deserialization_type() throws Exception { - String json = JSON.toJSONString(list); + String json = JacksonUtils.toJson(list); ArrayList tmp = ResponseHandler.convert(json, new GenericType>(){}.getType()); Assert.assertEquals(list, tmp); } @@ -58,7 +58,7 @@ public void test_rest_result() throws Exception { @Test public void test_deserialization_class() throws Exception { - String json = JSON.toJSONString(list); + String json = JacksonUtils.toJson(list); ArrayList tmp = ResponseHandler.convert(json, ClassUtils.resolveGenericType(new GenericType>(){}.getClass())); Assert.assertEquals(list, tmp); } diff --git a/test/src/test/java/com/alibaba/nacos/test/common/WatchFileCenter_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/common/WatchFileCenter_ITCase.java index 3c9348417b9..89be3bb7d28 100644 --- a/test/src/test/java/com/alibaba/nacos/test/common/WatchFileCenter_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/common/WatchFileCenter_ITCase.java @@ -16,12 +16,12 @@ package com.alibaba.nacos.test.common; -import com.alibaba.nacos.common.file.FileChangeEvent; -import com.alibaba.nacos.common.file.FileWatcher; -import com.alibaba.nacos.common.file.WatchFileCenter; +import com.alibaba.nacos.core.file.FileChangeEvent; +import com.alibaba.nacos.core.file.FileWatcher; +import com.alibaba.nacos.core.file.WatchFileCenter; import com.alibaba.nacos.common.utils.ByteUtils; import com.alibaba.nacos.common.utils.ConcurrentHashSet; -import com.alibaba.nacos.common.utils.DiskUtils; +import com.alibaba.nacos.core.utils.DiskUtils; import com.alibaba.nacos.common.utils.ThreadUtils; import org.apache.commons.lang3.StringUtils; import org.junit.AfterClass; diff --git a/test/src/test/java/com/alibaba/nacos/test/config/ConfigAPI_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/config/ConfigAPI_ITCase.java index 7b47b24156c..d725382667c 100644 --- a/test/src/test/java/com/alibaba/nacos/test/config/ConfigAPI_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/config/ConfigAPI_ITCase.java @@ -15,7 +15,6 @@ */ package com.alibaba.nacos.test.config; -import com.alibaba.fastjson.JSON; import com.alibaba.nacos.Nacos; import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.PropertyKeyConst; @@ -28,6 +27,7 @@ import com.alibaba.nacos.client.config.http.MetricsHttpAgent; import com.alibaba.nacos.client.config.http.ServerHttpAgent; import com.alibaba.nacos.client.config.impl.HttpSimpleClient.HttpResult; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.ThreadUtils; import org.junit.After; import org.junit.Assert; @@ -84,7 +84,7 @@ public void cleanup() throws Exception { List params = Arrays.asList("dataId", dataId, "group", group, "beta", "true"); result = agent.httpDelete(CONFIG_CONTROLLER_PATH + "/", null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertEquals(true, JSON.parseObject(result.content).getBoolean("data")); + Assert.assertTrue(JacksonUtils.toObj(result.content).get("data").booleanValue()); } catch (Exception e) { e.printStackTrace(); Assert.fail(); @@ -660,7 +660,7 @@ public void nacos_openAPI_detailConfig_1() { result = agent.httpGet(CONFIG_CONTROLLER_PATH, null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertEquals(content, JSON.parseObject(result.content).getString("content")); + Assert.assertEquals(content, JacksonUtils.toObj(result.content).get("content").textValue()); } catch (Exception e) { Assert.fail(); } @@ -688,7 +688,7 @@ public void nacos_openAPI_catalog() { Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); System.out.println(result.content); - Assert.assertNotNull(JSON.parseObject(result.content).getString("data")); + Assert.assertFalse(JacksonUtils.toObj(result.content).get("data").isNull()); } catch (Exception e) { Assert.fail(); @@ -717,7 +717,7 @@ public void nacos_openAPI_queryBeta_1() { List params = Arrays.asList("dataId", dataId, "group", group, "beta", "true"); result = agent.httpGet(CONFIG_CONTROLLER_PATH + "/", null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertEquals(content, JSON.parseObject(result.content).getJSONObject("data").getString("content")); + Assert.assertEquals(content, JacksonUtils.toObj(result.content).get("data").get("content").textValue()); // delete data result = agent.httpDelete(CONFIG_CONTROLLER_PATH + "/", null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); @@ -751,7 +751,7 @@ public void nacos_openAPI_queryBeta_delete() { result = agent.httpDelete(CONFIG_CONTROLLER_PATH + "/", null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertEquals(true, JSON.parseObject(result.content).getBoolean("data")); + Assert.assertTrue(JacksonUtils.toObj(result.content).get("data").booleanValue()); } catch (Exception e) { e.printStackTrace(); Assert.fail(); @@ -780,8 +780,8 @@ public void nacos_openAPI_fuzzySearchConfig() { result = agent.httpGet(CONFIG_CONTROLLER_PATH + "/", null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertTrue(JSON.parseObject(result.content).getIntValue("totalCount") >= 1); - Assert.assertTrue(JSON.parseObject(result.content).getJSONArray("pageItems").getJSONObject(0).getString("content").startsWith(content)); + Assert.assertTrue(JacksonUtils.toObj(result.content).get("totalCount").intValue() >= 1); + Assert.assertTrue(JacksonUtils.toObj(result.content).get("pageItems").get(0).get("content").textValue().startsWith(content)); } catch (Exception e) { Assert.fail(); } @@ -809,8 +809,8 @@ public void nacos_openAPI_fuzzySearchConfig_1() { result = agent.httpGet(CONFIG_CONTROLLER_PATH + "/", null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertTrue(JSON.parseObject(result.content).getIntValue("totalCount") >= 1); - Assert.assertEquals(content, JSON.parseObject(result.content).getJSONArray("pageItems").getJSONObject(0).getString("content")); + Assert.assertTrue(JacksonUtils.toObj(result.content).get("totalCount").intValue() >= 1); + Assert.assertEquals(content, JacksonUtils.toObj(result.content).get("pageItems").get(0).get("content").textValue()); } catch (Exception e) { Assert.fail(); @@ -839,8 +839,8 @@ public void nacos_openAPI_searchConfig() { result = agent.httpGet(CONFIG_CONTROLLER_PATH + "/", null, params, agent.getEncode(), TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertEquals(1, JSON.parseObject(result.content).getIntValue("totalCount")); - Assert.assertEquals(content, JSON.parseObject(result.content).getJSONArray("pageItems").getJSONObject(0).getString("content")); + Assert.assertEquals(1, JacksonUtils.toObj(result.content).get("totalCount").intValue()); + Assert.assertEquals(content, JacksonUtils.toObj(result.content).get("pageItems").get(0).get("content").textValue()); } catch (Exception e) { Assert.fail(); @@ -868,8 +868,8 @@ public void nacos_openAPI_searchConfig_2() { List params = Arrays.asList("dataId", dataId, "group", group, "pageNo","1", "pageSize","10", "search", "accurate"); result = agent.httpGet(CONFIG_CONTROLLER_PATH + "/", null, params, "utf-8", TIME_OUT); Assert.assertEquals(HttpURLConnection.HTTP_OK, result.code); - Assert.assertEquals(1, JSON.parseObject(result.content).getIntValue("totalCount")); - Assert.assertEquals(content, JSON.parseObject(result.content).getJSONArray("pageItems").getJSONObject(0).getString("content")); + Assert.assertEquals(1, JacksonUtils.toObj(result.content).get("totalCount").intValue()); + Assert.assertEquals(content, JacksonUtils.toObj(result.content).get("pageItems").get(0).get("content").textValue()); } catch (Exception e) { Assert.fail(); } diff --git a/test/src/test/java/com/alibaba/nacos/test/config/ConfigBeta_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/config/ConfigBeta_ITCase.java index 0f966cebaf2..5fdee08e6d2 100644 --- a/test/src/test/java/com/alibaba/nacos/test/config/ConfigBeta_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/config/ConfigBeta_ITCase.java @@ -16,11 +16,9 @@ package com.alibaba.nacos.test.config; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.Nacos; -import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.exception.NacosException; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.test.base.Params; import org.junit.Assert; import org.junit.Before; @@ -38,8 +36,6 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.util.UriComponentsBuilder; -import java.util.concurrent.CountDownLatch; - /** * @author xiaochun.xxc * @date 2019-07-03 @@ -151,7 +147,7 @@ public void publishBetaConfig_noBetaIps_beta() throws Exception { String.class, HttpMethod.GET); Assert.assertTrue(response1.getStatusCode().is2xxSuccessful()); - Assert.assertEquals(null, JSONObject.parseObject(response1.getBody()).getString("data")); + Assert.assertTrue(JacksonUtils.toObj(response1.getBody()).get("data").isNull()); } /** @@ -228,7 +224,7 @@ public void getBetaConfig() throws Exception { String.class, HttpMethod.GET); Assert.assertTrue(response1.getStatusCode().is2xxSuccessful()); - Assert.assertEquals("com.dungu.test", JSONObject.parseObject(response1.getBody()).getJSONObject("data").getString("dataId")); + Assert.assertEquals("com.dungu.test", JacksonUtils.toObj(response1.getBody()).get("data").get("dataId").asText()); } /** @@ -265,7 +261,7 @@ public void deleteBetaConfig() throws Exception { String.class, HttpMethod.GET); Assert.assertTrue(response1.getStatusCode().is2xxSuccessful()); - Assert.assertEquals("com.dungu.test", JSONObject.parseObject(response1.getBody()).getJSONObject("data").getString("dataId")); + Assert.assertEquals("com.dungu.test", JacksonUtils.toObj(response1.getBody()).get("data").get("dataId").asText()); ResponseEntity response2 = request(CONFIG_CONTROLLER_PATH + "/configs?beta=true", Params.newParams() @@ -276,7 +272,7 @@ public void deleteBetaConfig() throws Exception { String.class, HttpMethod.DELETE); Assert.assertTrue(response2.getStatusCode().is2xxSuccessful()); - Assert.assertEquals("true", JSONObject.parseObject(response2.getBody()).getString("data")); + Assert.assertEquals("true", JacksonUtils.toObj(response2.getBody()).get("data").asText()); ResponseEntity response3 = request(CONFIG_CONTROLLER_PATH + "/configs?beta=true", Params.newParams() @@ -287,7 +283,7 @@ public void deleteBetaConfig() throws Exception { String.class, HttpMethod.GET); Assert.assertTrue(response3.getStatusCode().is2xxSuccessful()); - Assert.assertEquals(null, JSONObject.parseObject(response3.getBody()).getString("data")); + Assert.assertTrue(JacksonUtils.toObj(response3.getBody()).get("data").isNull()); } @@ -325,7 +321,7 @@ public void deleteBetaConfig_delete_beta_false() throws Exception { String.class, HttpMethod.GET); Assert.assertTrue(response1.getStatusCode().is2xxSuccessful()); - Assert.assertEquals("com.dungu.test", JSONObject.parseObject(response1.getBody()).getJSONObject("data").getString("dataId")); + Assert.assertEquals("com.dungu.test", JacksonUtils.toObj(response1.getBody()).get("data").get("dataId").asText()); ResponseEntity response2 = request(CONFIG_CONTROLLER_PATH + "/configs?beta=false", Params.newParams() @@ -347,7 +343,7 @@ public void deleteBetaConfig_delete_beta_false() throws Exception { String.class, HttpMethod.GET); Assert.assertTrue(response3.getStatusCode().is2xxSuccessful()); - Assert.assertEquals("com.dungu.test", JSONObject.parseObject(response3.getBody()).getJSONObject("data").getString("dataId")); + Assert.assertEquals("com.dungu.test", JacksonUtils.toObj(response3.getBody()).get("data").get("dataId").asText()); } ResponseEntity request(String path, MultiValueMap params, Class clazz, HttpMethod httpMethod) { diff --git a/test/src/test/java/com/alibaba/nacos/test/config/ConfigExportAndImportAPI_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/config/ConfigExportAndImportAPI_ITCase.java index 65e9dfd67db..a1e21e476a0 100644 --- a/test/src/test/java/com/alibaba/nacos/test/config/ConfigExportAndImportAPI_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/config/ConfigExportAndImportAPI_ITCase.java @@ -15,17 +15,15 @@ */ package com.alibaba.nacos.test.config; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.Nacos; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.client.config.http.HttpAgent; import com.alibaba.nacos.client.config.http.MetricsHttpAgent; import com.alibaba.nacos.client.config.http.ServerHttpAgent; import com.alibaba.nacos.client.config.impl.HttpSimpleClient; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.config.server.utils.ZipUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.fasterxml.jackson.databind.JsonNode; import com.github.keran213539.commonOkHttp.CommonOkHttpClient; import com.github.keran213539.commonOkHttp.CommonOkHttpClientBuilder; import com.github.keran213539.commonOkHttp.UploadByteFile; @@ -127,19 +125,19 @@ public void cleanup(){ public void testExportByIds(){ String getDataUrl = "?search=accurate&dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&namespaceId="; String queryResult = httpClient.get(SERVER_ADDR + CONFIG_CONTROLLER_PATH + getDataUrl, null); - JSONObject resultObj = JSON.parseObject(queryResult); - JSONArray resultConfigs = resultObj.getJSONArray("pageItems"); - JSONObject config1 = resultConfigs.getJSONObject(0); - JSONObject config2 = resultConfigs.getJSONObject(1); - String exportByIdsUrl = "?export=true&tenant=&group=&appName=&ids=" + config1.getLongValue("id") - + "," + config2.getLongValue("id"); + JsonNode resultObj = JacksonUtils.toObj(queryResult); + JsonNode resultConfigs = resultObj.get("pageItems"); + JsonNode config1 = resultConfigs.get(0); + JsonNode config2 = resultConfigs.get(1); + String exportByIdsUrl = "?export=true&tenant=&group=&appName=&ids=" + config1.get("id").longValue() + + "," + config2.get("id").longValue(); System.out.println(exportByIdsUrl); byte[] zipData = httpClient.download(SERVER_ADDR + CONFIG_CONTROLLER_PATH + exportByIdsUrl, null); ZipUtils.UnZipResult unZiped = ZipUtils.unzip(zipData); List zipItemList = unZiped.getZipItemList(); Assert.assertEquals(2, zipItemList.size()); - String config1Name = config1.getString("group") + "/" + config1.getString("dataId"); - String config2Name = config2.getString("group") + "/" + config2.getString("dataId"); + String config1Name = config1.get("group").textValue() + "/" + config1.get("dataId").textValue(); + String config2Name = config2.get("group").textValue() + "/" + config2.get("dataId").textValue(); for(ZipUtils.ZipItem zipItem : zipItemList){ if(!(config1Name.equals(zipItem.getItemName()) || config2Name.equals(zipItem.getItemName()))){ Assert.fail(); @@ -151,18 +149,18 @@ public void testExportByIds(){ public void testExportByGroup(){ String getDataUrl = "?search=accurate&dataId=&group=EXPORT_IMPORT_TEST_GROUP&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&namespaceId="; String queryResult = httpClient.get(SERVER_ADDR + CONFIG_CONTROLLER_PATH + getDataUrl, null); - JSONObject resultObj = JSON.parseObject(queryResult); - JSONArray resultConfigs = resultObj.getJSONArray("pageItems"); + JsonNode resultObj = JacksonUtils.toObj(queryResult); + JsonNode resultConfigs = resultObj.get("pageItems"); Assert.assertEquals(2, resultConfigs.size()); - JSONObject config1 = resultConfigs.getJSONObject(0); - JSONObject config2 = resultConfigs.getJSONObject(1); + JsonNode config1 = resultConfigs.get(0); + JsonNode config2 = resultConfigs.get(1); String exportByIdsUrl = "?export=true&tenant=&group=EXPORT_IMPORT_TEST_GROUP&appName=&ids="; byte[] zipData = httpClient.download(SERVER_ADDR + CONFIG_CONTROLLER_PATH + exportByIdsUrl, null); ZipUtils.UnZipResult unZiped = ZipUtils.unzip(zipData); List zipItemList = unZiped.getZipItemList(); Assert.assertEquals(2, zipItemList.size()); - String config1Name = config1.getString("group") + "/" + config1.getString("dataId"); - String config2Name = config2.getString("group") + "/" + config2.getString("dataId"); + String config1Name = config1.get("group").textValue() + "/" + config1.get("dataId").textValue(); + String config2Name = config2.get("group").textValue() + "/" + config2.get("dataId").textValue(); for(ZipUtils.ZipItem zipItem : zipItemList){ if(!(config1Name.equals(zipItem.getItemName()) @@ -182,16 +180,16 @@ public void testExportByGroup(){ public void testExportByGroupAndApp(){ String getDataUrl = "?search=accurate&dataId=&group=EXPORT_IMPORT_TEST_GROUP&appName=testApp1&config_tags=&pageNo=1&pageSize=10&tenant=&namespaceId="; String queryResult = httpClient.get(SERVER_ADDR + CONFIG_CONTROLLER_PATH + getDataUrl, null); - JSONObject resultObj = JSON.parseObject(queryResult); - JSONArray resultConfigs = resultObj.getJSONArray("pageItems"); + JsonNode resultObj = JacksonUtils.toObj(queryResult); + JsonNode resultConfigs = resultObj.get("pageItems"); Assert.assertEquals(1, resultConfigs.size()); - JSONObject config1 = resultConfigs.getJSONObject(0); + JsonNode config1 = resultConfigs.get(0); String exportByIdsUrl = "?export=true&tenant=&group=EXPORT_IMPORT_TEST_GROUP&appName=testApp1&ids="; byte[] zipData = httpClient.download(SERVER_ADDR + CONFIG_CONTROLLER_PATH + exportByIdsUrl, null); ZipUtils.UnZipResult unZiped = ZipUtils.unzip(zipData); List zipItemList = unZiped.getZipItemList(); Assert.assertEquals(1, zipItemList.size()); - String config1Name = config1.getString("group") + "/" + config1.getString("dataId"); + String config1Name = config1.get("group").textValue() + "/" + config1.get("dataId").textValue(); for(ZipUtils.ZipItem zipItem : zipItemList){ if(!config1Name.equals(zipItem.getItemName())){ Assert.fail(); @@ -249,15 +247,15 @@ public void testImport(){ httpClient.post(SERVER_ADDR + CONFIG_CONTROLLER_PATH + importUrl, importPrarm, Collections.singletonList(uploadByteFile), null); String getDataUrl = "?search=accurate&dataId=&group=TEST_IMPORT&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&namespaceId="; String queryResult = httpClient.get(SERVER_ADDR + CONFIG_CONTROLLER_PATH + getDataUrl, null); - JSONObject resultObj = JSON.parseObject(queryResult); - JSONArray resultConfigs = resultObj.getJSONArray("pageItems"); + JsonNode resultObj = JacksonUtils.toObj(queryResult); + JsonNode resultConfigs = resultObj.get("pageItems"); Assert.assertEquals(3, resultConfigs.size()); for(int i = 0; i < resultConfigs.size(); i++){ - JSONObject config = resultConfigs.getJSONObject(i); - if(!"TEST_IMPORT".equals(config.getString("group"))){ + JsonNode config = resultConfigs.get(i); + if(!"TEST_IMPORT".equals(config.get("group").textValue())){ Assert.fail(); } - switch (config.getString("dataId")){ + switch (config.get("dataId").textValue()){ case "test1.yml": case "test2.txt": case "test3.properties": diff --git a/test/src/test/java/com/alibaba/nacos/test/config/SqlContextUtils_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/config/EmbeddedStorageContextUtils_ITCase.java similarity index 81% rename from test/src/test/java/com/alibaba/nacos/test/config/SqlContextUtils_ITCase.java rename to test/src/test/java/com/alibaba/nacos/test/config/EmbeddedStorageContextUtils_ITCase.java index 348ec9d2328..f463a84a251 100644 --- a/test/src/test/java/com/alibaba/nacos/test/config/SqlContextUtils_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/config/EmbeddedStorageContextUtils_ITCase.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.test.config; import com.alibaba.nacos.config.server.service.sql.ModifyRequest; -import com.alibaba.nacos.config.server.service.sql.SqlContextUtils; +import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; import org.junit.Assert; import org.junit.Test; @@ -29,7 +29,7 @@ /** * @author liaochuntao */ -public class SqlContextUtils_ITCase { +public class EmbeddedStorageContextUtils_ITCase { @Test public void test_multi_thread_sql_contexts() throws Exception { @@ -40,10 +40,10 @@ public void test_multi_thread_sql_contexts() throws Exception { final int j = i; service.submit(() -> { try { - SqlContextUtils.addSqlContext("test_" + j, j); - SqlContextUtils.addSqlContext("test_" + j * 10, j); + EmbeddedStorageContextUtils.addSqlContext("test_" + j, j); + EmbeddedStorageContextUtils.addSqlContext("test_" + j * 10, j); - List list = SqlContextUtils.getCurrentSqlContext(); + List list = EmbeddedStorageContextUtils.getCurrentSqlContext(); System.out.println(list); Assert.assertEquals("test_" + j, list.get(0).getSql()); Assert.assertEquals("test_" + j * 10, list.get(0).getSql()); diff --git a/test/src/test/java/com/alibaba/nacos/test/core/BaseClusterTest.java b/test/src/test/java/com/alibaba/nacos/test/core/BaseClusterTest.java index 844f07f25a3..498caedefa0 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/BaseClusterTest.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/BaseClusterTest.java @@ -22,11 +22,11 @@ import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.common.http.HttpClientManager; import com.alibaba.nacos.common.http.NSyncHttpClient; -import com.alibaba.nacos.common.utils.DiskUtils; +import com.alibaba.nacos.core.utils.DiskUtils; import com.alibaba.nacos.config.server.model.event.RaftDBErrorEvent; import com.alibaba.nacos.config.server.service.repository.DistributedDatabaseOperateImpl; import com.alibaba.nacos.consistency.cp.CPProtocol; -import com.alibaba.nacos.consistency.cp.Constants; +import com.alibaba.nacos.consistency.cp.MetadataKey; import com.alibaba.nacos.core.notify.Event; import com.alibaba.nacos.core.notify.NotifyCenter; import com.alibaba.nacos.core.notify.listener.Subscribe; @@ -201,7 +201,7 @@ private static void run(final int index, final CountDownLatch latch, final Class CPProtocol protocol = context.getBean(CPProtocol.class); protocol.protocolMetaData() - .subscribe(operate.group(), Constants.LEADER_META_DATA, + .subscribe(operate.group(), MetadataKey.LEADER_META_DATA, (o, arg) -> { System.out.println("node : 884" + (7 + index) + "-> select leader is : " + arg); if (finished[index].compareAndSet(false, true)) { diff --git a/test/src/test/java/com/alibaba/nacos/test/core/InetUtils_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/InetUtils_ITCase.java index ef3c7113d6d..48eeab2e6c7 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/InetUtils_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/InetUtils_ITCase.java @@ -37,6 +37,8 @@ public class InetUtils_ITCase { static { System.setProperty("nacos.core.inet.auto-refresh", "3"); + // For load InetUtils.class + InetUtils.getSelfIp(); } @Test diff --git a/test/src/test/java/com/alibaba/nacos/test/core/JscksonUtils.java b/test/src/test/java/com/alibaba/nacos/test/core/JacksonUtils.java similarity index 99% rename from test/src/test/java/com/alibaba/nacos/test/core/JscksonUtils.java rename to test/src/test/java/com/alibaba/nacos/test/core/JacksonUtils.java index 55baa14b3f3..c1f7cd4a885 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/JscksonUtils.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/JacksonUtils.java @@ -46,7 +46,7 @@ /** * @author liaochuntao */ -public class JscksonUtils { +public class JacksonUtils { static ObjectMapper mapper = new ObjectMapper(); diff --git a/test/src/test/java/com/alibaba/nacos/test/core/SnakeFlowerIdGenerator_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/SnowFlowerIdGenerator_ITCase.java similarity index 80% rename from test/src/test/java/com/alibaba/nacos/test/core/SnakeFlowerIdGenerator_ITCase.java rename to test/src/test/java/com/alibaba/nacos/test/core/SnowFlowerIdGenerator_ITCase.java index c2e7aad7c64..002695ecd41 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/SnakeFlowerIdGenerator_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/SnowFlowerIdGenerator_ITCase.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.test.core; -import com.alibaba.nacos.core.distributed.id.SnakeFlowerIdGenerator; +import com.alibaba.nacos.core.distributed.id.SnowFlowerIdGenerator; import com.alibaba.nacos.core.utils.ApplicationUtils; import org.junit.Assert; import org.junit.Test; @@ -25,14 +25,14 @@ /** * @author liaochuntao */ -public class SnakeFlowerIdGenerator_ITCase { +public class SnowFlowerIdGenerator_ITCase { @Test public void test_idGenerator() { ApplicationUtils.injectEnvironment(new StandardEnvironment()); - SnakeFlowerIdGenerator generator1 = new SnakeFlowerIdGenerator(); - SnakeFlowerIdGenerator generator2 = new SnakeFlowerIdGenerator(); - SnakeFlowerIdGenerator generator3 = new SnakeFlowerIdGenerator(); + SnowFlowerIdGenerator generator1 = new SnowFlowerIdGenerator(); + SnowFlowerIdGenerator generator2 = new SnowFlowerIdGenerator(); + SnowFlowerIdGenerator generator3 = new SnowFlowerIdGenerator(); generator1.initialize(1); generator2.initialize(2); diff --git a/test/src/test/java/com/alibaba/nacos/test/core/auth/AuthBase.java b/test/src/test/java/com/alibaba/nacos/test/core/auth/AuthBase.java index dfec773ba40..306007880c5 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/auth/AuthBase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/auth/AuthBase.java @@ -15,12 +15,13 @@ */ package com.alibaba.nacos.test.core.auth; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.PropertyKeyConst; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.auth.AuthConfigs; import com.alibaba.nacos.test.base.HttpClient4Test; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.Assert; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -66,9 +67,9 @@ public String login() { HttpMethod.POST); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertTrue(json.containsKey("accessToken")); - return json.getString("accessToken"); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertTrue(json.has("accessToken")); + return json.get("accessToken").textValue(); } protected void init(int port) throws Exception { diff --git a/test/src/test/java/com/alibaba/nacos/test/core/auth/Permission_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/auth/Permission_ITCase.java index cfa01a46606..61c343db7f0 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/auth/Permission_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/auth/Permission_ITCase.java @@ -15,16 +15,15 @@ */ package com.alibaba.nacos.test.core.auth; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; import com.alibaba.nacos.Nacos; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.config.server.model.Page; import com.alibaba.nacos.core.auth.Permission; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.test.base.HttpClient4Test; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -125,9 +124,9 @@ public void login() { HttpMethod.POST); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertTrue(json.containsKey("accessToken")); - accessToken = json.getString("accessToken"); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertTrue(json.has("accessToken")); + accessToken = json.get("accessToken").textValue(); } @Test @@ -196,10 +195,10 @@ public void createDeleteQueryPermission() { String.class, HttpMethod.GET); + System.out.println(response); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - Page permissionPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + Page permissionPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(permissionPage); Assert.assertNotNull(permissionPage.getPageItems()); @@ -245,8 +244,7 @@ public void createDeleteQueryPermission() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - permissionPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + permissionPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(permissionPage); Assert.assertNotNull(permissionPage.getPageItems()); @@ -291,8 +289,7 @@ public void createDeleteQueryPermission() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - permissionPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + permissionPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(permissionPage); Assert.assertNotNull(permissionPage.getPageItems()); diff --git a/test/src/test/java/com/alibaba/nacos/test/core/auth/Role_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/auth/Role_ITCase.java index 3e810d422b8..bffa892075b 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/auth/Role_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/auth/Role_ITCase.java @@ -15,16 +15,15 @@ */ package com.alibaba.nacos.test.core.auth; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; import com.alibaba.nacos.Nacos; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.config.server.auth.RoleInfo; import com.alibaba.nacos.config.server.model.Page; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.test.base.HttpClient4Test; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -111,9 +110,9 @@ public void login() { HttpMethod.POST); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertTrue(json.containsKey("accessToken")); - accessToken = json.getString("accessToken"); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertTrue(json.has("accessToken")); + accessToken = json.get("accessToken").textValue(); } @Test @@ -158,8 +157,7 @@ public void createDeleteQueryRole() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - Page roleInfoPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + Page roleInfoPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(roleInfoPage); Assert.assertNotNull(roleInfoPage.getPageItems()); @@ -197,8 +195,7 @@ public void createDeleteQueryRole() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - roleInfoPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + roleInfoPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(roleInfoPage); Assert.assertNotNull(roleInfoPage.getPageItems()); @@ -243,8 +240,7 @@ public void createDeleteQueryRole() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - roleInfoPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + roleInfoPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(roleInfoPage); Assert.assertNotNull(roleInfoPage.getPageItems()); @@ -286,8 +282,7 @@ public void createDeleteQueryRole() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - roleInfoPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + roleInfoPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(roleInfoPage); Assert.assertNotNull(roleInfoPage.getPageItems()); diff --git a/test/src/test/java/com/alibaba/nacos/test/core/auth/User_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/auth/User_ITCase.java index a470ca1118b..f2e53363fd9 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/auth/User_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/auth/User_ITCase.java @@ -15,16 +15,16 @@ */ package com.alibaba.nacos.test.core.auth; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; import com.alibaba.nacos.Nacos; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.config.server.model.Page; import com.alibaba.nacos.config.server.model.User; import com.alibaba.nacos.console.utils.PasswordEncoderUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.test.base.HttpClient4Test; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -88,9 +88,9 @@ public void login() { HttpMethod.POST); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertTrue(json.containsKey("accessToken")); - accessToken = json.getString("accessToken"); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertTrue(json.has("accessToken")); + accessToken = json.get("accessToken").textValue(); } @Test @@ -121,8 +121,7 @@ public void createUpdateDeleteUser() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - Page userPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + Page userPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(userPage); Assert.assertNotNull(userPage.getPageItems()); @@ -159,8 +158,7 @@ public void createUpdateDeleteUser() { .done(), String.class); - userPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + userPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(userPage); Assert.assertNotNull(userPage.getPageItems()); @@ -198,8 +196,7 @@ public void createUpdateDeleteUser() { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - userPage = JSON.parseObject(response.getBody(), new TypeReference>() { - }); + userPage = JacksonUtils.toObj(response.getBody(), new TypeReference>() {}); Assert.assertNotNull(userPage); Assert.assertNotNull(userPage.getPageItems()); diff --git a/test/src/test/java/com/alibaba/nacos/test/core/cluster/MemberLookup_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/cluster/MemberLookup_ITCase.java index 3d5224fbb91..485bd42fae9 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/cluster/MemberLookup_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/cluster/MemberLookup_ITCase.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.test.core.cluster; import com.alibaba.nacos.api.exception.NacosException; -import com.alibaba.nacos.common.utils.DiskUtils; +import com.alibaba.nacos.core.utils.DiskUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup; @@ -55,19 +55,13 @@ public class MemberLookup_ITCase extends BaseTest { static final String name = "cluster.conf"; - static final ServerMemberManager memberManager = new ServerMemberManager( - new MockServletContext()); + ServerMemberManager memberManager; @Before public void before() throws Exception { System.setProperty("nacos.home", path); ApplicationUtils.injectEnvironment(new StandardEnvironment()); ApplicationUtils.setIsStandalone(false); - try { - memberManager.init(); - } - catch (Throwable ignore) { - } System.out.println(ApplicationUtils.getStandaloneMode()); System.out.println(Arrays.toString(LookupFactory.LookupType.values())); @@ -78,6 +72,14 @@ public void before() throws Exception { String ip = InetUtils.getSelfIp(); DiskUtils.writeFile(file, (ip + ":8848," + ip + ":8847," + ip + ":8849").getBytes( StandardCharsets.UTF_8), false); + + try { + memberManager = new ServerMemberManager( + new MockServletContext()); + } + catch (Exception e) { + e.printStackTrace(); + } } @After diff --git a/test/src/test/java/com/alibaba/nacos/test/core/cluster/ServerMemberManager_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/cluster/ServerMemberManager_ITCase.java index aa6bae3b963..06816837964 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/cluster/ServerMemberManager_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/cluster/ServerMemberManager_ITCase.java @@ -48,13 +48,21 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ServerMemberManager_ITCase { - private ServerMemberManager memberManager = new ServerMemberManager(new MockServletContext()); + private ServerMemberManager memberManager; + + { + try { + memberManager = new ServerMemberManager(new MockServletContext()); + } + catch (Exception e) { + e.printStackTrace(); + } + } @Before public void init() throws Exception { ApplicationUtils.setIsStandalone(true); ApplicationUtils.injectEnvironment(new StandardEnvironment()); - memberManager.init(); } @After diff --git a/test/src/test/java/com/alibaba/nacos/test/core/notify/NotifyCenter_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/core/notify/NotifyCenter_ITCase.java index f18877d1d1d..fb49b4d96c0 100644 --- a/test/src/test/java/com/alibaba/nacos/test/core/notify/NotifyCenter_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/core/notify/NotifyCenter_ITCase.java @@ -47,7 +47,7 @@ private static class TestEvent implements Event { } static { - System.setProperty("com.alibaba.nacos.core.notify.shareBufferSize", "8"); + System.setProperty("nacos.core.notify.share-buffer-size", "8"); } @Test @@ -215,19 +215,20 @@ public void setInfo(String info) { } } - @Test(timeout = 10_000L) + @Test public void test_k_two_slowEvent() throws Exception { NotifyCenter.registerToSharePublisher(SlowE1.class); NotifyCenter.registerToSharePublisher(SlowE2.class); - CountDownLatch latch1 = new CountDownLatch(30); - CountDownLatch latch2 = new CountDownLatch(30); + CountDownLatch latch1 = new CountDownLatch(15); + CountDownLatch latch2 = new CountDownLatch(15); String[] values = new String[] {null, null}; NotifyCenter.registerSubscribe(new Subscribe() { @Override public void onEvent(SlowE1 event) { + ThreadUtils.sleep(1000L); System.out.println(event); values[0] = event.info; latch1.countDown(); diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/CPInstancesAPI_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/naming/CPInstancesAPI_ITCase.java index 643e0c479cf..674493b96fd 100644 --- a/test/src/test/java/com/alibaba/nacos/test/naming/CPInstancesAPI_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/naming/CPInstancesAPI_ITCase.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.test.naming; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.Nacos; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.common.Constants; @@ -24,8 +22,10 @@ import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ListView; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -223,9 +223,9 @@ public void getService() throws Exception { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(serviceName, json.getString("name")); - Assert.assertEquals("0.5", json.getString("protectThreshold")); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(serviceName, json.get("name").textValue()); + Assert.assertEquals("0.5", json.get("protectThreshold").asText()); namingServiceDelete(serviceName, TEST_NAMESPACE_1); } @@ -271,9 +271,9 @@ public void listService() throws Exception { System.out.println("json = " + response.getBody()); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - int count = json.getIntValue("count"); - Assert.assertEquals(listView.getCount()+1, count); + JsonNode json = JacksonUtils.toObj(response.getBody()); + int count = json.get("count").intValue(); + Assert.assertEquals(listView.getCount() + 1, count); namingServiceDelete(serviceName, Constants.DEFAULT_NAMESPACE_ID); } @@ -297,8 +297,8 @@ public void registerInstance_api() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); instanceDeregister(serviceName, Constants.DEFAULT_NAMESPACE_ID, "33.33.33.33", TEST_PORT2_4_DOM_1); @@ -351,8 +351,8 @@ public void registerInstance_2() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); instanceDeregister(serviceName, Constants.DEFAULT_NAMESPACE_ID, "33.33.33.33", TEST_PORT2_4_DOM_1); instanceDeregister(serviceName, Constants.DEFAULT_NAMESPACE_ID, TEST_GROUP_1, "22.22.22.22", TEST_PORT2_4_DOM_1); diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java index 5511ffeb1ba..11c37f47e1a 100644 --- a/test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java @@ -15,14 +15,15 @@ */ package com.alibaba.nacos.test.naming; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.Nacos; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.NamingFactory; import com.alibaba.nacos.api.naming.NamingService; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + import org.junit.*; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -100,14 +101,14 @@ public void cmdb_getInstanceList_1() throws Exception { TimeUnit.SECONDS.sleep(5L); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1"); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -121,8 +122,8 @@ public void cmdb_getInstanceList_1() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + Assert.assertEquals(1, result.get("hosts").size()); } @@ -150,14 +151,14 @@ public void cmdb_getInstanceList_2() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1"); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -170,8 +171,8 @@ public void cmdb_getInstanceList_2() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - Assert.assertEquals(6, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + Assert.assertEquals(6, result.get("hosts").size()); } /** @@ -198,7 +199,7 @@ public void cmdb_getInstanceList_3() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); @@ -206,7 +207,7 @@ public void cmdb_getInstanceList_3() throws Exception { Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -220,9 +221,9 @@ public void cmdb_getInstanceList_3() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - System.out.println("instance list = " + json); - Assert.assertEquals(2, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + System.out.println("instance list = " + result); + Assert.assertEquals(2, result.get("hosts").size()); } /** @@ -250,14 +251,14 @@ public void cmdb_getInstanceList_4() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -270,7 +271,7 @@ public void cmdb_getInstanceList_4() throws Exception { .done(), String.class, HttpMethod.GET); - System.out.println("service list = " + JSON.parseObject(httpResult.getBody())); + System.out.println("service list = " + JacksonUtils.toObj(httpResult.getBody())); httpResult = request("/nacos/v1/ns/instance/list", Params.newParams() @@ -280,10 +281,9 @@ public void cmdb_getInstanceList_4() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - - System.out.println("instance list = " + json); - Assert.assertEquals(2, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + System.out.println("instance list = " + result); + Assert.assertEquals(2, result.get("hosts").size()); } @@ -312,14 +312,14 @@ public void cmdb_getInstanceList_5() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -333,9 +333,9 @@ public void cmdb_getInstanceList_5() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - System.out.println("instance list = " + json); - Assert.assertEquals(6, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + System.out.println("instance list = " + result); + Assert.assertEquals(6, result.get("hosts").size()); } /** @@ -363,14 +363,14 @@ public void cmdb_getInstanceList_6() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -384,10 +384,10 @@ public void cmdb_getInstanceList_6() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); - System.out.println("instance list = " + json); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + System.out.println("instance list = " + result); + Assert.assertEquals(1, result.get("hosts").size()); } /** @@ -416,7 +416,7 @@ public void cmdb_getInstanceList_7() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); List params = Arrays.asList("serviceName", serviceName, "protectThreshold", "0", "selector", json.toString()); @@ -426,7 +426,7 @@ public void cmdb_getInstanceList_7() throws Exception { Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -440,9 +440,9 @@ public void cmdb_getInstanceList_7() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - System.out.println("instance list = " + json); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + System.out.println("instance list = " + result); + Assert.assertEquals(1, json.get("hosts").size()); httpResult = request("/nacos/v1/ns/service", Params.newParams() @@ -462,10 +462,10 @@ public void cmdb_getInstanceList_7() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); + result = JacksonUtils.toObj(httpResult.getBody()); - System.out.println("instance list = " + json); - Assert.assertEquals(6, json.getJSONArray("hosts").size()); + System.out.println("instance list = " + result); + Assert.assertEquals(6, result.get("hosts").size()); } @@ -494,14 +494,14 @@ public void cmdb_getInstanceList_8() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", ""); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -515,9 +515,9 @@ public void cmdb_getInstanceList_8() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - System.out.println("instance list = " + json); - Assert.assertEquals(6, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + System.out.println("instance list = " + result); + Assert.assertEquals(6, result.get("hosts").size()); } /** @@ -546,14 +546,14 @@ public void cmdb_getInstanceList_9() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label"); json.put("expression", ""); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); @@ -567,9 +567,9 @@ public void cmdb_getInstanceList_9() throws Exception { String.class, HttpMethod.GET); Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); - json = JSON.parseObject(httpResult.getBody()); - System.out.println("instance list = " + json); - Assert.assertEquals(6, json.getJSONArray("hosts").size()); + JsonNode result = JacksonUtils.toObj(httpResult.getBody()); + System.out.println("instance list = " + result); + Assert.assertEquals(6, result.get("hosts").size()); } /** @@ -597,14 +597,14 @@ public void cmdb_getInstanceList_10() throws Exception { TimeUnit.SECONDS.sleep(10); - JSONObject json = new JSONObject(); + ObjectNode json = JacksonUtils.createEmptyJsonNode(); json.put("type", "label1"); json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); ResponseEntity httpResult = request("/nacos/v1/ns/service", Params.newParams() .appendParam("serviceName", serviceName) .appendParam("protectThreshold", "0") - .appendParam("selector", json.toJSONString()) + .appendParam("selector", json.toString()) .done(), String.class, HttpMethod.PUT); diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/MultiTenant_InstanceAPI_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/naming/MultiTenant_InstanceAPI_ITCase.java index 283af2c694e..47b4e4b55db 100644 --- a/test/src/test/java/com/alibaba/nacos/test/naming/MultiTenant_InstanceAPI_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/naming/MultiTenant_InstanceAPI_ITCase.java @@ -1,7 +1,5 @@ package com.alibaba.nacos.test.naming; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.Nacos; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.common.Constants; @@ -9,8 +7,10 @@ import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.client.naming.NacosNamingService; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -109,9 +109,9 @@ public void multipleTenant_listInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); + JsonNode json = JacksonUtils.toObj(response.getBody()); - Assert.assertEquals("11.11.11.11", json.getJSONArray("hosts").getJSONObject(0).getString("ip")); + Assert.assertEquals("11.11.11.11", json.get("hosts").get(0).get("ip").asText()); response = request(url, Params.newParams() @@ -119,9 +119,9 @@ public void multipleTenant_listInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - json = JSON.parseObject(response.getBody()); + json = JacksonUtils.toObj(response.getBody()); - Assert.assertEquals(2, json.getJSONArray("hosts").size()); + Assert.assertEquals(2, json.get("hosts").size()); } /** @@ -151,9 +151,9 @@ public void multipleTenant_group_listInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); + JsonNode json = JacksonUtils.toObj(response.getBody()); - Assert.assertEquals("11.11.11.11", json.getJSONArray("hosts").getJSONObject(0).getString("ip")); + Assert.assertEquals("11.11.11.11", json.get("hosts").get(0).get("ip").asText()); response = request(url, Params.newParams() @@ -162,10 +162,10 @@ public void multipleTenant_group_listInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - json = JSON.parseObject(response.getBody()); + json = JacksonUtils.toObj(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); - Assert.assertEquals("33.33.33.33", json.getJSONArray("hosts").getJSONObject(0).getString("ip")); + Assert.assertEquals(1, json.get("hosts").size()); + Assert.assertEquals("33.33.33.33", json.get("hosts").get(0).get("ip").asText()); } /** @@ -204,9 +204,9 @@ public void multipleTenant_getInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); - Assert.assertEquals("33.33.33.33", json.getJSONArray("hosts").getJSONObject(0).getString("ip")); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); + Assert.assertEquals("33.33.33.33", json.get("hosts").get(0).get("ip").asText()); } /** @@ -246,9 +246,9 @@ public void multipleTenant_group_getInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); - Assert.assertEquals("44.44.44.44", json.getJSONArray("hosts").getJSONObject(0).getString("ip")); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); + Assert.assertEquals("44.44.44.44", json.get("hosts").get(0).get("ip").asText()); } /** @@ -290,8 +290,8 @@ public void multipleTenant_deleteInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(2, json.getJSONArray("hosts").size()); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(2, json.get("hosts").size()); } /** @@ -334,8 +334,8 @@ public void multipleTenant_group_deleteInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(0, json.getJSONArray("hosts").size()); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(0, json.get("hosts").size()); } /** @@ -373,8 +373,8 @@ public void multipleTenant_putInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); //namespace-2个数 response = request("/nacos/v1/ns/instance/list", @@ -384,9 +384,9 @@ public void multipleTenant_putInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - json = JSON.parseObject(response.getBody()); + json = JacksonUtils.toObj(response.getBody()); System.out.println(json); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + Assert.assertEquals(1, json.get("hosts").size()); } /** @@ -424,9 +424,9 @@ public void multipleTenant_group_putInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); - Assert.assertEquals("8.0", json.getJSONArray("hosts").getJSONObject(0).getString("weight")); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); + Assert.assertEquals("8.0", json.get("hosts").get(0).get("weight").asText()); } /** @@ -476,9 +476,9 @@ public void multipleTenant_group_patchInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); - Assert.assertEquals("8.0", json.getJSONArray("hosts").getJSONObject(0).getString("weight")); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); + Assert.assertEquals("8.0", json.get("hosts").get(0).get("weight").asText()); } /** @@ -517,8 +517,8 @@ public void multipleTenant_updateInstance_notExsitInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(2, json.getJSONArray("hosts").size()); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(2, json.get("hosts").size()); //namespace-2个数 response = request("/nacos/v1/ns/instance/list", @@ -528,8 +528,8 @@ public void multipleTenant_updateInstance_notExsitInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); } /** @@ -565,8 +565,8 @@ public void multipleTenant_group_updateInstance_notExsitInstance() throws Except .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals("33.33.33.33", json.getJSONArray("hosts").getJSONObject(0).getString("ip")); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals("33.33.33.33", json.get("hosts").get(0).get("ip").asText()); } /** @@ -603,8 +603,8 @@ public void multipleTenant_updateInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); //namespace-2个数 response = request("/nacos/v1/ns/instance/list", @@ -614,8 +614,8 @@ public void multipleTenant_updateInstance() throws Exception { .done(), String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - json = JSON.parseObject(response.getBody()); - Assert.assertEquals(1, json.getJSONArray("hosts").size()); + json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(1, json.get("hosts").size()); } private void verifyInstanceListForNaming(NamingService naming, int size, String serviceName) throws Exception { diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/RandomUtils.java b/test/src/test/java/com/alibaba/nacos/test/naming/RandomUtils.java index 34463aee847..cc2079e109e 100644 --- a/test/src/test/java/com/alibaba/nacos/test/naming/RandomUtils.java +++ b/test/src/test/java/com/alibaba/nacos/test/naming/RandomUtils.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.test.naming; -import com.alibaba.nacos.test.BaseTest; - import java.util.*; /** @@ -25,7 +23,7 @@ * @author wangtong.wt * @date 2018/6/20 */ -public class RandomUtils extends BaseTest { +public class RandomUtils { private static Random rd = new Random(); private static int UNICODE_START = 19968; private static int UNICODE_END = 40864; diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/RestAPI_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/naming/RestAPI_ITCase.java index e08660a0812..48d0ff0bd05 100644 --- a/test/src/test/java/com/alibaba/nacos/test/naming/RestAPI_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/naming/RestAPI_ITCase.java @@ -15,11 +15,11 @@ */ package com.alibaba.nacos.test.naming; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.Nacos; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.*; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; @@ -63,11 +63,11 @@ public void metrics() throws Exception { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertTrue(json.getIntValue("serviceCount") > 0); - Assert.assertTrue(json.getIntValue("instanceCount") > 0); - Assert.assertTrue(json.getIntValue("responsibleServiceCount") > 0); - Assert.assertTrue(json.getIntValue("responsibleInstanceCount") > 0); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertTrue(json.get("serviceCount").asInt() > 0); + Assert.assertTrue(json.get("instanceCount").asInt() > 0); + Assert.assertTrue(json.get("responsibleServiceCount").asInt() > 0); + Assert.assertTrue(json.get("responsibleInstanceCount").asInt() > 0); } /** @@ -119,8 +119,8 @@ public void getService() throws Exception { Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - Assert.assertEquals(serviceName, json.getString("name")); + JsonNode json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(serviceName, json.get("name").asText()); namingServiceDelete(serviceName); } @@ -143,8 +143,8 @@ public void listService() throws Exception { String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); - int count = json.getIntValue("count"); + JsonNode json = JacksonUtils.toObj(response.getBody()); + int count = json.get("count").asInt(); Assert.assertTrue(count >= 0); response = request(NamingBase.NAMING_CONTROLLER_PATH + "/service", @@ -166,8 +166,8 @@ public void listService() throws Exception { String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - json = JSON.parseObject(response.getBody()); - Assert.assertEquals(count + 1, json.getIntValue("count")); + json = JacksonUtils.toObj(response.getBody()); + Assert.assertEquals(count + 1, json.get("count").asInt()); namingServiceDelete(serviceName); } @@ -211,9 +211,9 @@ public void updateService() throws Exception { String.class); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject json = JSON.parseObject(response.getBody()); + JsonNode json = JacksonUtils.toObj(response.getBody()); System.out.println(json); - Assert.assertEquals(0.3f, json.getFloatValue("protectThreshold"), 0.0f); + Assert.assertEquals(0.3f, json.get("protectThreshold").floatValue(), 0.0f); namingServiceDelete(serviceName); } diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/Subscribe_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/naming/Subscribe_ITCase.java index def237b05dd..77b9be11f7f 100644 --- a/test/src/test/java/com/alibaba/nacos/test/naming/Subscribe_ITCase.java +++ b/test/src/test/java/com/alibaba/nacos/test/naming/Subscribe_ITCase.java @@ -15,8 +15,6 @@ */ package com.alibaba.nacos.test.naming; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.Nacos; import com.alibaba.nacos.api.naming.NamingFactory; import com.alibaba.nacos.api.naming.NamingService; @@ -24,8 +22,10 @@ import com.alibaba.nacos.api.naming.listener.EventListener; import com.alibaba.nacos.api.naming.listener.NamingEvent; import com.alibaba.nacos.api.naming.pojo.Instance; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.test.base.Params; +import com.fasterxml.jackson.databind.JsonNode; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -227,9 +227,9 @@ public void onEvent(Event event) { HttpMethod.GET); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - JSONObject body = JSON.parseObject(response.getBody()); + JsonNode body = JacksonUtils.toObj(response.getBody()); - Assert.assertEquals(1, body.getJSONArray("subscribers").size()); + Assert.assertEquals(1, body.get("subscribers").size()); NamingService naming2 = NamingFactory.createNamingService("127.0.0.1" + ":" + port); @@ -254,9 +254,9 @@ public void onEvent(Event event) { HttpMethod.GET); Assert.assertTrue(response.getStatusCode().is2xxSuccessful()); - body = JSON.parseObject(response.getBody()); + body = JacksonUtils.toObj(response.getBody()); - Assert.assertEquals(2, body.getJSONArray("subscribers").size()); + Assert.assertEquals(2, body.get("subscribers").size()); } }