content: /*
   * Copyright (C) 2006 The Android Open Source Project
   *
   * 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 android.telephony;
  
  import android.annotation.IntDef;
  import android.annotation.NonNull;
  import android.annotation.SystemApi;
  import android.content.Context;
  import android.os.PersistableBundle;
  
  import com.android.internal.util.ArrayUtils;
  
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  import java.util.Arrays;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Set;
  
  /**
   * Returned as the reason for a data connection failure as defined by modem and some local errors.
   * @hide
   */
  @SystemApi
  public final class DataFailCause {
      /** There is no failure */
      public static final int NONE = 0;
  
      // This series of errors as specified by the standards
      // specified in ril.h
      /** Operator determined barring. (no retry) */
      public static final int OPERATOR_BARRED = 0x08;
      /** NAS signalling. */
      public static final int NAS_SIGNALLING = 0x0E;
      /** Logical Link Control (LLC) Sub Network Dependent Convergence Protocol (SNDCP). */
      public static final int LLC_SNDCP = 0x19;
      /** Insufficient resources. */
      public static final int INSUFFICIENT_RESOURCES = 0x1A;
      /** Missing or unknown APN. */
      public static final int MISSING_UNKNOWN_APN = 0x1B;              /* no retry */
      /** Unknown Packet Data Protocol (PDP) address type. */
      public static final int UNKNOWN_PDP_ADDRESS_TYPE = 0x1C;         /* no retry */
      /** User authentication. */
      public static final int USER_AUTHENTICATION = 0x1D;              /* no retry */
      /** Activation rejected by Gateway GPRS Support Node (GGSN), Serving Gateway or PDN Gateway. */
      public static final int ACTIVATION_REJECT_GGSN = 0x1E;           /* no retry */
      /** Activation rejected, unspecified. */
      public static final int ACTIVATION_REJECT_UNSPECIFIED = 0x1F;
      /** Service option not supported. */
      public static final int SERVICE_OPTION_NOT_SUPPORTED = 0x20;     /* no retry */
      /** Requested service option not subscribed. */
      public static final int SERVICE_OPTION_NOT_SUBSCRIBED = 0x21;    /* no retry */
      /** Service option temporarily out of order. */
      public static final int SERVICE_OPTION_OUT_OF_ORDER = 0x22;
      /** The Network Service Access Point Identifier (NSAPI) is in use. */
      public static final int NSAPI_IN_USE = 0x23;                     /* no retry */
      /* possibly restart radio, based on config */
      /** Regular deactivation. */
      public static final int REGULAR_DEACTIVATION = 0x24;
      /** Quality of service (QoS) is not accepted. */
      public static final int QOS_NOT_ACCEPTED = 0x25;
      /** Network Failure. */
      public static final int NETWORK_FAILURE = 0x26;
      /** Universal Mobile Telecommunications System (UMTS) reactivation request. */
      public static final int UMTS_REACTIVATION_REQ = 0x27;
      /** Feature not supported. */
      public static final int FEATURE_NOT_SUPP = 0x28;
      /** Semantic error in the Traffic flow templates (TFT) operation. */
      public static final int TFT_SEMANTIC_ERROR = 0x29;
      /** Syntactical error in the Traffic flow templates (TFT) operation. */
      public static final int TFT_SYTAX_ERROR = 0x2A;
      /** Unknown Packet Data Protocol (PDP) context. */
      public static final int UNKNOWN_PDP_CONTEXT = 0x2B;
      /** Semantic errors in packet filter. */
      public static final int FILTER_SEMANTIC_ERROR = 0x2C;
      /** Syntactical errors in packet filter(s). */
      public static final int FILTER_SYTAX_ERROR = 0x2D;
      /** Packet Data Protocol (PDP) without active traffic flow template (TFT). */
      public static final int PDP_WITHOUT_ACTIVE_TFT = 0x2E;
      /**
       * UE requested to modify QoS parameters or the bearer control mode, which is not compatible
       * with the selected bearer control mode.
       */
      public static final int ACTIVATION_REJECTED_BCM_VIOLATION = 0x30;
      /** Packet Data Protocol (PDP) type IPv4 only allowed. */
      public static final int ONLY_IPV4_ALLOWED = 0x32;                /* no retry */
      /** Packet Data Protocol (PDP) type IPv6 only allowed. */
      public static final int ONLY_IPV6_ALLOWED = 0x33;                /* no retry */
      /** Single address bearers only allowed. */
      public static final int ONLY_SINGLE_BEARER_ALLOWED = 0x34;
      /** EPS Session Management (ESM) information is not received. */
      public static final int ESM_INFO_NOT_RECEIVED = 0x35;
      /** PDN connection does not exist. */
      public static final int PDN_CONN_DOES_NOT_EXIST = 0x36;
      /** Multiple connections to a same PDN is not allowed. */
      public static final int MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED = 0x37;
      /**
       * Network has already initiated the activation, modification, or deactivation of bearer
       * resources that was requested by the UE.
       */
      public static final int COLLISION_WITH_NETWORK_INITIATED_REQUEST = 0x38;
      /**
       * Network supports IPv4v6 PDP type only. Non-IP type is not allowed. In LTE mode of operation,
       * this is a PDN throttling cause code, meaning the UE may throttle further requests to the
       * same APN.
       */
      public static final int ONLY_IPV4V6_ALLOWED = 0x39;
      /**
       * Network supports non-IP PDP type only. IPv4, IPv6 and IPv4v6 is not allowed. In LTE mode of
       * operation, this is a PDN throttling cause code, meaning the UE can throttle further requests
       * to the same APN.
       */
      public static final int ONLY_NON_IP_ALLOWED = 0x3A;
      /** QCI (QoS Class Identifier) indicated in the UE request cannot be supported. */
      public static final int UNSUPPORTED_QCI_VALUE = 0x3B;
      /** Procedure requested by the UE was rejected because the bearer handling is not supported. */
      public static final int BEARER_HANDLING_NOT_SUPPORTED = 0x3C;
      /** Max number of Packet Data Protocol (PDP) context reached. */
      public static final int ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED = 0x41;
      /** Unsupported APN in current public land mobile network (PLMN). */
      public static final int UNSUPPORTED_APN_IN_CURRENT_PLMN = 0x42;
      /** Invalid transaction id. */
      public static final int INVALID_TRANSACTION_ID = 0x51;
      /** Incorrect message semantic. */
      public static final int MESSAGE_INCORRECT_SEMANTIC = 0x5F;
      /** Invalid mandatory information. */
      public static final int INVALID_MANDATORY_INFO = 0x60;
      /** Unsupported message type. */
      public static final int MESSAGE_TYPE_UNSUPPORTED = 0x61;
      /** Message type uncompatible. */
      public static final int MSG_TYPE_NONCOMPATIBLE_STATE = 0x62;
      /** Unknown info element. */
      public static final int UNKNOWN_INFO_ELEMENT = 0x63;
      /** Conditional Information Element (IE) error. */
      public static final int CONDITIONAL_IE_ERROR = 0x64;
      /** Message and protocol state uncompatible. */
      public static final int MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE = 0x65;
      /** Protocol errors. */
      public static final int PROTOCOL_ERRORS = 0x6F;                  /* no retry */
      /** APN type conflict. */
      public static final int APN_TYPE_CONFLICT = 0x70;
      /** Invalid Proxy-Call Session Control Function (P-CSCF) address. */
      public static final int INVALID_PCSCF_ADDR = 0x71;
      /** Internal data call preempt by high priority APN. */
      public static final int INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN = 0x72;
      /** EPS (Evolved Packet System) Mobility Management (EMM) access barred. */
      public static final int EMM_ACCESS_BARRED = 0x73;
      /** Emergency interface only. */
      public static final int EMERGENCY_IFACE_ONLY = 0x74;
      /** Interface mismatch. */
      public static final int IFACE_MISMATCH = 0x75;
      /** Companion interface in use. */
      public static final int COMPANION_IFACE_IN_USE = 0x76;
      /** IP address mismatch. */
      public static final int IP_ADDRESS_MISMATCH = 0x77;
      public static final int IFACE_AND_POL_FAMILY_MISMATCH = 0x78;
      /** EPS (Evolved Packet System) Mobility Management (EMM) access barred infinity retry. **/
      public static final int EMM_ACCESS_BARRED_INFINITE_RETRY = 0x79;
      /** Authentication failure on emergency call. */
      public static final int AUTH_FAILURE_ON_EMERGENCY_CALL = 0x7A;
      /** Not receiving a DNS address that was mandatory. */
      public static final int INVALID_DNS_ADDR = 0x7B;
      /** Not receiving either a PCSCF or a DNS address, one of them being mandatory. */
      public static final int INVALID_PCSCF_OR_DNS_ADDRESS = 0x7C;
      /** Emergency call bring up on a different ePDG. */
      public static final int CALL_PREEMPT_BY_EMERGENCY_APN = 0x7F;
      /** UE performs a detach or disconnect PDN action based on TE requirements. */
      public static final int UE_INITIATED_DETACH_OR_DISCONNECT = 0x80;
  
      /** Reason unspecified for foreign agent rejected MIP (Mobile IP) registration. */
      public static final int MIP_FA_REASON_UNSPECIFIED = 0x7D0;
      /** Foreign agent administratively prohibited MIP (Mobile IP) registration. */
      public static final int MIP_FA_ADMIN_PROHIBITED = 0x7D1;
      /** Foreign agent rejected MIP (Mobile IP) registration because of insufficient resources. */
      public static final int MIP_FA_INSUFFICIENT_RESOURCES = 0x7D2;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of MN-AAA authenticator was
       * wrong.
       */
      public static final int MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE = 0x7D3;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of home agent authentication
       * failure.
       */
      public static final int MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE = 0x7D4;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of requested lifetime was too
       * long.
       */
      public static final int MIP_FA_REQUESTED_LIFETIME_TOO_LONG = 0x7D5;
      /** Foreign agent rejected MIP (Mobile IP) registration because of malformed request. */
      public static final int MIP_FA_MALFORMED_REQUEST = 0x7D6;
      /** Foreign agent rejected MIP (Mobile IP) registration because of malformed reply. */
      public static final int MIP_FA_MALFORMED_REPLY = 0x7D7;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of requested encapsulation was
       * unavailable.
       */
      public static final int MIP_FA_ENCAPSULATION_UNAVAILABLE = 0x7D8;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration of VJ Header Compression was
       * unavailable.
       */
      public static final int MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE = 0x7D9;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of reverse tunnel was
       * unavailable.
       */
      public static final int MIP_FA_REVERSE_TUNNEL_UNAVAILABLE = 0x7DA;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of reverse tunnel was mandatory
       * but not requested by device.
       */
      public static final int MIP_FA_REVERSE_TUNNEL_IS_MANDATORY = 0x7DB;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of delivery style was not
       * supported.
       */
      public static final int MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED = 0x7DC;
      /**
       * Foreign agent rejected MIP (Mobile IP) registration because of missing NAI (Network Access
       * Identifier).
       */
      public static final int MIP_FA_MISSING_NAI = 0x7DD;
      /** Foreign agent rejected MIP (Mobile IP) registration because of missing Home Agent. */
      public static final int MIP_FA_MISSING_HOME_AGENT = 0x7DE;
      /** Foreign agent rejected MIP (Mobile IP) registration because of missing Home Address. */
      public static final int MIP_FA_MISSING_HOME_ADDRESS = 0x7DF;
      /** Foreign agent rejected MIP (Mobile IP) registration because of unknown challenge. */
      public static final int MIP_FA_UNKNOWN_CHALLENGE = 0x7E0;
      /** Foreign agent rejected MIP (Mobile IP) registration because of missing challenge. */
      public static final int MIP_FA_MISSING_CHALLENGE = 0x7E1;
      /** Foreign agent rejected MIP (Mobile IP) registration because of stale challenge. */
      public static final int MIP_FA_STALE_CHALLENGE = 0x7E2;
      /** Reason unspecified for home agent rejected MIP (Mobile IP) registration. */
      public static final int MIP_HA_REASON_UNSPECIFIED = 0x7E3;
      /** Home agent administratively prohibited MIP (Mobile IP) registration. */
      public static final int MIP_HA_ADMIN_PROHIBITED = 0x7E4;
      /** Home agent rejected MIP (Mobile IP) registration because of insufficient resources. */
      public static final int MIP_HA_INSUFFICIENT_RESOURCES = 0x7E5;
      /**
       * Home agent rejected MIP (Mobile IP) registration because of MN-HA authenticator was
       * wrong.
       */
      public static final int MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE = 0x7E6;
      /**
       * Home agent rejected MIP (Mobile IP) registration because of foreign agent authentication
       * failure.
       */
      public static final int MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE = 0x7E7;
      /** Home agent rejected MIP (Mobile IP) registration because of registration id mismatch. */
      public static final int MIP_HA_REGISTRATION_ID_MISMATCH = 0x7E8;
      /** Home agent rejected MIP (Mobile IP) registration because of malformed request. */
      public static final int MIP_HA_MALFORMED_REQUEST = 0x7E9;
      /** Home agent rejected MIP (Mobile IP) registration because of unknown home agent address. */
      public static final int MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS = 0x7EA;
      /**
       * Home agent rejected MIP (Mobile IP) registration because of reverse tunnel was
       * unavailable.
       */
      public static final int MIP_HA_REVERSE_TUNNEL_UNAVAILABLE = 0x7EB;
      /**
       * Home agent rejected MIP (Mobile IP) registration because of reverse tunnel is mandatory but
       * not requested by device.
       */
      public static final int MIP_HA_REVERSE_TUNNEL_IS_MANDATORY = 0x7EC;
      /** Home agent rejected MIP (Mobile IP) registration because of encapsulation unavailable. */
      public static final int MIP_HA_ENCAPSULATION_UNAVAILABLE = 0x7ED;
      /** Tearing down is in progress. */
      public static final int CLOSE_IN_PROGRESS = 0x7EE;
      /** Brought down by the network. */
      public static final int NETWORK_INITIATED_TERMINATION = 0x7EF;
      /** Another application in modem preempts the data call. */
      public static final int MODEM_APP_PREEMPTED = 0x7F0;
      /**
       * IPV4 PDN is in throttled state due to network providing only IPV6 address during the
       * previous VSNCP bringup (subs_limited_to_v6).
       */
      public static final int PDN_IPV4_CALL_DISALLOWED = 0x7F1;
      /** IPV4 PDN is in throttled state due to previous VSNCP bringup failure(s). */
      public static final int PDN_IPV4_CALL_THROTTLED = 0x7F2;
      /**
       * IPV6 PDN is in throttled state due to network providing only IPV4 address during the
       * previous VSNCP bringup (subs_limited_to_v4).
       */
      public static final int PDN_IPV6_CALL_DISALLOWED = 0x7F3;
      /** IPV6 PDN is in throttled state due to previous VSNCP bringup failure(s). */
      public static final int PDN_IPV6_CALL_THROTTLED = 0x7F4;
      /** Modem restart. */
      public static final int MODEM_RESTART = 0x7F5;
      /** PDP PPP calls are not supported. */
      public static final int PDP_PPP_NOT_SUPPORTED = 0x7F6;
      /** RAT on which the data call is attempted/connected is no longer the preferred RAT. */
      public static final int UNPREFERRED_RAT = 0x7F7;
      /** Physical link is in the process of cleanup. */
      public static final int PHYSICAL_LINK_CLOSE_IN_PROGRESS = 0x7F8;
      /** Interface bring up is attempted for an APN that is yet to be handed over to target RAT. */
      public static final int APN_PENDING_HANDOVER = 0x7F9;
      /** APN bearer type in the profile does not match preferred network mode. */
      public static final int PROFILE_BEARER_INCOMPATIBLE = 0x7FA;
      /** Card was refreshed or removed. */
      public static final int SIM_CARD_CHANGED = 0x7FB;
      /** Device is going into lower power mode or powering down. */
      public static final int LOW_POWER_MODE_OR_POWERING_DOWN = 0x7FC;
      /** APN has been disabled. */
      public static final int APN_DISABLED = 0x7FD;
      /** Maximum PPP inactivity timer expired. */
      public static final int MAX_PPP_INACTIVITY_TIMER_EXPIRED = 0x7FE;
      /** IPv6 address transfer failed. */
      public static final int IPV6_ADDRESS_TRANSFER_FAILED = 0x7FF;
      /** Target RAT swap failed. */
      public static final int TRAT_SWAP_FAILED = 0x800;
      /** Device falls back from eHRPD to HRPD. */
      public static final int EHRPD_TO_HRPD_FALLBACK = 0x801;
      /**
       * UE is in MIP-only configuration but the MIP configuration fails on call bring up due to
       * incorrect provisioning.
       */
      public static final int MIP_CONFIG_FAILURE = 0x802;
      /**
       * PDN inactivity timer expired due to no data transmission in a configurable duration of time.
       */
      public static final int PDN_INACTIVITY_TIMER_EXPIRED = 0x803;
      /**
       * IPv4 data call bring up is rejected because the UE already maintains the allotted maximum
       * number of IPv4 data connections.
       */
      public static final int MAX_IPV4_CONNECTIONS = 0x804;
      /**
       * IPv6 data call bring up is rejected because the UE already maintains the allotted maximum
       * number of IPv6 data connections.
       */
      public static final int MAX_IPV6_CONNECTIONS = 0x805;
      /**
       * New PDN bring up is rejected during interface selection because the UE has already allotted
       * the available interfaces for other PDNs.
       */
      public static final int APN_MISMATCH = 0x806;
      /**
       * New call bring up is rejected since the existing data call IP type doesn't match the
       * requested IP.
       */
      public static final int IP_VERSION_MISMATCH = 0x807;
      /** Dial up networking (DUN) call bring up is rejected since UE is in eHRPD RAT. */
      public static final int DUN_CALL_DISALLOWED = 0x808;
      /*** Rejected/Brought down since UE is transition between EPC and NONEPC RAT. */
      public static final int INTERNAL_EPC_NONEPC_TRANSITION = 0x809;
      /** The current interface is being in use. */
      public static final int INTERFACE_IN_USE = 0x80A;
      /** PDN connection to the APN is disallowed on the roaming network. */
      public static final int APN_DISALLOWED_ON_ROAMING = 0x80B;
      /** APN-related parameters are changed. */
      public static final int APN_PARAMETERS_CHANGED = 0x80C;
      /** PDN is attempted to be brought up with NULL APN but NULL APN is not supported. */
      public static final int NULL_APN_DISALLOWED = 0x80D;
      /**
       * Thermal level increases and causes calls to be torn down when normal mode of operation is
       * not allowed.
       */
      public static final int THERMAL_MITIGATION = 0x80E;
      /**
       * PDN Connection to a given APN is disallowed because data is disabled from the device user
       * interface settings.
       */
      public static final int DATA_SETTINGS_DISABLED = 0x80F;
      /**
       * PDN Connection to a given APN is disallowed because data roaming is disabled from the device
       * user interface settings and the UE is roaming.
       */
      public static final int DATA_ROAMING_SETTINGS_DISABLED = 0x810;
      /** DDS (Default data subscription) switch occurs. */
      public static final int DDS_SWITCHED = 0x811;
      /** PDN being brought up with an APN that is part of forbidden APN Name list. */
      public static final int FORBIDDEN_APN_NAME = 0x812;
      /** Default data subscription switch is in progress. */
      public static final int DDS_SWITCH_IN_PROGRESS = 0x813;
      /** Roaming is disallowed during call bring up. */
      public static final int CALL_DISALLOWED_IN_ROAMING = 0x814;
      /**
       * UE is unable to bring up a non-IP data call because the device is not camped on a NB1 cell.
       */
      public static final int NON_IP_NOT_SUPPORTED = 0x815;
      /** Non-IP PDN is in throttled state due to previous VSNCP bringup failure(s). */
      public static final int PDN_NON_IP_CALL_THROTTLED = 0x816;
      /** Non-IP PDN is in disallowed state due to the network providing only an IP address. */
      public static final int PDN_NON_IP_CALL_DISALLOWED = 0x817;
      /** Device in CDMA locked state. */
      public static final int CDMA_LOCK = 0x818;
      /** Received an intercept order from the base station. */
      public static final int CDMA_INTERCEPT = 0x819;
      /** Receiving a reorder from the base station. */
      public static final int CDMA_REORDER = 0x81A;
      /** Receiving a release from the base station with a SO (Service Option) Reject reason. */
      public static final int CDMA_RELEASE_DUE_TO_SO_REJECTION = 0x81B;
      /** Receiving an incoming call from the base station. */
      public static final int CDMA_INCOMING_CALL = 0x81C;
      /** Received an alert stop from the base station due to incoming only. */
      public static final int CDMA_ALERT_STOP = 0x81D;
      /**
       * Channel acquisition failures. This indicates that device has failed acquiring all the
       * channels in the PRL.
       */
      public static final int CHANNEL_ACQUISITION_FAILURE = 0x81E;
      /** Maximum access probes transmitted. */
      public static final int MAX_ACCESS_PROBE = 0x81F;
      /** Concurrent service is not supported by base station. */
      public static final int CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION = 0x820;
      /** There was no response received from the base station. */
      public static final int NO_RESPONSE_FROM_BASE_STATION = 0x821;
      /** The base station rejecting the call. */
      public static final int REJECTED_BY_BASE_STATION = 0x822;
      /** The concurrent services requested were not compatible. */
      public static final int CONCURRENT_SERVICES_INCOMPATIBLE = 0x823;
      /** Device does not have CDMA service. */
      public static final int NO_CDMA_SERVICE = 0x824;
      /** RUIM not being present. */
      public static final int RUIM_NOT_PRESENT = 0x825;
      /** Receiving a retry order from the base station. */
      public static final int CDMA_RETRY_ORDER = 0x826;
      /** Access blocked by the base station. */
      public static final int ACCESS_BLOCK = 0x827;
      /** Access blocked by the base station for all mobile devices. */
      public static final int ACCESS_BLOCK_ALL = 0x828;
      /** Maximum access probes for the IS-707B call. */
      public static final int IS707B_MAX_ACCESS_PROBES = 0x829;
      /** Put device in thermal emergency. */
      public static final int THERMAL_EMERGENCY = 0x82A;
      /** In favor of a voice call or SMS when concurrent voice and data are not supported. */
      public static final int CONCURRENT_SERVICES_NOT_ALLOWED = 0x82B;
      /** The other clients rejected incoming call. */
      public static final int INCOMING_CALL_REJECTED = 0x82C;
      /** No service on the gateway. */
      public static final int NO_SERVICE_ON_GATEWAY = 0x82D;
      /** GPRS context is not available. */
      public static final int NO_GPRS_CONTEXT = 0x82E;
      /**
       * Network refuses service to the MS because either an identity of the MS is not acceptable to
       * the network or the MS does not pass the authentication check.
       */
      public static final int ILLEGAL_MS = 0x82F;
      /** ME could not be authenticated and the ME used is not acceptable to the network. */
      public static final int ILLEGAL_ME = 0x830;
      /** Not allowed to operate either GPRS or non-GPRS services. */
      public static final int GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED = 0x831;
      /** MS is not allowed to operate GPRS services. */
      public static final int GPRS_SERVICES_NOT_ALLOWED = 0x832;
      /** No matching identity or context could be found in the network. */
      public static final int MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK = 0x833;
      /**
       * Mobile reachable timer has expired, or the GMM context data related to the subscription does
       * not exist in the SGSN.
       */
      public static final int IMPLICITLY_DETACHED = 0x834;
      /**
       * UE requests GPRS service, or the network initiates a detach request in a PLMN which does not
       * offer roaming for GPRS services to that MS.
       */
      public static final int PLMN_NOT_ALLOWED = 0x835;
      /**
       * MS requests service, or the network initiates a detach request, in a location area where the
       * HPLMN determines that the MS, by subscription, is not allowed to operate.
       */
      public static final int LOCATION_AREA_NOT_ALLOWED = 0x836;
      /**
       * UE requests GPRS service or the network initiates a detach request in a PLMN that does not
       * offer roaming for GPRS services.
       */
      public static final int GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN = 0x837;
      /** PDP context already exists. */
      public static final int PDP_DUPLICATE = 0x838;
      /** RAT change on the UE. */
      public static final int UE_RAT_CHANGE = 0x839;
      /** Network cannot serve a request from the MS due to congestion. */
      public static final int CONGESTION = 0x83A;
      /**
       * MS requests an establishment of the radio access bearers for all active PDP contexts by
       * sending a service request message indicating data to the network, but the SGSN does not have
       * any active PDP context.
       */
      public static final int NO_PDP_CONTEXT_ACTIVATED = 0x83B;
      /** Access class blocking restrictions for the current camped cell. */
      public static final int ACCESS_CLASS_DSAC_REJECTION = 0x83C;
      /** SM attempts PDP activation for a maximum of four attempts. */
      public static final int PDP_ACTIVATE_MAX_RETRY_FAILED = 0x83D;
      /** Radio access bearer failure. */
      public static final int RADIO_ACCESS_BEARER_FAILURE = 0x83E;
      /** Invalid EPS bearer identity in the request. */
      public static final int ESM_UNKNOWN_EPS_BEARER_CONTEXT = 0x83F;
      /** Data radio bearer is released by the RRC. */
      public static final int DRB_RELEASED_BY_RRC = 0x840;
      /** Indicate the connection was released. */
      public static final int CONNECTION_RELEASED = 0x841;
      /** UE is detached. */
      public static final int EMM_DETACHED = 0x842;
      /** Attach procedure is rejected by the network. */
      public static final int EMM_ATTACH_FAILED = 0x843;
      /** Attach procedure is started for EMC purposes. */
      public static final int EMM_ATTACH_STARTED = 0x844;
      /** Service request procedure failure. */
      public static final int LTE_NAS_SERVICE_REQUEST_FAILED = 0x845;
      /** Active dedicated bearer was requested using the same default bearer ID. */
      public static final int DUPLICATE_BEARER_ID = 0x846;
      /** Collision scenarios for the UE and network-initiated procedures. */
      public static final int ESM_COLLISION_SCENARIOS = 0x847;
      /** Bearer must be deactivated to synchronize with the network. */
      public static final int ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK = 0x848;
      /** Active dedicated bearer was requested for an existing default bearer. */
      public static final int ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER = 0x849;
      /** Bad OTA message is received from the network. */
      public static final int ESM_BAD_OTA_MESSAGE = 0x84A;
      /** Download server rejected the call. */
      public static final int ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL = 0x84B;
      /** PDN was disconnected by the downlaod server due to IRAT. */
      public static final int ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT = 0x84C;
      /** Dedicated bearer will be deactivated regardless of the network response. */
      public static final int DS_EXPLICIT_DEACTIVATION = 0x84D;
      /** No specific local cause is mentioned, usually a valid OTA cause. */
      public static final int ESM_LOCAL_CAUSE_NONE = 0x84E;
      /** Throttling is not needed for this service request failure. */
      public static final int LTE_THROTTLING_NOT_REQUIRED = 0x84F;
      /** Access control list check failure at the lower layer. */
      public static final int ACCESS_CONTROL_LIST_CHECK_FAILURE = 0x850;
      /** Service is not allowed on the requested PLMN. */
      public static final int SERVICE_NOT_ALLOWED_ON_PLMN = 0x851;
      /** T3417 timer expiration of the service request procedure. */
      public static final int EMM_T3417_EXPIRED = 0x852;
      /** Extended service request fails due to expiration of the T3417 EXT timer. */
      public static final int EMM_T3417_EXT_EXPIRED = 0x853;
      /** Transmission failure of radio resource control (RRC) uplink data. */
      public static final int RRC_UPLINK_DATA_TRANSMISSION_FAILURE = 0x854;
      /** Radio resource control (RRC) uplink data delivery failed due to a handover. */
      public static final int RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER = 0x855;
      /** Radio resource control (RRC) uplink data delivery failed due to a connection release. */
      public static final int RRC_UPLINK_CONNECTION_RELEASE = 0x856;
      /** Radio resource control (RRC) uplink data delivery failed due to a radio link failure. */
      public static final int RRC_UPLINK_RADIO_LINK_FAILURE = 0x857;
      /**
       * Radio resource control (RRC) is not connected but the non-access stratum (NAS) sends an
       * uplink data request.
       */
      public static final int RRC_UPLINK_ERROR_REQUEST_FROM_NAS = 0x858;
      /** Radio resource control (RRC) connection failure at access stratum. */
      public static final int RRC_CONNECTION_ACCESS_STRATUM_FAILURE = 0x859;
      /**
       * Radio resource control (RRC) connection establishment is aborted due to another procedure.
       */
      public static final int RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS = 0x85A;
      /** Radio resource control (RRC) connection establishment failed due to access barrred. */
      public static final int RRC_CONNECTION_ACCESS_BARRED = 0x85B;
      /**
       * Radio resource control (RRC) connection establishment failed due to cell reselection at
       * access stratum.
       */
      public static final int RRC_CONNECTION_CELL_RESELECTION = 0x85C;
      /**
       * Connection establishment failed due to configuration failure at the radio resource control
       * (RRC).
       */
      public static final int RRC_CONNECTION_CONFIG_FAILURE = 0x85D;
      /** Radio resource control (RRC) connection could not be established in the time limit. */
      public static final int RRC_CONNECTION_TIMER_EXPIRED = 0x85E;
      /**
       * Connection establishment failed due to a link failure at the radio resource control (RRC).
       */
      public static final int RRC_CONNECTION_LINK_FAILURE = 0x85F;
      /**
       * Connection establishment failed as the radio resource control (RRC) is not camped on any
       * cell.
       */
      public static final int RRC_CONNECTION_CELL_NOT_CAMPED = 0x860;
      /**
       * Connection establishment failed due to a service interval failure at the radio resource
       * control (RRC).
       */
      public static final int RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE = 0x861;
      /**
       * Radio resource control (RRC) connection establishment failed due to the network rejecting
       * the UE connection request.
       */
      public static final int RRC_CONNECTION_REJECT_BY_NETWORK = 0x862;
      /** Normal radio resource control (RRC) connection release. */
      public static final int RRC_CONNECTION_NORMAL_RELEASE = 0x863;
      /**
       * Radio resource control (RRC) connection release failed due to radio link failure conditions.
       */
      public static final int RRC_CONNECTION_RADIO_LINK_FAILURE = 0x864;
      /** Radio resource control (RRC) connection re-establishment failure. */
      public static final int RRC_CONNECTION_REESTABLISHMENT_FAILURE = 0x865;
      /** UE is out of service during the call register. */
      public static final int RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER = 0x866;
      /**
       * Connection has been released by the radio resource control (RRC) due to an abort request.
       */
      public static final int RRC_CONNECTION_ABORT_REQUEST = 0x867;
      /**
       * Radio resource control (RRC) connection released due to a system information block read
       * error.
       */
      public static final int RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR = 0x868;
      /** Network-initiated detach with reattach. */
      public static final int NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH = 0x869;
      /** Network-initiated detach without reattach. */
      public static final int NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH = 0x86A;
      /** ESM procedure maximum attempt timeout failure. */
      public static final int ESM_PROCEDURE_TIME_OUT = 0x86B;
      /**
       * No PDP exists with the given connection ID while modifying or deactivating or activation for
       * an already active PDP.
       */
      public static final int INVALID_CONNECTION_ID = 0x86C;
      /** Maximum NSAPIs have been exceeded during PDP activation. */
      public static final int MAXIMIUM_NSAPIS_EXCEEDED = 0x86D;
      /** Primary context for NSAPI does not exist. */
      public static final int INVALID_PRIMARY_NSAPI = 0x86E;
      /** Unable to encode the OTA message for MT PDP or deactivate PDP. */
      public static final int CANNOT_ENCODE_OTA_MESSAGE = 0x86F;
      /**
       * Radio access bearer is not established by the lower layers during activation, modification,
       * or deactivation.
       */
      public static final int RADIO_ACCESS_BEARER_SETUP_FAILURE = 0x870;
      /** Expiration of the PDP establish timer with a maximum of five retries. */
      public static final int PDP_ESTABLISH_TIMEOUT_EXPIRED = 0x871;
      /** Expiration of the PDP modify timer with a maximum of four retries. */
      public static final int PDP_MODIFY_TIMEOUT_EXPIRED = 0x872;
      /** Expiration of the PDP deactivate timer with a maximum of four retries. */
      public static final int PDP_INACTIVE_TIMEOUT_EXPIRED = 0x873;
      /** PDP activation failed due to RRC_ABORT or a forbidden PLMN. */
      public static final int PDP_LOWERLAYER_ERROR = 0x874;
      /** MO PDP modify collision when the MT PDP is already in progress. */
      public static final int PDP_MODIFY_COLLISION = 0x875;
      /** Maximum size of the L2 message was exceeded. */
      public static final int MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED = 0x876;
      /** Non-access stratum (NAS) request was rejected by the network. */
      public static final int NAS_REQUEST_REJECTED_BY_NETWORK = 0x877;
      /**
       * Radio resource control (RRC) connection establishment failure due to an error in the request
       * message.
       */
      public static final int RRC_CONNECTION_INVALID_REQUEST = 0x878;
      /**
       * Radio resource control (RRC) connection establishment failure due to a change in the
       * tracking area ID.
       */
      public static final int RRC_CONNECTION_TRACKING_AREA_ID_CHANGED = 0x879;
      /**
       * Radio resource control (RRC) connection establishment failure due to the RF was unavailable.
       */
      public static final int RRC_CONNECTION_RF_UNAVAILABLE = 0x87A;
      /**
       * Radio resource control (RRC) connection was aborted before deactivating the LTE stack due to
       * a successful LTE to WCDMA/GSM/TD-SCDMA IRAT change.
       */
      public static final int RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE = 0x87B;
      /**
       * If the UE has an LTE radio link failure before security is established, the radio resource
       * control (RRC) connection must be released and the UE must return to idle.
       */
      public static final int RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE = 0x87C;
      /**
       * Radio resource control (RRC) connection was aborted by the non-access stratum (NAS) after an
       * IRAT to LTE IRAT handover.
       */
      public static final int RRC_CONNECTION_ABORTED_AFTER_HANDOVER = 0x87D;
      /**
       * Radio resource control (RRC) connection was aborted before deactivating the LTE stack after
       * a successful LTE to GSM/EDGE IRAT cell change order procedure.
       */
      public static final int RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE = 0x87E;
      /**
       * Radio resource control (RRC) connection was aborted in the middle of a LTE to GSM IRAT cell
       * change order procedure.
       */
      public static final int RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE = 0x87F;
      /** IMSI present in the UE is unknown in the home subscriber server. */
      public static final int IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER = 0x880;
      /** IMEI of the UE is not accepted by the network. */
      public static final int IMEI_NOT_ACCEPTED = 0x881;
      /** EPS and non-EPS services are not allowed by the network. */
      public static final int EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED = 0x882;
      /** EPS services are not allowed in the PLMN. */
      public static final int EPS_SERVICES_NOT_ALLOWED_IN_PLMN = 0x883;
      /** Mobile switching center is temporarily unreachable. */
      public static final int MSC_TEMPORARILY_NOT_REACHABLE = 0x884;
      /** CS domain is not available. */
      public static final int CS_DOMAIN_NOT_AVAILABLE = 0x885;
      /** ESM level failure. */
      public static final int ESM_FAILURE = 0x886;
      /** MAC level failure. */
      public static final int MAC_FAILURE = 0x887;
      /** Synchronization failure. */
      public static final int SYNCHRONIZATION_FAILURE = 0x888;
      /** UE security capabilities mismatch. */
      public static final int UE_SECURITY_CAPABILITIES_MISMATCH = 0x889;
      /** Unspecified security mode reject. */
      public static final int SECURITY_MODE_REJECTED = 0x88A;
      /** Unacceptable non-EPS authentication. */
      public static final int UNACCEPTABLE_NON_EPS_AUTHENTICATION = 0x88B;
      /** CS fallback call establishment is not allowed. */
      public static final int CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED = 0x88C;
      /** No EPS bearer context was activated. */
      public static final int NO_EPS_BEARER_CONTEXT_ACTIVATED = 0x88D;
      /** Invalid EMM state. */
      public static final int INVALID_EMM_STATE = 0x88E;
      /** Non-Access Spectrum layer failure. */
      public static final int NAS_LAYER_FAILURE = 0x88F;
      /** Multiple PDP call feature is disabled. */
      public static final int MULTIPLE_PDP_CALL_NOT_ALLOWED = 0x890;
      /** Data call has been brought down because EMBMS is not enabled at the RRC layer. */
      public static final int EMBMS_NOT_ENABLED = 0x891;
      /** Data call was unsuccessfully transferred during the IRAT handover. */
      public static final int IRAT_HANDOVER_FAILED = 0x892;
      /** EMBMS data call has been successfully brought down. */
      public static final int EMBMS_REGULAR_DEACTIVATION = 0x893;
      /** Test loop-back data call has been successfully brought down. */
      public static final int TEST_LOOPBACK_REGULAR_DEACTIVATION = 0x894;
      /** Lower layer registration failure. */
      public static final int LOWER_LAYER_REGISTRATION_FAILURE = 0x895;
      /**
       * Network initiates a detach on LTE with error cause ""data plan has been replenished or has
       * expired.
       */
      public static final int DATA_PLAN_EXPIRED = 0x896;
      /** UMTS interface is brought down due to handover from UMTS to iWLAN. */
      public static final int UMTS_HANDOVER_TO_IWLAN = 0x897;
      /** Received a connection deny due to general or network busy on EVDO network. */
      public static final int EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY = 0x898;
      /** Received a connection deny due to billing or authentication failure on EVDO network. */
      public static final int EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE = 0x899;
      /** HDR system has been changed due to redirection or the PRL was not preferred. */
      public static final int EVDO_HDR_CHANGED = 0x89A;
      /** Device exited HDR due to redirection or the PRL was not preferred. */
      public static final int EVDO_HDR_EXITED = 0x89B;
      /** Device does not have an HDR session. */
      public static final int EVDO_HDR_NO_SESSION = 0x89C;
      /** It is ending an HDR call origination in favor of a GPS fix. */
      public static final int EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL = 0x89D;
      /** Connection setup on the HDR system was time out. */
      public static final int EVDO_HDR_CONNECTION_SETUP_TIMEOUT = 0x89E;
      /** Device failed to acquire a co-located HDR for origination. */
      public static final int FAILED_TO_ACQUIRE_COLOCATED_HDR = 0x89F;
      /** OTASP commit is in progress. */
      public static final int OTASP_COMMIT_IN_PROGRESS = 0x8A0;
      /** Device has no hybrid HDR service. */
      public static final int NO_HYBRID_HDR_SERVICE = 0x8A1;
      /** HDR module could not be obtained because of the RF locked. */
      public static final int HDR_NO_LOCK_GRANTED = 0x8A2;
      /** DBM or SMS is in progress. */
      public static final int DBM_OR_SMS_IN_PROGRESS = 0x8A3;
      /** HDR module released the call due to fade. */
      public static final int HDR_FADE = 0x8A4;
      /** HDR system access failure. */
      public static final int HDR_ACCESS_FAILURE = 0x8A5;
      /**
       * P_rev supported by 1 base station is less than 6, which is not supported for a 1X data call.
       * The UE must be in the footprint of BS which has p_rev >= 6 to support this SO33 call.
       */
      public static final int UNSUPPORTED_1X_PREV = 0x8A6;
      /** Client ended the data call. */
      public static final int LOCAL_END = 0x8A7;
      /** Device has no service. */
      public static final int NO_SERVICE = 0x8A8;
      /** Device lost the system due to fade. */
      public static final int FADE = 0x8A9;
      /** Receiving a release from the base station with no reason. */
      public static final int NORMAL_RELEASE = 0x8AA;
      /** Access attempt is already in progress. */
      public static final int ACCESS_ATTEMPT_ALREADY_IN_PROGRESS = 0x8AB;
      /** Device is in the process of redirecting or handing off to a different target system. */
      public static final int REDIRECTION_OR_HANDOFF_IN_PROGRESS = 0x8AC;
      /** Device is operating in Emergency mode. */
      public static final int EMERGENCY_MODE = 0x8AD;
      /** Device is in use (e.g., voice call). */
      public static final int PHONE_IN_USE = 0x8AE;
      /**
       * Device operational mode is different from the mode requested in the traffic channel bring up.
       */
      public static final int INVALID_MODE = 0x8AF;
      /** SIM was marked by the network as invalid for the circuit and/or packet service domain. */
      public static final int INVALID_SIM_STATE = 0x8B0;
      /** There is no co-located HDR. */
      public static final int NO_COLLOCATED_HDR = 0x8B1;
      /** UE is entering power save mode. */
      public static final int UE_IS_ENTERING_POWERSAVE_MODE = 0x8B2;
      /** Dual switch from single standby to dual standby is in progress. */
      public static final int DUAL_SWITCH = 0x8B3;
      /**
       * Data call bring up fails in the PPP setup due to a timeout.
       * (e.g., an LCP conf ack was not received from the network)
       */
      public static final int PPP_TIMEOUT = 0x8B4;
      /**
       * Data call bring up fails in the PPP setup due to an authorization failure.
       * (e.g., authorization is required, but not negotiated with the network during an LCP phase)
       */
      public static final int PPP_AUTH_FAILURE = 0x8B5;
      /** Data call bring up fails in the PPP setup due to an option mismatch. */
      public static final int PPP_OPTION_MISMATCH = 0x8B6;
      /** Data call bring up fails in the PPP setup due to a PAP failure. */
      public static final int PPP_PAP_FAILURE = 0x8B7;
      /** Data call bring up fails in the PPP setup due to a CHAP failure. */
      public static final int PPP_CHAP_FAILURE = 0x8B8;
      /**
       * Data call bring up fails in the PPP setup because the PPP is in the process of cleaning the
       * previous PPP session.
       */
      public static final int PPP_CLOSE_IN_PROGRESS = 0x8B9;
      /**
       * IPv6 interface bring up fails because the network provided only the IPv4 address for the
       * upcoming PDN permanent client can reattempt a IPv6 call bring up after the IPv4 interface is
       * also brought down. However, there is no guarantee that the network will provide a IPv6
       * address.
       */
      public static final int LIMITED_TO_IPV4 = 0x8BA;
      /**
       * IPv4 interface bring up fails because the network provided only the IPv6 address for the
       * upcoming PDN permanent client can reattempt a IPv4 call bring up after the IPv6 interface is
       * also brought down. However there is no guarantee that the network will provide a IPv4
       * address.
       */
      public static final int LIMITED_TO_IPV6 = 0x8BB;
      /** Data call bring up fails in the VSNCP phase due to a VSNCP timeout error. */
      public static final int VSNCP_TIMEOUT = 0x8BC;
      /**
       * Data call bring up fails in the VSNCP phase due to a general error. It's used when there is
       * no other specific error code available to report the failure.
       */
      public static final int VSNCP_GEN_ERROR = 0x8BD;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request because the requested APN is unauthorized.
       */
      public static final int VSNCP_APN_UNATHORIZED = 0x8BE;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request because the PDN limit has been exceeded.
       */
      public static final int VSNCP_PDN_LIMIT_EXCEEDED = 0x8BF;
      /**
       * Data call bring up fails in the VSNCP phase due to the network rejected the VSNCP
       * configuration request due to no PDN gateway address.
       */
      public static final int VSNCP_NO_PDN_GATEWAY_ADDRESS = 0x8C0;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request because the PDN gateway is unreachable.
       */
      public static final int VSNCP_PDN_GATEWAY_UNREACHABLE = 0x8C1;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request due to a PDN gateway reject.
       */
      public static final int VSNCP_PDN_GATEWAY_REJECT = 0x8C2;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request with the reason of insufficient parameter.
       */
      public static final int VSNCP_INSUFFICIENT_PARAMETERS = 0x8C3;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request with the reason of resource unavailable.
       */
      public static final int VSNCP_RESOURCE_UNAVAILABLE = 0x8C4;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request with the reason of administratively prohibited at the HSGW.
       */
      public static final int VSNCP_ADMINISTRATIVELY_PROHIBITED = 0x8C5;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of PDN ID in use, or
       * all existing PDNs are brought down with this end reason because one of the PDN bring up was
       * rejected by the network with the reason of PDN ID in use.
       */
      public static final int VSNCP_PDN_ID_IN_USE = 0x8C6;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request for the reason of subscriber limitation.
       */
      public static final int VSNCP_SUBSCRIBER_LIMITATION = 0x8C7;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request because the PDN exists for this APN.
       */
      public static final int VSNCP_PDN_EXISTS_FOR_THIS_APN = 0x8C8;
      /**
       * Data call bring up fails in the VSNCP phase due to a network rejection of the VSNCP
       * configuration request with reconnect to this PDN not allowed, or an active data call is
       * terminated by the network because reconnection to this PDN is not allowed. Upon receiving
       * this error code from the network, the modem infinitely throttles the PDN until the next
       * power cycle.
       */
      public static final int VSNCP_RECONNECT_NOT_ALLOWED = 0x8C9;
      /** Device failure to obtain the prefix from the network. */
      public static final int IPV6_PREFIX_UNAVAILABLE = 0x8CA;
      /** System preference change back to SRAT during handoff */
      public static final int HANDOFF_PREFERENCE_CHANGED = 0x8CB;
  
      // OEM sepecific error codes. To be used by OEMs when they don't
      // want to reveal error code which would be replaced by ERROR_UNSPECIFIED
      public static final int OEM_DCFAILCAUSE_1 = 0x1001;
      public static final int OEM_DCFAILCAUSE_2 = 0x1002;
      public static final int OEM_DCFAILCAUSE_3 = 0x1003;
      public static final int OEM_DCFAILCAUSE_4 = 0x1004;
      public static final int OEM_DCFAILCAUSE_5 = 0x1005;
      public static final int OEM_DCFAILCAUSE_6 = 0x1006;
      public static final int OEM_DCFAILCAUSE_7 = 0x1007;
      public static final int OEM_DCFAILCAUSE_8 = 0x1008;
      public static final int OEM_DCFAILCAUSE_9 = 0x1009;
      public static final int OEM_DCFAILCAUSE_10 = 0x100A;
      public static final int OEM_DCFAILCAUSE_11 = 0x100B;
      public static final int OEM_DCFAILCAUSE_12 = 0x100C;
      public static final int OEM_DCFAILCAUSE_13 = 0x100D;
      public static final int OEM_DCFAILCAUSE_14 = 0x100E;
      public static final int OEM_DCFAILCAUSE_15 = 0x100F;
  
      // Local errors generated by Vendor RIL
      // specified in ril.h
      /** Data fail due to registration failure. */
      public static final int REGISTRATION_FAIL = -1;
      /** Data fail due to GPRS registration failure. */
      public static final int GPRS_REGISTRATION_FAIL = -2;
      /** Data call drop due to network/modem disconnect. */
      public static final int SIGNAL_LOST = -3;                        /* no retry */
      /**
       * Preferred technology has changed, must retry with parameters appropriate for new technology.
       */
      public static final int PREF_RADIO_TECH_CHANGED = -4;
      /** data call was disconnected because radio was resetting, powered off. */
      public static final int RADIO_POWER_OFF = -5;                    /* no retry */
      /** Data call was disconnected by modem because tethered. */
      public static final int TETHERED_CALL_ACTIVE = -6;               /* no retry */
      /** Data call fail due to unspecific errors. */
      public static final int ERROR_UNSPECIFIED = 0xFFFF;
  
      // Errors generated by the Framework
      // specified here
      /** Unknown data failure cause. */
      public static final int UNKNOWN = 0x10000;
      /** Data fail due to radio not unavailable. */
      public static final int RADIO_NOT_AVAILABLE = 0x10001;                   /* no retry */
      /** @hide */
      public static final int UNACCEPTABLE_NETWORK_PARAMETER = 0x10002;        /* no retry */
      /** @hide */
      public static final int CONNECTION_TO_DATACONNECTIONAC_BROKEN = 0x10003;
      /** Data connection was lost. */
      public static final int LOST_CONNECTION = 0x10004;
      /** @hide */
      public static final int RESET_BY_FRAMEWORK = 0x10005;
  
      /**
       * Data handover failed.
       *
       * @hide
       */
      public static final int HANDOVER_FAILED = 0x10006;
  
      /** @hide */
      @IntDef(value = {
              NONE,
              OPERATOR_BARRED,
              NAS_SIGNALLING,
              LLC_SNDCP,
              INSUFFICIENT_RESOURCES,
              MISSING_UNKNOWN_APN,
              UNKNOWN_PDP_ADDRESS_TYPE,
              USER_AUTHENTICATION,
              ACTIVATION_REJECT_GGSN,
              ACTIVATION_REJECT_UNSPECIFIED,
              SERVICE_OPTION_NOT_SUPPORTED,
              SERVICE_OPTION_NOT_SUBSCRIBED,
              SERVICE_OPTION_OUT_OF_ORDER,
              NSAPI_IN_USE,
              REGULAR_DEACTIVATION,
              QOS_NOT_ACCEPTED,
              NETWORK_FAILURE,
              UMTS_REACTIVATION_REQ,
              FEATURE_NOT_SUPP,
              TFT_SEMANTIC_ERROR,
              TFT_SYTAX_ERROR,
              UNKNOWN_PDP_CONTEXT,
              FILTER_SEMANTIC_ERROR,
              FILTER_SYTAX_ERROR,
              PDP_WITHOUT_ACTIVE_TFT,
              ACTIVATION_REJECTED_BCM_VIOLATION,
              ONLY_IPV4_ALLOWED,
              ONLY_IPV6_ALLOWED,
              ONLY_SINGLE_BEARER_ALLOWED,
              ESM_INFO_NOT_RECEIVED,
              PDN_CONN_DOES_NOT_EXIST,
              MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED,
              COLLISION_WITH_NETWORK_INITIATED_REQUEST,
              ONLY_IPV4V6_ALLOWED,
              ONLY_NON_IP_ALLOWED,
              UNSUPPORTED_QCI_VALUE,
              BEARER_HANDLING_NOT_SUPPORTED,
              ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED,
              UNSUPPORTED_APN_IN_CURRENT_PLMN,
              INVALID_TRANSACTION_ID,
              MESSAGE_INCORRECT_SEMANTIC,
              INVALID_MANDATORY_INFO,
              MESSAGE_TYPE_UNSUPPORTED,
              MSG_TYPE_NONCOMPATIBLE_STATE,
              UNKNOWN_INFO_ELEMENT,
              CONDITIONAL_IE_ERROR,
              MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE,
              PROTOCOL_ERRORS,
              APN_TYPE_CONFLICT,
              INVALID_PCSCF_ADDR,
              INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN,
              EMM_ACCESS_BARRED,
              EMERGENCY_IFACE_ONLY,
              IFACE_MISMATCH,
              COMPANION_IFACE_IN_USE,
              IP_ADDRESS_MISMATCH,
              IFACE_AND_POL_FAMILY_MISMATCH,
              EMM_ACCESS_BARRED_INFINITE_RETRY,
              AUTH_FAILURE_ON_EMERGENCY_CALL,
              INVALID_DNS_ADDR,
              INVALID_PCSCF_OR_DNS_ADDRESS,
              CALL_PREEMPT_BY_EMERGENCY_APN,
              UE_INITIATED_DETACH_OR_DISCONNECT,
              MIP_FA_REASON_UNSPECIFIED,
              MIP_FA_ADMIN_PROHIBITED,
              MIP_FA_INSUFFICIENT_RESOURCES,
              MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE,
              MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE,
              MIP_FA_REQUESTED_LIFETIME_TOO_LONG,
              MIP_FA_MALFORMED_REQUEST,
              MIP_FA_MALFORMED_REPLY,
              MIP_FA_ENCAPSULATION_UNAVAILABLE,
              MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE,
              MIP_FA_REVERSE_TUNNEL_UNAVAILABLE,
              MIP_FA_REVERSE_TUNNEL_IS_MANDATORY,
              MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED,
              MIP_FA_MISSING_NAI,
              MIP_FA_MISSING_HOME_AGENT,
              MIP_FA_MISSING_HOME_ADDRESS,
              MIP_FA_UNKNOWN_CHALLENGE,
              MIP_FA_MISSING_CHALLENGE,
              MIP_FA_STALE_CHALLENGE,
              MIP_HA_REASON_UNSPECIFIED,
              MIP_HA_ADMIN_PROHIBITED,
              MIP_HA_INSUFFICIENT_RESOURCES,
              MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE,
              MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE,
              MIP_HA_REGISTRATION_ID_MISMATCH,
              MIP_HA_MALFORMED_REQUEST,
              MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS,
              MIP_HA_REVERSE_TUNNEL_UNAVAILABLE,
              MIP_HA_REVERSE_TUNNEL_IS_MANDATORY,
              MIP_HA_ENCAPSULATION_UNAVAILABLE,
              CLOSE_IN_PROGRESS,
              NETWORK_INITIATED_TERMINATION,
              MODEM_APP_PREEMPTED,
              PDN_IPV4_CALL_DISALLOWED,
              PDN_IPV4_CALL_THROTTLED,
              PDN_IPV6_CALL_DISALLOWED,
              PDN_IPV6_CALL_THROTTLED,
              MODEM_RESTART,
              PDP_PPP_NOT_SUPPORTED,
              UNPREFERRED_RAT,
              PHYSICAL_LINK_CLOSE_IN_PROGRESS,
              APN_PENDING_HANDOVER,
              PROFILE_BEARER_INCOMPATIBLE,
              SIM_CARD_CHANGED,
              LOW_POWER_MODE_OR_POWERING_DOWN,
              APN_DISABLED,
              MAX_PPP_INACTIVITY_TIMER_EXPIRED,
              IPV6_ADDRESS_TRANSFER_FAILED,
              TRAT_SWAP_FAILED,
              EHRPD_TO_HRPD_FALLBACK,
              MIP_CONFIG_FAILURE,
              PDN_INACTIVITY_TIMER_EXPIRED,
              MAX_IPV4_CONNECTIONS,
              MAX_IPV6_CONNECTIONS,
              APN_MISMATCH,
              IP_VERSION_MISMATCH,
              DUN_CALL_DISALLOWED,
              INTERNAL_EPC_NONEPC_TRANSITION,
              INTERFACE_IN_USE,
              APN_DISALLOWED_ON_ROAMING,
              APN_PARAMETERS_CHANGED,
              NULL_APN_DISALLOWED,
              THERMAL_MITIGATION,
              DATA_SETTINGS_DISABLED,
              DATA_ROAMING_SETTINGS_DISABLED,
              DDS_SWITCHED,
              FORBIDDEN_APN_NAME,
              DDS_SWITCH_IN_PROGRESS,
              CALL_DISALLOWED_IN_ROAMING,
              NON_IP_NOT_SUPPORTED,
              PDN_NON_IP_CALL_THROTTLED,
              PDN_NON_IP_CALL_DISALLOWED,
              CDMA_LOCK,
              CDMA_INTERCEPT,
              CDMA_REORDER,
              CDMA_RELEASE_DUE_TO_SO_REJECTION,
              CDMA_INCOMING_CALL,
              CDMA_ALERT_STOP,
              CHANNEL_ACQUISITION_FAILURE,
              MAX_ACCESS_PROBE,
              CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION,
              NO_RESPONSE_FROM_BASE_STATION,
              REJECTED_BY_BASE_STATION,
              CONCURRENT_SERVICES_INCOMPATIBLE,
              NO_CDMA_SERVICE,
              RUIM_NOT_PRESENT,
              CDMA_RETRY_ORDER,
              ACCESS_BLOCK,
              ACCESS_BLOCK_ALL,
              IS707B_MAX_ACCESS_PROBES,
              THERMAL_EMERGENCY,
              CONCURRENT_SERVICES_NOT_ALLOWED,
              INCOMING_CALL_REJECTED,
              NO_SERVICE_ON_GATEWAY,
              NO_GPRS_CONTEXT,
              ILLEGAL_MS,
              ILLEGAL_ME,
              GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED,
              GPRS_SERVICES_NOT_ALLOWED,
              MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
              IMPLICITLY_DETACHED,
              PLMN_NOT_ALLOWED,
              LOCATION_AREA_NOT_ALLOWED,
              GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN,
              PDP_DUPLICATE,
              UE_RAT_CHANGE,
              CONGESTION,
              NO_PDP_CONTEXT_ACTIVATED,
              ACCESS_CLASS_DSAC_REJECTION,
              PDP_ACTIVATE_MAX_RETRY_FAILED,
              RADIO_ACCESS_BEARER_FAILURE,
              ESM_UNKNOWN_EPS_BEARER_CONTEXT,
              DRB_RELEASED_BY_RRC,
              CONNECTION_RELEASED,
              EMM_DETACHED,
              EMM_ATTACH_FAILED,
              EMM_ATTACH_STARTED,
              LTE_NAS_SERVICE_REQUEST_FAILED,
              DUPLICATE_BEARER_ID,
              ESM_COLLISION_SCENARIOS,
              ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK,
              ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER,
              ESM_BAD_OTA_MESSAGE,
              ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL,
              ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT,
              DS_EXPLICIT_DEACTIVATION,
              ESM_LOCAL_CAUSE_NONE,
              LTE_THROTTLING_NOT_REQUIRED,
              ACCESS_CONTROL_LIST_CHECK_FAILURE,
              SERVICE_NOT_ALLOWED_ON_PLMN,
              EMM_T3417_EXPIRED,
              EMM_T3417_EXT_EXPIRED,
              RRC_UPLINK_DATA_TRANSMISSION_FAILURE,
              RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER,
              RRC_UPLINK_CONNECTION_RELEASE,
              RRC_UPLINK_RADIO_LINK_FAILURE,
              RRC_UPLINK_ERROR_REQUEST_FROM_NAS,
              RRC_CONNECTION_ACCESS_STRATUM_FAILURE,
              RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS,
              RRC_CONNECTION_ACCESS_BARRED,
              RRC_CONNECTION_CELL_RESELECTION,
              RRC_CONNECTION_CONFIG_FAILURE,
              RRC_CONNECTION_TIMER_EXPIRED,
              RRC_CONNECTION_LINK_FAILURE,
              RRC_CONNECTION_CELL_NOT_CAMPED,
              RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE,
              RRC_CONNECTION_REJECT_BY_NETWORK,
              RRC_CONNECTION_NORMAL_RELEASE,
              RRC_CONNECTION_RADIO_LINK_FAILURE,
              RRC_CONNECTION_REESTABLISHMENT_FAILURE,
              RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER,
              RRC_CONNECTION_ABORT_REQUEST,
              RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR,
              NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH,
              NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH,
              ESM_PROCEDURE_TIME_OUT,
              INVALID_CONNECTION_ID,
              MAXIMIUM_NSAPIS_EXCEEDED,
              INVALID_PRIMARY_NSAPI,
              CANNOT_ENCODE_OTA_MESSAGE,
              RADIO_ACCESS_BEARER_SETUP_FAILURE,
              PDP_ESTABLISH_TIMEOUT_EXPIRED,
              PDP_MODIFY_TIMEOUT_EXPIRED,
              PDP_INACTIVE_TIMEOUT_EXPIRED,
              PDP_LOWERLAYER_ERROR,
              PDP_MODIFY_COLLISION,
              MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED,
              NAS_REQUEST_REJECTED_BY_NETWORK,
              RRC_CONNECTION_INVALID_REQUEST,
              RRC_CONNECTION_TRACKING_AREA_ID_CHANGED,
              RRC_CONNECTION_RF_UNAVAILABLE,
              RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE,
              RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE,
              RRC_CONNECTION_ABORTED_AFTER_HANDOVER,
              RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE,
              RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE,
              IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER,
              IMEI_NOT_ACCEPTED,
              EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED,
              EPS_SERVICES_NOT_ALLOWED_IN_PLMN,
              MSC_TEMPORARILY_NOT_REACHABLE,
              CS_DOMAIN_NOT_AVAILABLE,
              ESM_FAILURE,
              MAC_FAILURE,
              SYNCHRONIZATION_FAILURE,
              UE_SECURITY_CAPABILITIES_MISMATCH,
              SECURITY_MODE_REJECTED,
              UNACCEPTABLE_NON_EPS_AUTHENTICATION,
              CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED,
              NO_EPS_BEARER_CONTEXT_ACTIVATED,
              INVALID_EMM_STATE,
              NAS_LAYER_FAILURE,
              MULTIPLE_PDP_CALL_NOT_ALLOWED,
              EMBMS_NOT_ENABLED,
              IRAT_HANDOVER_FAILED,
              EMBMS_REGULAR_DEACTIVATION,
              TEST_LOOPBACK_REGULAR_DEACTIVATION,
              LOWER_LAYER_REGISTRATION_FAILURE,
              DATA_PLAN_EXPIRED,
              UMTS_HANDOVER_TO_IWLAN,
              EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY,
              EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE,
              EVDO_HDR_CHANGED,
              EVDO_HDR_EXITED,
              EVDO_HDR_NO_SESSION,
              EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL,
              EVDO_HDR_CONNECTION_SETUP_TIMEOUT,
              FAILED_TO_ACQUIRE_COLOCATED_HDR,
              OTASP_COMMIT_IN_PROGRESS,
              NO_HYBRID_HDR_SERVICE,
              HDR_NO_LOCK_GRANTED,
              DBM_OR_SMS_IN_PROGRESS,
              HDR_FADE,
              HDR_ACCESS_FAILURE,
              UNSUPPORTED_1X_PREV,
              LOCAL_END,
              NO_SERVICE,
              FADE,
              NORMAL_RELEASE,
              ACCESS_ATTEMPT_ALREADY_IN_PROGRESS,
              REDIRECTION_OR_HANDOFF_IN_PROGRESS,
              EMERGENCY_MODE,
              PHONE_IN_USE,
              INVALID_MODE,
              INVALID_SIM_STATE,
              NO_COLLOCATED_HDR,
              UE_IS_ENTERING_POWERSAVE_MODE,
              DUAL_SWITCH,
              PPP_TIMEOUT,
              PPP_AUTH_FAILURE,
              PPP_OPTION_MISMATCH,
              PPP_PAP_FAILURE,
              PPP_CHAP_FAILURE,
              PPP_CLOSE_IN_PROGRESS,
              LIMITED_TO_IPV4,
              LIMITED_TO_IPV6,
              VSNCP_TIMEOUT,
              VSNCP_GEN_ERROR,
              VSNCP_APN_UNATHORIZED,
              VSNCP_PDN_LIMIT_EXCEEDED,
              VSNCP_NO_PDN_GATEWAY_ADDRESS,
              VSNCP_PDN_GATEWAY_UNREACHABLE,
              VSNCP_PDN_GATEWAY_REJECT,
              VSNCP_INSUFFICIENT_PARAMETERS,
              VSNCP_RESOURCE_UNAVAILABLE,
              VSNCP_ADMINISTRATIVELY_PROHIBITED,
              VSNCP_PDN_ID_IN_USE,
              VSNCP_SUBSCRIBER_LIMITATION,
              VSNCP_PDN_EXISTS_FOR_THIS_APN,
              VSNCP_RECONNECT_NOT_ALLOWED,
              IPV6_PREFIX_UNAVAILABLE,
              HANDOFF_PREFERENCE_CHANGED,
              OEM_DCFAILCAUSE_1,
              OEM_DCFAILCAUSE_2,
              OEM_DCFAILCAUSE_3,
              OEM_DCFAILCAUSE_4,
              OEM_DCFAILCAUSE_5,
              OEM_DCFAILCAUSE_6,
              OEM_DCFAILCAUSE_7,
              OEM_DCFAILCAUSE_8,
              OEM_DCFAILCAUSE_9,
              OEM_DCFAILCAUSE_10,
              OEM_DCFAILCAUSE_11,
              OEM_DCFAILCAUSE_12,
              OEM_DCFAILCAUSE_13,
              OEM_DCFAILCAUSE_14,
              OEM_DCFAILCAUSE_15,
              REGISTRATION_FAIL,
              GPRS_REGISTRATION_FAIL,
              SIGNAL_LOST,
              PREF_RADIO_TECH_CHANGED,
              RADIO_POWER_OFF,
              TETHERED_CALL_ACTIVE,
              ERROR_UNSPECIFIED,
              UNKNOWN,
              RADIO_NOT_AVAILABLE,
              UNACCEPTABLE_NETWORK_PARAMETER,
              CONNECTION_TO_DATACONNECTIONAC_BROKEN,
              LOST_CONNECTION,
              RESET_BY_FRAMEWORK
      })
      @Retention(RetentionPolicy.SOURCE)
      public @interface FailCause{}
  
      private static final Map<Integer, String> sFailCauseMap;
      static {
          sFailCauseMap = new HashMap<>();
          sFailCauseMap.put(NONE, "NONE");
          sFailCauseMap.put(OPERATOR_BARRED, "OPERATOR_BARRED");
          sFailCauseMap.put(NAS_SIGNALLING, "NAS_SIGNALLING");
          sFailCauseMap.put(LLC_SNDCP, "LLC_SNDCP");
          sFailCauseMap.put(INSUFFICIENT_RESOURCES, "INSUFFICIENT_RESOURCES");
          sFailCauseMap.put(MISSING_UNKNOWN_APN, "MISSING_UNKNOWN_APN");
          sFailCauseMap.put(UNKNOWN_PDP_ADDRESS_TYPE, "UNKNOWN_PDP_ADDRESS_TYPE");
          sFailCauseMap.put(USER_AUTHENTICATION, "USER_AUTHENTICATION");
          sFailCauseMap.put(ACTIVATION_REJECT_GGSN, "ACTIVATION_REJECT_GGSN");
          sFailCauseMap.put(ACTIVATION_REJECT_UNSPECIFIED,
                  "ACTIVATION_REJECT_UNSPECIFIED");
          sFailCauseMap.put(SERVICE_OPTION_NOT_SUPPORTED,
                  "SERVICE_OPTION_NOT_SUPPORTED");
          sFailCauseMap.put(SERVICE_OPTION_NOT_SUBSCRIBED,
                  "SERVICE_OPTION_NOT_SUBSCRIBED");
          sFailCauseMap.put(SERVICE_OPTION_OUT_OF_ORDER, "SERVICE_OPTION_OUT_OF_ORDER");
          sFailCauseMap.put(NSAPI_IN_USE, "NSAPI_IN_USE");
          sFailCauseMap.put(REGULAR_DEACTIVATION, "REGULAR_DEACTIVATION");
          sFailCauseMap.put(QOS_NOT_ACCEPTED, "QOS_NOT_ACCEPTED");
          sFailCauseMap.put(NETWORK_FAILURE, "NETWORK_FAILURE");
          sFailCauseMap.put(UMTS_REACTIVATION_REQ, "UMTS_REACTIVATION_REQ");
          sFailCauseMap.put(FEATURE_NOT_SUPP, "FEATURE_NOT_SUPP");
          sFailCauseMap.put(TFT_SEMANTIC_ERROR, "TFT_SEMANTIC_ERROR");
          sFailCauseMap.put(TFT_SYTAX_ERROR, "TFT_SYTAX_ERROR");
          sFailCauseMap.put(UNKNOWN_PDP_CONTEXT, "UNKNOWN_PDP_CONTEXT");
          sFailCauseMap.put(FILTER_SEMANTIC_ERROR, "FILTER_SEMANTIC_ERROR");
          sFailCauseMap.put(FILTER_SYTAX_ERROR, "FILTER_SYTAX_ERROR");
          sFailCauseMap.put(PDP_WITHOUT_ACTIVE_TFT, "PDP_WITHOUT_ACTIVE_TFT");
          sFailCauseMap.put(ACTIVATION_REJECTED_BCM_VIOLATION, "ACTIVATION_REJECTED_BCM_VIOLATION");
          sFailCauseMap.put(ONLY_IPV4_ALLOWED, "ONLY_IPV4_ALLOWED");
          sFailCauseMap.put(ONLY_IPV6_ALLOWED, "ONLY_IPV6_ALLOWED");
          sFailCauseMap.put(ONLY_SINGLE_BEARER_ALLOWED, "ONLY_SINGLE_BEARER_ALLOWED");
          sFailCauseMap.put(ESM_INFO_NOT_RECEIVED, "ESM_INFO_NOT_RECEIVED");
          sFailCauseMap.put(PDN_CONN_DOES_NOT_EXIST, "PDN_CONN_DOES_NOT_EXIST");
          sFailCauseMap.put(MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED,
                  "MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED");
          sFailCauseMap.put(COLLISION_WITH_NETWORK_INITIATED_REQUEST,
                  "COLLISION_WITH_NETWORK_INITIATED_REQUEST");
          sFailCauseMap.put(ONLY_IPV4V6_ALLOWED, "ONLY_IPV4V6_ALLOWED");
          sFailCauseMap.put(ONLY_NON_IP_ALLOWED, "ONLY_NON_IP_ALLOWED");
          sFailCauseMap.put(UNSUPPORTED_QCI_VALUE, "UNSUPPORTED_QCI_VALUE");
          sFailCauseMap.put(BEARER_HANDLING_NOT_SUPPORTED, "BEARER_HANDLING_NOT_SUPPORTED");
          sFailCauseMap.put(ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED,
                  "ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED");
          sFailCauseMap.put(UNSUPPORTED_APN_IN_CURRENT_PLMN,
                  "UNSUPPORTED_APN_IN_CURRENT_PLMN");
          sFailCauseMap.put(INVALID_TRANSACTION_ID, "INVALID_TRANSACTION_ID");
          sFailCauseMap.put(MESSAGE_INCORRECT_SEMANTIC, "MESSAGE_INCORRECT_SEMANTIC");
          sFailCauseMap.put(INVALID_MANDATORY_INFO, "INVALID_MANDATORY_INFO");
          sFailCauseMap.put(MESSAGE_TYPE_UNSUPPORTED, "MESSAGE_TYPE_UNSUPPORTED");
          sFailCauseMap.put(MSG_TYPE_NONCOMPATIBLE_STATE, "MSG_TYPE_NONCOMPATIBLE_STATE");
          sFailCauseMap.put(UNKNOWN_INFO_ELEMENT, "UNKNOWN_INFO_ELEMENT");
          sFailCauseMap.put(CONDITIONAL_IE_ERROR, "CONDITIONAL_IE_ERROR");
          sFailCauseMap.put(MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE,
                  "MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE");
          sFailCauseMap.put(PROTOCOL_ERRORS, "PROTOCOL_ERRORS");
          sFailCauseMap.put(APN_TYPE_CONFLICT, "APN_TYPE_CONFLICT");
          sFailCauseMap.put(INVALID_PCSCF_ADDR, "INVALID_PCSCF_ADDR");
          sFailCauseMap.put(INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN,
                  "INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN");
          sFailCauseMap.put(EMM_ACCESS_BARRED, "EMM_ACCESS_BARRED");
          sFailCauseMap.put(EMERGENCY_IFACE_ONLY, "EMERGENCY_IFACE_ONLY");
          sFailCauseMap.put(IFACE_MISMATCH, "IFACE_MISMATCH");
          sFailCauseMap.put(COMPANION_IFACE_IN_USE, "COMPANION_IFACE_IN_USE");
          sFailCauseMap.put(IP_ADDRESS_MISMATCH, "IP_ADDRESS_MISMATCH");
          sFailCauseMap.put(IFACE_AND_POL_FAMILY_MISMATCH,
                  "IFACE_AND_POL_FAMILY_MISMATCH");
          sFailCauseMap.put(EMM_ACCESS_BARRED_INFINITE_RETRY,
                  "EMM_ACCESS_BARRED_INFINITE_RETRY");
          sFailCauseMap.put(AUTH_FAILURE_ON_EMERGENCY_CALL,
                  "AUTH_FAILURE_ON_EMERGENCY_CALL");
          sFailCauseMap.put(INVALID_DNS_ADDR, "INVALID_DNS_ADDR");
          sFailCauseMap.put(INVALID_PCSCF_OR_DNS_ADDRESS, "INVALID_PCSCF_OR_DNS_ADDRESS");
          sFailCauseMap.put(CALL_PREEMPT_BY_EMERGENCY_APN, "CALL_PREEMPT_BY_EMERGENCY_APN");
          sFailCauseMap.put(UE_INITIATED_DETACH_OR_DISCONNECT, "UE_INITIATED_DETACH_OR_DISCONNECT");
          sFailCauseMap.put(MIP_FA_REASON_UNSPECIFIED, "MIP_FA_REASON_UNSPECIFIED");
          sFailCauseMap.put(MIP_FA_ADMIN_PROHIBITED, "MIP_FA_ADMIN_PROHIBITED");
          sFailCauseMap.put(MIP_FA_INSUFFICIENT_RESOURCES, "MIP_FA_INSUFFICIENT_RESOURCES");
          sFailCauseMap.put(MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE,
                  "MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE");
          sFailCauseMap.put(MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE,
                  "MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE");
          sFailCauseMap.put(MIP_FA_REQUESTED_LIFETIME_TOO_LONG, "MIP_FA_REQUESTED_LIFETIME_TOO_LONG");
          sFailCauseMap.put(MIP_FA_MALFORMED_REQUEST, "MIP_FA_MALFORMED_REQUEST");
          sFailCauseMap.put(MIP_FA_MALFORMED_REPLY, "MIP_FA_MALFORMED_REPLY");
          sFailCauseMap.put(MIP_FA_ENCAPSULATION_UNAVAILABLE, "MIP_FA_ENCAPSULATION_UNAVAILABLE");
          sFailCauseMap.put(MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE,
                  "MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE");
          sFailCauseMap.put(MIP_FA_REVERSE_TUNNEL_UNAVAILABLE, "MIP_FA_REVERSE_TUNNEL_UNAVAILABLE");
          sFailCauseMap.put(MIP_FA_REVERSE_TUNNEL_IS_MANDATORY, "MIP_FA_REVERSE_TUNNEL_IS_MANDATORY");
          sFailCauseMap.put(MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED,
                  "MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED");
          sFailCauseMap.put(MIP_FA_MISSING_NAI, "MIP_FA_MISSING_NAI");
          sFailCauseMap.put(MIP_FA_MISSING_HOME_AGENT, "MIP_FA_MISSING_HOME_AGENT");
          sFailCauseMap.put(MIP_FA_MISSING_HOME_ADDRESS, "MIP_FA_MISSING_HOME_ADDRESS");
          sFailCauseMap.put(MIP_FA_UNKNOWN_CHALLENGE, "MIP_FA_UNKNOWN_CHALLENGE");
          sFailCauseMap.put(MIP_FA_MISSING_CHALLENGE, "MIP_FA_MISSING_CHALLENGE");
          sFailCauseMap.put(MIP_FA_STALE_CHALLENGE, "MIP_FA_STALE_CHALLENGE");
          sFailCauseMap.put(MIP_HA_REASON_UNSPECIFIED, "MIP_HA_REASON_UNSPECIFIED");
          sFailCauseMap.put(MIP_HA_ADMIN_PROHIBITED, "MIP_HA_ADMIN_PROHIBITED");
          sFailCauseMap.put(MIP_HA_INSUFFICIENT_RESOURCES, "MIP_HA_INSUFFICIENT_RESOURCES");
          sFailCauseMap.put(MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE,
                  "MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE");
          sFailCauseMap.put(MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE,
                  "MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE");
          sFailCauseMap.put(MIP_HA_REGISTRATION_ID_MISMATCH, "MIP_HA_REGISTRATION_ID_MISMATCH");
          sFailCauseMap.put(MIP_HA_MALFORMED_REQUEST, "MIP_HA_MALFORMED_REQUEST");
          sFailCauseMap.put(MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS, "MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS");
          sFailCauseMap.put(MIP_HA_REVERSE_TUNNEL_UNAVAILABLE, "MIP_HA_REVERSE_TUNNEL_UNAVAILABLE");
          sFailCauseMap.put(MIP_HA_REVERSE_TUNNEL_IS_MANDATORY, "MIP_HA_REVERSE_TUNNEL_IS_MANDATORY");
          sFailCauseMap.put(MIP_HA_ENCAPSULATION_UNAVAILABLE, "MIP_HA_ENCAPSULATION_UNAVAILABLE");
          sFailCauseMap.put(CLOSE_IN_PROGRESS, "CLOSE_IN_PROGRESS");
          sFailCauseMap.put(NETWORK_INITIATED_TERMINATION, "NETWORK_INITIATED_TERMINATION");
          sFailCauseMap.put(MODEM_APP_PREEMPTED, "MODEM_APP_PREEMPTED");
          sFailCauseMap.put(PDN_IPV4_CALL_DISALLOWED, "PDN_IPV4_CALL_DISALLOWED");
          sFailCauseMap.put(PDN_IPV4_CALL_THROTTLED, "PDN_IPV4_CALL_THROTTLED");
          sFailCauseMap.put(PDN_IPV6_CALL_DISALLOWED, "PDN_IPV6_CALL_DISALLOWED");
          sFailCauseMap.put(PDN_IPV6_CALL_THROTTLED, "PDN_IPV6_CALL_THROTTLED");
          sFailCauseMap.put(MODEM_RESTART, "MODEM_RESTART");
          sFailCauseMap.put(PDP_PPP_NOT_SUPPORTED, "PDP_PPP_NOT_SUPPORTED");
          sFailCauseMap.put(UNPREFERRED_RAT, "UNPREFERRED_RAT");
          sFailCauseMap.put(PHYSICAL_LINK_CLOSE_IN_PROGRESS, "PHYSICAL_LINK_CLOSE_IN_PROGRESS");
          sFailCauseMap.put(APN_PENDING_HANDOVER, "APN_PENDING_HANDOVER");
          sFailCauseMap.put(PROFILE_BEARER_INCOMPATIBLE, "PROFILE_BEARER_INCOMPATIBLE");
          sFailCauseMap.put(SIM_CARD_CHANGED, "SIM_CARD_CHANGED");
          sFailCauseMap.put(LOW_POWER_MODE_OR_POWERING_DOWN, "LOW_POWER_MODE_OR_POWERING_DOWN");
          sFailCauseMap.put(APN_DISABLED, "APN_DISABLED");
          sFailCauseMap.put(MAX_PPP_INACTIVITY_TIMER_EXPIRED, "MAX_PPP_INACTIVITY_TIMER_EXPIRED");
          sFailCauseMap.put(IPV6_ADDRESS_TRANSFER_FAILED, "IPV6_ADDRESS_TRANSFER_FAILED");
          sFailCauseMap.put(TRAT_SWAP_FAILED, "TRAT_SWAP_FAILED");
          sFailCauseMap.put(EHRPD_TO_HRPD_FALLBACK, "EHRPD_TO_HRPD_FALLBACK");
          sFailCauseMap.put(MIP_CONFIG_FAILURE, "MIP_CONFIG_FAILURE");
          sFailCauseMap.put(PDN_INACTIVITY_TIMER_EXPIRED, "PDN_INACTIVITY_TIMER_EXPIRED");
          sFailCauseMap.put(MAX_IPV4_CONNECTIONS, "MAX_IPV4_CONNECTIONS");
          sFailCauseMap.put(MAX_IPV6_CONNECTIONS, "MAX_IPV6_CONNECTIONS");
          sFailCauseMap.put(APN_MISMATCH, "APN_MISMATCH");
          sFailCauseMap.put(IP_VERSION_MISMATCH, "IP_VERSION_MISMATCH");
          sFailCauseMap.put(DUN_CALL_DISALLOWED, "DUN_CALL_DISALLOWED");
          sFailCauseMap.put(INTERNAL_EPC_NONEPC_TRANSITION, "INTERNAL_EPC_NONEPC_TRANSITION");
          sFailCauseMap.put(INTERFACE_IN_USE, "INTERFACE_IN_USE");
          sFailCauseMap.put(APN_DISALLOWED_ON_ROAMING, "APN_DISALLOWED_ON_ROAMING");
          sFailCauseMap.put(APN_PARAMETERS_CHANGED, "APN_PARAMETERS_CHANGED");
          sFailCauseMap.put(NULL_APN_DISALLOWED, "NULL_APN_DISALLOWED");
          sFailCauseMap.put(THERMAL_MITIGATION, "THERMAL_MITIGATION");
          sFailCauseMap.put(DATA_SETTINGS_DISABLED, "DATA_SETTINGS_DISABLED");
          sFailCauseMap.put(DATA_ROAMING_SETTINGS_DISABLED, "DATA_ROAMING_SETTINGS_DISABLED");
          sFailCauseMap.put(DDS_SWITCHED, "DDS_SWITCHED");
          sFailCauseMap.put(FORBIDDEN_APN_NAME, "FORBIDDEN_APN_NAME");
          sFailCauseMap.put(DDS_SWITCH_IN_PROGRESS, "DDS_SWITCH_IN_PROGRESS");
          sFailCauseMap.put(CALL_DISALLOWED_IN_ROAMING, "CALL_DISALLOWED_IN_ROAMING");
          sFailCauseMap.put(NON_IP_NOT_SUPPORTED, "NON_IP_NOT_SUPPORTED");
          sFailCauseMap.put(PDN_NON_IP_CALL_THROTTLED, "PDN_NON_IP_CALL_THROTTLED");
          sFailCauseMap.put(PDN_NON_IP_CALL_DISALLOWED, "PDN_NON_IP_CALL_DISALLOWED");
          sFailCauseMap.put(CDMA_LOCK, "CDMA_LOCK");
          sFailCauseMap.put(CDMA_INTERCEPT, "CDMA_INTERCEPT");
          sFailCauseMap.put(CDMA_REORDER, "CDMA_REORDER");
          sFailCauseMap.put(CDMA_RELEASE_DUE_TO_SO_REJECTION, "CDMA_RELEASE_DUE_TO_SO_REJECTION");
          sFailCauseMap.put(CDMA_INCOMING_CALL, "CDMA_INCOMING_CALL");
          sFailCauseMap.put(CDMA_ALERT_STOP, "CDMA_ALERT_STOP");
          sFailCauseMap.put(CHANNEL_ACQUISITION_FAILURE, "CHANNEL_ACQUISITION_FAILURE");
          sFailCauseMap.put(MAX_ACCESS_PROBE, "MAX_ACCESS_PROBE");
          sFailCauseMap.put(CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION,
                  "CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION");
          sFailCauseMap.put(NO_RESPONSE_FROM_BASE_STATION, "NO_RESPONSE_FROM_BASE_STATION");
          sFailCauseMap.put(REJECTED_BY_BASE_STATION, "REJECTED_BY_BASE_STATION");
          sFailCauseMap.put(CONCURRENT_SERVICES_INCOMPATIBLE, "CONCURRENT_SERVICES_INCOMPATIBLE");
          sFailCauseMap.put(NO_CDMA_SERVICE, "NO_CDMA_SERVICE");
          sFailCauseMap.put(RUIM_NOT_PRESENT, "RUIM_NOT_PRESENT");
          sFailCauseMap.put(CDMA_RETRY_ORDER, "CDMA_RETRY_ORDER");
          sFailCauseMap.put(ACCESS_BLOCK, "ACCESS_BLOCK");
          sFailCauseMap.put(ACCESS_BLOCK_ALL, "ACCESS_BLOCK_ALL");
          sFailCauseMap.put(IS707B_MAX_ACCESS_PROBES, "IS707B_MAX_ACCESS_PROBES");
          sFailCauseMap.put(THERMAL_EMERGENCY, "THERMAL_EMERGENCY");
          sFailCauseMap.put(CONCURRENT_SERVICES_NOT_ALLOWED, "CONCURRENT_SERVICES_NOT_ALLOWED");
          sFailCauseMap.put(INCOMING_CALL_REJECTED, "INCOMING_CALL_REJECTED");
          sFailCauseMap.put(NO_SERVICE_ON_GATEWAY, "NO_SERVICE_ON_GATEWAY");
          sFailCauseMap.put(NO_GPRS_CONTEXT, "NO_GPRS_CONTEXT");
          sFailCauseMap.put(ILLEGAL_MS, "ILLEGAL_MS");
          sFailCauseMap.put(ILLEGAL_ME, "ILLEGAL_ME");
          sFailCauseMap.put(GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED,
                  "GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED");
          sFailCauseMap.put(GPRS_SERVICES_NOT_ALLOWED, "GPRS_SERVICES_NOT_ALLOWED");
          sFailCauseMap.put(MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
                  "MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK");
          sFailCauseMap.put(IMPLICITLY_DETACHED, "IMPLICITLY_DETACHED");
          sFailCauseMap.put(PLMN_NOT_ALLOWED, "PLMN_NOT_ALLOWED");
          sFailCauseMap.put(LOCATION_AREA_NOT_ALLOWED, "LOCATION_AREA_NOT_ALLOWED");
          sFailCauseMap.put(GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN,
                  "GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN");
          sFailCauseMap.put(PDP_DUPLICATE, "PDP_DUPLICATE");
          sFailCauseMap.put(UE_RAT_CHANGE, "UE_RAT_CHANGE");
          sFailCauseMap.put(CONGESTION, "CONGESTION");
          sFailCauseMap.put(NO_PDP_CONTEXT_ACTIVATED, "NO_PDP_CONTEXT_ACTIVATED");
          sFailCauseMap.put(ACCESS_CLASS_DSAC_REJECTION, "ACCESS_CLASS_DSAC_REJECTION");
          sFailCauseMap.put(PDP_ACTIVATE_MAX_RETRY_FAILED, "PDP_ACTIVATE_MAX_RETRY_FAILED");
          sFailCauseMap.put(RADIO_ACCESS_BEARER_FAILURE, "RADIO_ACCESS_BEARER_FAILURE");
          sFailCauseMap.put(ESM_UNKNOWN_EPS_BEARER_CONTEXT, "ESM_UNKNOWN_EPS_BEARER_CONTEXT");
          sFailCauseMap.put(DRB_RELEASED_BY_RRC, "DRB_RELEASED_BY_RRC");
          sFailCauseMap.put(CONNECTION_RELEASED, "CONNECTION_RELEASED");
          sFailCauseMap.put(EMM_DETACHED, "EMM_DETACHED");
          sFailCauseMap.put(EMM_ATTACH_FAILED, "EMM_ATTACH_FAILED");
          sFailCauseMap.put(EMM_ATTACH_STARTED, "EMM_ATTACH_STARTED");
          sFailCauseMap.put(LTE_NAS_SERVICE_REQUEST_FAILED, "LTE_NAS_SERVICE_REQUEST_FAILED");
          sFailCauseMap.put(DUPLICATE_BEARER_ID, "DUPLICATE_BEARER_ID");
          sFailCauseMap.put(ESM_COLLISION_SCENARIOS, "ESM_COLLISION_SCENARIOS");
          sFailCauseMap.put(ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK,
                  "ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK");
          sFailCauseMap.put(ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER,
                  "ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER");
          sFailCauseMap.put(ESM_BAD_OTA_MESSAGE, "ESM_BAD_OTA_MESSAGE");
          sFailCauseMap.put(ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL,
                  "ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL");
          sFailCauseMap.put(ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT,
                  "ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT");
          sFailCauseMap.put(DS_EXPLICIT_DEACTIVATION, "DS_EXPLICIT_DEACTIVATION");
          sFailCauseMap.put(ESM_LOCAL_CAUSE_NONE, "ESM_LOCAL_CAUSE_NONE");
          sFailCauseMap.put(LTE_THROTTLING_NOT_REQUIRED, "LTE_THROTTLING_NOT_REQUIRED");
          sFailCauseMap.put(ACCESS_CONTROL_LIST_CHECK_FAILURE,
                  "ACCESS_CONTROL_LIST_CHECK_FAILURE");
          sFailCauseMap.put(SERVICE_NOT_ALLOWED_ON_PLMN, "SERVICE_NOT_ALLOWED_ON_PLMN");
          sFailCauseMap.put(EMM_T3417_EXPIRED, "EMM_T3417_EXPIRED");
          sFailCauseMap.put(EMM_T3417_EXT_EXPIRED, "EMM_T3417_EXT_EXPIRED");
          sFailCauseMap.put(RRC_UPLINK_DATA_TRANSMISSION_FAILURE,
                  "RRC_UPLINK_DATA_TRANSMISSION_FAILURE");
          sFailCauseMap.put(RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER,
                  "RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER");
          sFailCauseMap.put(RRC_UPLINK_CONNECTION_RELEASE, "RRC_UPLINK_CONNECTION_RELEASE");
          sFailCauseMap.put(RRC_UPLINK_RADIO_LINK_FAILURE, "RRC_UPLINK_RADIO_LINK_FAILURE");
          sFailCauseMap.put(RRC_UPLINK_ERROR_REQUEST_FROM_NAS, "RRC_UPLINK_ERROR_REQUEST_FROM_NAS");
          sFailCauseMap.put(RRC_CONNECTION_ACCESS_STRATUM_FAILURE,
                  "RRC_CONNECTION_ACCESS_STRATUM_FAILURE");
          sFailCauseMap.put(RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS,
                  "RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS");
          sFailCauseMap.put(RRC_CONNECTION_ACCESS_BARRED, "RRC_CONNECTION_ACCESS_BARRED");
          sFailCauseMap.put(RRC_CONNECTION_CELL_RESELECTION, "RRC_CONNECTION_CELL_RESELECTION");
          sFailCauseMap.put(RRC_CONNECTION_CONFIG_FAILURE, "RRC_CONNECTION_CONFIG_FAILURE");
          sFailCauseMap.put(RRC_CONNECTION_TIMER_EXPIRED, "RRC_CONNECTION_TIMER_EXPIRED");
          sFailCauseMap.put(RRC_CONNECTION_LINK_FAILURE, "RRC_CONNECTION_LINK_FAILURE");
          sFailCauseMap.put(RRC_CONNECTION_CELL_NOT_CAMPED, "RRC_CONNECTION_CELL_NOT_CAMPED");
          sFailCauseMap.put(RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE,
                  "RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE");
          sFailCauseMap.put(RRC_CONNECTION_REJECT_BY_NETWORK, "RRC_CONNECTION_REJECT_BY_NETWORK");
          sFailCauseMap.put(RRC_CONNECTION_NORMAL_RELEASE, "RRC_CONNECTION_NORMAL_RELEASE");
          sFailCauseMap.put(RRC_CONNECTION_RADIO_LINK_FAILURE, "RRC_CONNECTION_RADIO_LINK_FAILURE");
          sFailCauseMap.put(RRC_CONNECTION_REESTABLISHMENT_FAILURE,
                  "RRC_CONNECTION_REESTABLISHMENT_FAILURE");
          sFailCauseMap.put(RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER,
                  "RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER");
          sFailCauseMap.put(RRC_CONNECTION_ABORT_REQUEST, "RRC_CONNECTION_ABORT_REQUEST");
          sFailCauseMap.put(RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR,
                  "RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR");
          sFailCauseMap.put(NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH,
                  "NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH");
          sFailCauseMap.put(NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH,
                  "NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH");
          sFailCauseMap.put(ESM_PROCEDURE_TIME_OUT, "ESM_PROCEDURE_TIME_OUT");
          sFailCauseMap.put(INVALID_CONNECTION_ID, "INVALID_CONNECTION_ID");
          sFailCauseMap.put(MAXIMIUM_NSAPIS_EXCEEDED, "MAXIMIUM_NSAPIS_EXCEEDED");
          sFailCauseMap.put(INVALID_PRIMARY_NSAPI, "INVALID_PRIMARY_NSAPI");
          sFailCauseMap.put(CANNOT_ENCODE_OTA_MESSAGE, "CANNOT_ENCODE_OTA_MESSAGE");
          sFailCauseMap.put(RADIO_ACCESS_BEARER_SETUP_FAILURE, "RADIO_ACCESS_BEARER_SETUP_FAILURE");
          sFailCauseMap.put(PDP_ESTABLISH_TIMEOUT_EXPIRED, "PDP_ESTABLISH_TIMEOUT_EXPIRED");
          sFailCauseMap.put(PDP_MODIFY_TIMEOUT_EXPIRED, "PDP_MODIFY_TIMEOUT_EXPIRED");
          sFailCauseMap.put(PDP_INACTIVE_TIMEOUT_EXPIRED, "PDP_INACTIVE_TIMEOUT_EXPIRED");
          sFailCauseMap.put(PDP_LOWERLAYER_ERROR, "PDP_LOWERLAYER_ERROR");
          sFailCauseMap.put(PDP_MODIFY_COLLISION, "PDP_MODIFY_COLLISION");
          sFailCauseMap.put(MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED,
                  "MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED");
          sFailCauseMap.put(NAS_REQUEST_REJECTED_BY_NETWORK, "NAS_REQUEST_REJECTED_BY_NETWORK");
          sFailCauseMap.put(RRC_CONNECTION_INVALID_REQUEST, "RRC_CONNECTION_INVALID_REQUEST");
          sFailCauseMap.put(RRC_CONNECTION_TRACKING_AREA_ID_CHANGED,
                  "RRC_CONNECTION_TRACKING_AREA_ID_CHANGED");
          sFailCauseMap.put(RRC_CONNECTION_RF_UNAVAILABLE, "RRC_CONNECTION_RF_UNAVAILABLE");
          sFailCauseMap.put(RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE,
                  "RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE");
          sFailCauseMap.put(RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE,
                  "RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE");
          sFailCauseMap.put(RRC_CONNECTION_ABORTED_AFTER_HANDOVER,
                  "RRC_CONNECTION_ABORTED_AFTER_HANDOVER");
          sFailCauseMap.put(RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE,
                  "RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE");
          sFailCauseMap.put(RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE,
                  "RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE");
          sFailCauseMap.put(IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER,
                  "IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER");
          sFailCauseMap.put(IMEI_NOT_ACCEPTED, "IMEI_NOT_ACCEPTED");
          sFailCauseMap.put(EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED,
                  "EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED");
          sFailCauseMap.put(EPS_SERVICES_NOT_ALLOWED_IN_PLMN, "EPS_SERVICES_NOT_ALLOWED_IN_PLMN");
          sFailCauseMap.put(MSC_TEMPORARILY_NOT_REACHABLE, "MSC_TEMPORARILY_NOT_REACHABLE");
          sFailCauseMap.put(CS_DOMAIN_NOT_AVAILABLE, "CS_DOMAIN_NOT_AVAILABLE");
          sFailCauseMap.put(ESM_FAILURE, "ESM_FAILURE");
          sFailCauseMap.put(MAC_FAILURE, "MAC_FAILURE");
          sFailCauseMap.put(SYNCHRONIZATION_FAILURE, "SYNCHRONIZATION_FAILURE");
          sFailCauseMap.put(UE_SECURITY_CAPABILITIES_MISMATCH, "UE_SECURITY_CAPABILITIES_MISMATCH");
          sFailCauseMap.put(SECURITY_MODE_REJECTED, "SECURITY_MODE_REJECTED");
          sFailCauseMap.put(UNACCEPTABLE_NON_EPS_AUTHENTICATION,
                  "UNACCEPTABLE_NON_EPS_AUTHENTICATION");
          sFailCauseMap.put(CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED,
                  "CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED");
          sFailCauseMap.put(NO_EPS_BEARER_CONTEXT_ACTIVATED, "NO_EPS_BEARER_CONTEXT_ACTIVATED");
          sFailCauseMap.put(INVALID_EMM_STATE, "INVALID_EMM_STATE");
          sFailCauseMap.put(NAS_LAYER_FAILURE, "NAS_LAYER_FAILURE");
          sFailCauseMap.put(MULTIPLE_PDP_CALL_NOT_ALLOWED, "MULTIPLE_PDP_CALL_NOT_ALLOWED");
          sFailCauseMap.put(EMBMS_NOT_ENABLED, "EMBMS_NOT_ENABLED");
          sFailCauseMap.put(IRAT_HANDOVER_FAILED, "IRAT_HANDOVER_FAILED");
          sFailCauseMap.put(EMBMS_REGULAR_DEACTIVATION, "EMBMS_REGULAR_DEACTIVATION");
          sFailCauseMap.put(TEST_LOOPBACK_REGULAR_DEACTIVATION, "TEST_LOOPBACK_REGULAR_DEACTIVATION");
          sFailCauseMap.put(LOWER_LAYER_REGISTRATION_FAILURE, "LOWER_LAYER_REGISTRATION_FAILURE");
          sFailCauseMap.put(DATA_PLAN_EXPIRED, "DATA_PLAN_EXPIRED");
          sFailCauseMap.put(UMTS_HANDOVER_TO_IWLAN, "UMTS_HANDOVER_TO_IWLAN");
          sFailCauseMap.put(EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY,
                  "EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY");
          sFailCauseMap.put(EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE,
                  "EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE");
          sFailCauseMap.put(EVDO_HDR_CHANGED, "EVDO_HDR_CHANGED");
          sFailCauseMap.put(EVDO_HDR_EXITED, "EVDO_HDR_EXITED");
          sFailCauseMap.put(EVDO_HDR_NO_SESSION, "EVDO_HDR_NO_SESSION");
          sFailCauseMap.put(EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL,
                  "EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL");
          sFailCauseMap.put(EVDO_HDR_CONNECTION_SETUP_TIMEOUT, "EVDO_HDR_CONNECTION_SETUP_TIMEOUT");
          sFailCauseMap.put(FAILED_TO_ACQUIRE_COLOCATED_HDR, "FAILED_TO_ACQUIRE_COLOCATED_HDR");
          sFailCauseMap.put(OTASP_COMMIT_IN_PROGRESS, "OTASP_COMMIT_IN_PROGRESS");
          sFailCauseMap.put(NO_HYBRID_HDR_SERVICE, "NO_HYBRID_HDR_SERVICE");
          sFailCauseMap.put(HDR_NO_LOCK_GRANTED, "HDR_NO_LOCK_GRANTED");
          sFailCauseMap.put(DBM_OR_SMS_IN_PROGRESS, "DBM_OR_SMS_IN_PROGRESS");
          sFailCauseMap.put(HDR_FADE, "HDR_FADE");
          sFailCauseMap.put(HDR_ACCESS_FAILURE, "HDR_ACCESS_FAILURE");
          sFailCauseMap.put(UNSUPPORTED_1X_PREV, "UNSUPPORTED_1X_PREV");
          sFailCauseMap.put(LOCAL_END, "LOCAL_END");
          sFailCauseMap.put(NO_SERVICE, "NO_SERVICE");
          sFailCauseMap.put(FADE, "FADE");
          sFailCauseMap.put(NORMAL_RELEASE, "NORMAL_RELEASE");
          sFailCauseMap.put(ACCESS_ATTEMPT_ALREADY_IN_PROGRESS, "ACCESS_ATTEMPT_ALREADY_IN_PROGRESS");
          sFailCauseMap.put(REDIRECTION_OR_HANDOFF_IN_PROGRESS, "REDIRECTION_OR_HANDOFF_IN_PROGRESS");
          sFailCauseMap.put(EMERGENCY_MODE, "EMERGENCY_MODE");
          sFailCauseMap.put(PHONE_IN_USE, "PHONE_IN_USE");
          sFailCauseMap.put(INVALID_MODE, "INVALID_MODE");
          sFailCauseMap.put(INVALID_SIM_STATE, "INVALID_SIM_STATE");
          sFailCauseMap.put(NO_COLLOCATED_HDR, "NO_COLLOCATED_HDR");
          sFailCauseMap.put(UE_IS_ENTERING_POWERSAVE_MODE, "UE_IS_ENTERING_POWERSAVE_MODE");
          sFailCauseMap.put(DUAL_SWITCH, "DUAL_SWITCH");
          sFailCauseMap.put(PPP_TIMEOUT, "PPP_TIMEOUT");
          sFailCauseMap.put(PPP_AUTH_FAILURE, "PPP_AUTH_FAILURE");
          sFailCauseMap.put(PPP_OPTION_MISMATCH, "PPP_OPTION_MISMATCH");
          sFailCauseMap.put(PPP_PAP_FAILURE, "PPP_PAP_FAILURE");
          sFailCauseMap.put(PPP_CHAP_FAILURE, "PPP_CHAP_FAILURE");
          sFailCauseMap.put(PPP_CLOSE_IN_PROGRESS, "PPP_CLOSE_IN_PROGRESS");
          sFailCauseMap.put(LIMITED_TO_IPV4, "LIMITED_TO_IPV4");
          sFailCauseMap.put(LIMITED_TO_IPV6, "LIMITED_TO_IPV6");
          sFailCauseMap.put(VSNCP_TIMEOUT, "VSNCP_TIMEOUT");
          sFailCauseMap.put(VSNCP_GEN_ERROR, "VSNCP_GEN_ERROR");
          sFailCauseMap.put(VSNCP_APN_UNATHORIZED, "VSNCP_APN_UNATHORIZED");
          sFailCauseMap.put(VSNCP_PDN_LIMIT_EXCEEDED, "VSNCP_PDN_LIMIT_EXCEEDED");
          sFailCauseMap.put(VSNCP_NO_PDN_GATEWAY_ADDRESS, "VSNCP_NO_PDN_GATEWAY_ADDRESS");
          sFailCauseMap.put(VSNCP_PDN_GATEWAY_UNREACHABLE, "VSNCP_PDN_GATEWAY_UNREACHABLE");
          sFailCauseMap.put(VSNCP_PDN_GATEWAY_REJECT, "VSNCP_PDN_GATEWAY_REJECT");
          sFailCauseMap.put(VSNCP_INSUFFICIENT_PARAMETERS, "VSNCP_INSUFFICIENT_PARAMETERS");
          sFailCauseMap.put(VSNCP_RESOURCE_UNAVAILABLE, "VSNCP_RESOURCE_UNAVAILABLE");
          sFailCauseMap.put(VSNCP_ADMINISTRATIVELY_PROHIBITED, "VSNCP_ADMINISTRATIVELY_PROHIBITED");
          sFailCauseMap.put(VSNCP_PDN_ID_IN_USE, "VSNCP_PDN_ID_IN_USE");
          sFailCauseMap.put(VSNCP_SUBSCRIBER_LIMITATION, "VSNCP_SUBSCRIBER_LIMITATION");
          sFailCauseMap.put(VSNCP_PDN_EXISTS_FOR_THIS_APN, "VSNCP_PDN_EXISTS_FOR_THIS_APN");
          sFailCauseMap.put(VSNCP_RECONNECT_NOT_ALLOWED, "VSNCP_RECONNECT_NOT_ALLOWED");
          sFailCauseMap.put(IPV6_PREFIX_UNAVAILABLE, "IPV6_PREFIX_UNAVAILABLE");
          sFailCauseMap.put(HANDOFF_PREFERENCE_CHANGED, "HANDOFF_PREFERENCE_CHANGED");
          sFailCauseMap.put(OEM_DCFAILCAUSE_1, "OEM_DCFAILCAUSE_1");
          sFailCauseMap.put(OEM_DCFAILCAUSE_2, "OEM_DCFAILCAUSE_2");
          sFailCauseMap.put(OEM_DCFAILCAUSE_3, "OEM_DCFAILCAUSE_3");
          sFailCauseMap.put(OEM_DCFAILCAUSE_4, "OEM_DCFAILCAUSE_4");
          sFailCauseMap.put(OEM_DCFAILCAUSE_5, "OEM_DCFAILCAUSE_5");
          sFailCauseMap.put(OEM_DCFAILCAUSE_6, "OEM_DCFAILCAUSE_6");
          sFailCauseMap.put(OEM_DCFAILCAUSE_7, "OEM_DCFAILCAUSE_7");
          sFailCauseMap.put(OEM_DCFAILCAUSE_8, "OEM_DCFAILCAUSE_8");
          sFailCauseMap.put(OEM_DCFAILCAUSE_9, "OEM_DCFAILCAUSE_9");
          sFailCauseMap.put(OEM_DCFAILCAUSE_10, "OEM_DCFAILCAUSE_10");
          sFailCauseMap.put(OEM_DCFAILCAUSE_11, "OEM_DCFAILCAUSE_11");
          sFailCauseMap.put(OEM_DCFAILCAUSE_12, "OEM_DCFAILCAUSE_12");
          sFailCauseMap.put(OEM_DCFAILCAUSE_13, "OEM_DCFAILCAUSE_13");
          sFailCauseMap.put(OEM_DCFAILCAUSE_14, "OEM_DCFAILCAUSE_14");
          sFailCauseMap.put(OEM_DCFAILCAUSE_15, "OEM_DCFAILCAUSE_15");
          sFailCauseMap.put(REGISTRATION_FAIL, "REGISTRATION_FAIL");
          sFailCauseMap.put(GPRS_REGISTRATION_FAIL, "GPRS_REGISTRATION_FAIL");
          sFailCauseMap.put(SIGNAL_LOST, "SIGNAL_LOST");
          sFailCauseMap.put(PREF_RADIO_TECH_CHANGED, "PREF_RADIO_TECH_CHANGED");
          sFailCauseMap.put(RADIO_POWER_OFF, "RADIO_POWER_OFF");
          sFailCauseMap.put(TETHERED_CALL_ACTIVE, "TETHERED_CALL_ACTIVE");
          sFailCauseMap.put(ERROR_UNSPECIFIED, "ERROR_UNSPECIFIED");
          sFailCauseMap.put(UNKNOWN, "UNKNOWN");
          sFailCauseMap.put(RADIO_NOT_AVAILABLE, "RADIO_NOT_AVAILABLE");
          sFailCauseMap.put(UNACCEPTABLE_NETWORK_PARAMETER,
                  "UNACCEPTABLE_NETWORK_PARAMETER");
          sFailCauseMap.put(CONNECTION_TO_DATACONNECTIONAC_BROKEN,
                  "CONNECTION_TO_DATACONNECTIONAC_BROKEN");
          sFailCauseMap.put(LOST_CONNECTION, "LOST_CONNECTION");
          sFailCauseMap.put(RESET_BY_FRAMEWORK, "RESET_BY_FRAMEWORK");
      }
  
      private DataFailCause() {
      }
  
      /**
       * Map of subId -> set of data call setup permanent failure for the carrier.
       */
      private static final HashMap<Integer, Set<Integer>> sPermanentFailureCache =
              new HashMap<>();
  
      /**
       * Returns whether or not the fail cause is a failure that requires a modem restart
       *
       * @param context device context
       * @param cause data disconnect cause
       * @param subId subscription index
       * @return true if the fail cause code needs platform to trigger a modem restart.
       *
       * @hide
       */
      public static boolean isRadioRestartFailure(@NonNull Context context, @FailCause int cause,
                                                  int subId) {
          CarrierConfigManager configManager = (CarrierConfigManager)
                  context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
          if (configManager != null) {
              PersistableBundle b = configManager.getConfigForSubId(subId);
  
              if (b != null) {
                  if (cause == REGULAR_DEACTIVATION
                          && b.getBoolean(CarrierConfigManager
                          .KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL)) {
                      // This is for backward compatibility support. We need to continue support this
                      // old configuration until it gets removed in the future.
                      return true;
                  }
                  // Check the current configurations.
                  int[] causeCodes = b.getIntArray(CarrierConfigManager
                          .KEY_RADIO_RESTART_FAILURE_CAUSES_INT_ARRAY);
                  if (causeCodes != null) {
                      return Arrays.stream(causeCodes).anyMatch(i -> i == cause);
                  }
              }
          }
  
          return false;
      }
  
      /** @hide */
      public static boolean isPermanentFailure(@NonNull Context context, @FailCause int failCause,
                                               int subId) {
          synchronized (sPermanentFailureCache) {
  
              Set<Integer> permanentFailureSet = sPermanentFailureCache.get(subId);
  
              // In case of cache miss, we need to look up the settings from carrier config.
              if (permanentFailureSet == null) {
                  // Retrieve the permanent failure from carrier config
                  CarrierConfigManager configManager = (CarrierConfigManager)
                          context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
                  if (configManager != null) {
                      PersistableBundle b = configManager.getConfigForSubId(subId);
                      if (b != null) {
                          String[] permanentFailureStrings = b.getStringArray(CarrierConfigManager.
                                  KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS);
                          if (permanentFailureStrings != null) {
                              permanentFailureSet = new HashSet<>();
                              for (Map.Entry<Integer, String> e : sFailCauseMap.entrySet()) {
                                  if (ArrayUtils.contains(permanentFailureStrings, e.getValue())) {
                                      permanentFailureSet.add(e.getKey());
                                  }
                              }
                          }
                      }
                  }
  
                  // If we are not able to find the configuration from carrier config, use the default
                  // ones.
                  if (permanentFailureSet == null) {
                      permanentFailureSet = new HashSet<Integer>() {
                          {
                              add(OPERATOR_BARRED);
                              add(MISSING_UNKNOWN_APN);
                              add(UNKNOWN_PDP_ADDRESS_TYPE);
                              add(USER_AUTHENTICATION);
                              add(ACTIVATION_REJECT_GGSN);
                              add(SERVICE_OPTION_NOT_SUPPORTED);
                              add(SERVICE_OPTION_NOT_SUBSCRIBED);
                              add(NSAPI_IN_USE);
                              add(ONLY_IPV4_ALLOWED);
                              add(ONLY_IPV6_ALLOWED);
                              add(PROTOCOL_ERRORS);
                              add(RADIO_POWER_OFF);
                              add(TETHERED_CALL_ACTIVE);
                              add(RADIO_NOT_AVAILABLE);
                              add(UNACCEPTABLE_NETWORK_PARAMETER);
                              add(SIGNAL_LOST);
                          }
                      };
                  }
  
                  sPermanentFailureCache.put(subId, permanentFailureSet);
              }
  
              return permanentFailureSet.contains(failCause);
          }
      }
  
      /** @hide */
      public static boolean isEventLoggable(@FailCause int dataFailCause) {
          return (dataFailCause == OPERATOR_BARRED) || (dataFailCause == INSUFFICIENT_RESOURCES)
                  || (dataFailCause == UNKNOWN_PDP_ADDRESS_TYPE)
                  || (dataFailCause == USER_AUTHENTICATION)
                  || (dataFailCause == ACTIVATION_REJECT_GGSN)
                  || (dataFailCause == ACTIVATION_REJECT_UNSPECIFIED)
                  || (dataFailCause == SERVICE_OPTION_NOT_SUBSCRIBED)
                  || (dataFailCause == SERVICE_OPTION_NOT_SUPPORTED)
                  || (dataFailCause == SERVICE_OPTION_OUT_OF_ORDER)
                  || (dataFailCause == NSAPI_IN_USE)
                  || (dataFailCause == ONLY_IPV4_ALLOWED)
                  || (dataFailCause == ONLY_IPV6_ALLOWED)
                  || (dataFailCause == PROTOCOL_ERRORS)
                  || (dataFailCause == SIGNAL_LOST)
                  || (dataFailCause == RADIO_POWER_OFF)
                  || (dataFailCause == TETHERED_CALL_ACTIVE)
                  || (dataFailCause == UNACCEPTABLE_NETWORK_PARAMETER);
      }
  
      /** @hide */
      public static String toString(@FailCause int dataFailCause) {
          int cause = getFailCause(dataFailCause);
          return (cause == UNKNOWN) ? "UNKNOWN(" + dataFailCause + ")" : sFailCauseMap.get(cause);
      }
  
      /** @hide */
      public static int getFailCause(@FailCause int failCause) {
          if (sFailCauseMap.containsKey(failCause)) {
              return failCause;
          } else {
              return UNKNOWN;
          }
      }
  }
  