angler: fingerprint: update to SW20 am: cbdd3c6fe8
am: 1f6f5accc5

Change-Id: I256f9aff9fb2864f33ed2a5951530a25454da44d
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 60b0033..d2d9b80 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -87,6 +87,8 @@
 
 BOARD_HAL_STATIC_LIBRARIES := libdumpstate.angler
 
+TARGET_AUX_OS_VARIANT_LIST := angler
+
 TARGET_RECOVERY_FSTAB = device/huawei/angler/fstab.angler
 TARGET_COPY_OUT_VENDOR := vendor
 TARGET_RELEASETOOLS_EXTENSIONS := device/huawei/angler
diff --git a/camera/QCamera2/util/QCameraFlash.cpp b/camera/QCamera2/util/QCameraFlash.cpp
index 2ca8fb4..e5d3c4c 100644
--- a/camera/QCamera2/util/QCameraFlash.cpp
+++ b/camera/QCamera2/util/QCameraFlash.cpp
@@ -156,7 +156,7 @@
         ALOGE("%s: No flash available for camera id: %d",
                 __func__,
                 camera_id);
-        retVal = -EINVAL;
+        retVal = -ENOSYS;
     } else if (m_cameraOpen[camera_id]) {
         ALOGE("%s: Camera in use for camera id: %d",
                 __func__,
diff --git a/device.mk b/device.mk
index 081261e..48a3c05 100644
--- a/device.mk
+++ b/device.mk
@@ -23,7 +23,7 @@
 TARGET_USES_CHINOOK_SENSORHUB := false
 
 ifeq ($(TARGET_PREBUILT_KERNEL),)
-    LOCAL_KERNEL := device/huawei/angler-kernel/Image.gz-dtb
+  LOCAL_KERNEL := device/huawei/angler-kernel/Image.gz-dtb
 else
   LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL)
 endif
@@ -38,7 +38,9 @@
     device/huawei/angler/ueventd.angler.rc:root/ueventd.angler.rc \
     device/huawei/angler/init.recovery.angler.rc:root/init.recovery.angler.rc \
     device/huawei/angler/init.angler.power.sh:system/bin/init.angler.power.sh \
-    device/huawei/angler/uinput-fpc.kl:system/usr/keylayout/uinput-fpc.kl
+    device/huawei/angler/uinput-fpc.kl:system/usr/keylayout/uinput-fpc.kl \
+    device/huawei/angler/init.qcom.devwait.sh:system/bin/init.qcom.devwait.sh \
+    device/huawei/angler/init.qcom.devstart.sh:system/bin/init.qcom.devstart.sh
 
 ifeq ($(TARGET_USES_CHINOOK_SENSORHUB),true)
 PRODUCT_COPY_FILES += \
@@ -95,7 +97,8 @@
 
 # include fingerprintd
 PRODUCT_PACKAGES += \
-    fingerprintd
+    fingerprintd \
+    android.hardware.biometrics.fingerprint@2.1-impl
 
 # Delegation for OEM customization
 PRODUCT_OEM_PROPERTIES := \
@@ -183,7 +186,12 @@
     hwcomposer.msm8994 \
     libgenlock \
     memtrack.msm8994 \
-    lights.angler
+    android.hardware.memtrack@1.0-impl
+
+# Light HAL
+PRODUCT_PACKAGES += \
+    lights.angler \
+    android.hardware.light@2.0-impl
 
 USE_XML_AUDIO_POLICY_CONF := 1
 PRODUCT_PACKAGES += \
@@ -202,12 +210,6 @@
 PRODUCT_PACKAGES += \
     android.hardware.soundtrigger@2.0-impl
 
-# TODO(b/31817599) remove when angler_treble goes away
-ifeq ($(TARGET_PRODUCT), angler_treble)
-PRODUCT_PACKAGES += \
-    android.hardware.audio@2.0-service
-endif
-
 # Audio effects
 PRODUCT_PACKAGES += \
     libqcomvisualizer \
@@ -224,6 +226,12 @@
     libOmxVdecHevc \
     libOmxVenc
 
+PRODUCT_PACKAGES += \
+    android.hardware.audio@2.0-impl \
+    android.hardware.audio.effect@2.0-impl \
+    android.hardware.broadcastradio@1.0-impl \
+    android.hardware.soundtrigger@2.0-impl
+
 #CAMERA
 PRODUCT_PACKAGES += \
     camera.msm8994 \
@@ -248,7 +256,13 @@
 PRODUCT_PACKAGES += \
     sensors.angler \
     activity_recognition.angler \
-    context_hub.default
+    context_hub.default \
+    android.hardware.sensors@1.0-impl \
+    android.hardware.contexthub@1.0-impl \
+
+# new gatekeeper HAL
+PRODUCT_PACKAGES += \
+    android.hardware.gatekeeper@1.0-impl
 
 ifeq ($(TARGET_USES_CHINOOK_SENSORHUB),true)
 PRODUCT_PACKAGES += \
@@ -271,10 +285,12 @@
     charger_res_images
 
 PRODUCT_PACKAGES += \
+    android.hardware.wifi@1.0-service \
     libwpa_client \
     hostapd \
     wlutil \
     wificond \
+    wifilogd \
     wpa_supplicant \
     wpa_supplicant.conf
 
@@ -290,20 +306,46 @@
 # NFC
 PRODUCT_PACKAGES += \
     libnfc-nci \
-    nfc_nci.angler \
     NfcNci \
     Tag \
+    nfc_nci.angler \
     android.hardware.nfc@1.0-impl \
 
 ifeq ($(ENABLE_TREBLE), true)
 PRODUCT_PACKAGES += \
-    android.hardware.nfc@1.0-service
+    android.hardware.nfc@1.0-service \
+    android.hardware.vibrator@1.0-service   \
+    android.hardware.thermal@1.0-service    \
+    android.hardware.gatekeeper@1.0-service \
+
 endif
 
+# Keymaster HAL
+PRODUCT_PACKAGES += \
+    android.hardware.keymaster@3.0-impl
+
+ifeq ($(ENABLE_TREBLE), true)
+PRODUCT_PACKAGES += \
+    android.hardware.keymaster@3.0-service
+endif
+
+# Vibrator
+PRODUCT_PACKAGES += \
+    android.hardware.vibrator@1.0-impl
+
 # Power HAL
 PRODUCT_PACKAGES += \
     power.angler \
-    thermal.angler
+    android.hardware.power@1.0-impl \
+
+# Thermal HAL
+PRODUCT_PACKAGES += \
+    thermal.angler \
+    android.hardware.thermal@1.0-impl
+
+#GNSS HAL
+PRODUCT_PACKAGES += \
+    android.hardware.gnss@1.0-impl
 
 # Test HAL for hwbinder performance benchamrk  (only for userdebug and eng builds)
 ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
@@ -349,7 +391,13 @@
 
 # VR HAL
 PRODUCT_PACKAGES += \
-    vr.angler
+    vr.angler \
+    android.hardware.vr@1.0-impl
+
+ifeq ($(ENABLE_TREBLE), true)
+PRODUCT_PACKAGES += \
+    android.hardware.vr@1.0-service
+endif
 
 # Enable low power video mode for 4K encode
 PRODUCT_PROPERTY_OVERRIDES += \
@@ -470,7 +518,7 @@
 ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
 ifeq (,$(filter aosp_angler, $(TARGET_PRODUCT)))
 PRODUCT_PACKAGES += \
-    QXDMLoggerV2
+    NexusLogger
 endif # aosp_angler
 
 PRODUCT_COPY_FILES += \
diff --git a/dumpstate/Android.mk b/dumpstate/Android.mk
index 3800e19..3f263f1 100644
--- a/dumpstate/Android.mk
+++ b/dumpstate/Android.mk
@@ -15,7 +15,7 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_C_INCLUDES := frameworks/native/cmds/dumpstate
+LOCAL_STATIC_LIBRARIES := libdumpstateheaders
 
 LOCAL_SRC_FILES := dumpstate.cpp
 
diff --git a/dumpstate/dumpstate.cpp b/dumpstate/dumpstate.cpp
index a0a498d..afc5bda 100644
--- a/dumpstate/dumpstate.cpp
+++ b/dumpstate/dumpstate.cpp
@@ -18,24 +18,26 @@
 
 void dumpstate_board()
 {
-    dump_file("INTERRUPTS", "/proc/interrupts");
-    dump_file("RPM Stats", "/d/rpm_stats");
-    dump_file("Power Management Stats", "/d/rpm_master_stats");
-    run_command("SUBSYSTEM TOMBSTONES", 5, SU_PATH, "root", "ls", "-l", "/data/tombstones/ramdump", NULL);
-    dump_file("BAM DMUX Log", "/d/ipc_logging/bam_dmux/log");
-    dump_file("SMD Log", "/d/ipc_logging/smd/log");
-    dump_file("SMD PKT Log", "/d/ipc_logging/smd_pkt/log");
-    dump_file("IPC Router Log", "/d/ipc_logging/ipc_router/log");
-    dump_file("Enabled Clocks", "/d/clk/enabled_clocks");
-    dump_file("wlan", "/sys/module/bcmdhd/parameters/info_string");
-    run_command("ION HEAPS", 5, SU_PATH, "root", "/system/bin/sh", "-c", "for d in $(ls -d /d/ion/*); do for f in $(ls $d); do echo --- $d/$f; cat $d/$f; done; done", NULL);
-    run_command("Temperatures", 5, SU_PATH, "root", "/system/bin/sh", "-c", "for f in die_temp emmc_therm msm_therm pa_therm1 quiet_therm ; do echo -n \"$f : \" ; cat /sys/class/hwmon/hwmon1/device/$f ; done ; for f in `ls /sys/class/thermal` ; do type=`cat /sys/class/thermal/$f/type` ; temp=`cat /sys/class/thermal/$f/temp` ; echo \"$type: $temp\" ; done", NULL);
-    dump_file("dmesg-ramoops-0", "/sys/fs/pstore/dmesg-ramoops-0");
-    dump_file("dmesg-ramoops-1", "/sys/fs/pstore/dmesg-ramoops-1");
-    dump_file("LITTLE cluster time-in-state", "/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state");
-    run_command("LITTLE cluster cpuidle", 5, SU_PATH, "root", "/system/bin/sh", "-c", "for d in $(ls -d /sys/devices/system/cpu/cpu0/cpuidle/state*); do echo \"$d: `cat $d/name` `cat $d/desc` `cat $d/time` `cat $d/usage`\"; done", NULL);
-    dump_file("big cluster time-in-state", "/sys/devices/system/cpu/cpu4/cpufreq/stats/time_in_state");
-    run_command("big cluster cpuidle", 5, SU_PATH, "root", "/system/bin/sh", "-c", "for d in $(ls -d /sys/devices/system/cpu/cpu4/cpuidle/state*); do echo \"$d: `cat $d/name` `cat $d/desc` `cat $d/time` `cat $d/usage`\"; done", NULL);
-    dump_file("Battery:", "/sys/class/power_supply/bms/uevent");
-    run_command("Battery:", 5, SU_PATH, "root", "/system/bin/sh", "-c", "for f in 1 2 3 4 5 6 7 8; do echo $f > /sys/class/power_supply/bms/cycle_count_id; echo \"$f: `cat /sys/class/power_supply/bms/cycle_count`\"; done", NULL);
+    Dumpstate& ds = Dumpstate::GetInstance();
+
+    ds.DumpFile("INTERRUPTS", "/proc/interrupts");
+    ds.DumpFile("RPM Stats", "/d/rpm_stats");
+    ds.DumpFile("Power Management Stats", "/d/rpm_master_stats");
+    ds.RunCommand("SUBSYSTEM TOMBSTONES", {"ls", "-l", "/data/tombstones/ramdump"}, CommandOptions::AS_ROOT_5);
+    ds.DumpFile("BAM DMUX Log", "/d/ipc_logging/bam_dmux/log");
+    ds.DumpFile("SMD Log", "/d/ipc_logging/smd/log");
+    ds.DumpFile("SMD PKT Log", "/d/ipc_logging/smd_pkt/log");
+    ds.DumpFile("IPC Router Log", "/d/ipc_logging/ipc_router/log");
+    ds.DumpFile("Enabled Clocks", "/d/clk/enabled_clocks");
+    ds.DumpFile("wlan", "/sys/module/bcmdhd/parameters/info_string");
+    ds.RunCommand("ION HEAPS", {"/system/bin/sh", "-c", "for d in $(ls -d /d/ion/*); do for f in $(ls $d); do echo --- $d/$f; cat $d/$f; done; done"}, CommandOptions::AS_ROOT_5);
+    ds.RunCommand("Temperatures", {"/system/bin/sh", "-c", "for f in die_temp emmc_therm msm_therm pa_therm1 quiet_therm ; do echo -n \"$f : \" ; cat /sys/class/hwmon/hwmon1/device/$f ; done ; for f in `ls /sys/class/thermal` ; do type=`cat /sys/class/thermal/$f/type` ; temp=`cat /sys/class/thermal/$f/temp` ; echo \"$type: $temp\" ; done"}, CommandOptions::AS_ROOT_5);
+    ds.DumpFile("dmesg-ramoops-0", "/sys/fs/pstore/dmesg-ramoops-0");
+    ds.DumpFile("dmesg-ramoops-1", "/sys/fs/pstore/dmesg-ramoops-1");
+    ds.DumpFile("LITTLE cluster time-in-state", "/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state");
+    ds.RunCommand("LITTLE cluster cpuidle", {"/system/bin/sh", "-c", "for d in $(ls -d /sys/devices/system/cpu/cpu0/cpuidle/state*); do echo \"$d: `cat $d/name` `cat $d/desc` `cat $d/time` `cat $d/usage`\"; done"}, CommandOptions::AS_ROOT_5);
+    ds.DumpFile("big cluster time-in-state", "/sys/devices/system/cpu/cpu4/cpufreq/stats/time_in_state");
+    ds.RunCommand("big cluster cpuidle", {"/system/bin/sh", "-c", "for d in $(ls -d /sys/devices/system/cpu/cpu4/cpuidle/state*); do echo \"$d: `cat $d/name` `cat $d/desc` `cat $d/time` `cat $d/usage`\"; done"}, CommandOptions::AS_ROOT_5);
+    ds.DumpFile("Battery:", "/sys/class/power_supply/bms/uevent");
+    ds.RunCommand("Battery:", {"/system/bin/sh", "-c", "for f in 1 2 3 4 5 6 7 8; do echo $f > /sys/class/power_supply/bms/cycle_count_id; echo \"$f: `cat /sys/class/power_supply/bms/cycle_count`\"; done"}, CommandOptions::AS_ROOT_5);
 };
diff --git a/fstab.angler b/fstab.angler
index de0e0b1..0adb464 100644
--- a/fstab.angler
+++ b/fstab.angler
@@ -5,7 +5,7 @@
 
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/system       /system         ext4    ro,barrier=1,inode_readahead_blks=8                             wait,verify=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor       /vendor         ext4    ro,barrier=1,inode_readahead_blks=8                             wait,verify=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
-/dev/block/platform/soc.0/f9824900.sdhci/by-name/userdata     /data           ext4    noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,discard,errors=panic,inode_readahead_blks=8 wait,check,forcefdeorfbe=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
+/dev/block/platform/soc.0/f9824900.sdhci/by-name/userdata     /data           ext4    noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic,inode_readahead_blks=8 wait,check,forcefdeorfbe=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/cache        /cache          ext4    noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/persist      /persist        ext4    nosuid,nodev,barrier=1,data=ordered,nodelalloc,nomblk_io_submit,errors=panic wait,notrim
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/modem        /firmware       vfat    ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0        wait
diff --git a/fstab.aosp_angler b/fstab.aosp_angler
index ab57d3a..6dba761 100644
--- a/fstab.aosp_angler
+++ b/fstab.aosp_angler
@@ -5,7 +5,7 @@
 
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/system       /system         ext4    ro,barrier=1,inode_readahead_blks=8                             wait,verify=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor       /vendor         ext4    ro,barrier=1,inode_readahead_blks=8                             wait
-/dev/block/platform/soc.0/f9824900.sdhci/by-name/userdata     /data           ext4    noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,discard,errors=panic,inode_readahead_blks=8 wait,check,forcefdeorfbe=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
+/dev/block/platform/soc.0/f9824900.sdhci/by-name/userdata     /data           ext4    noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic,inode_readahead_blks=8 wait,check,forcefdeorfbe=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/cache        /cache          ext4    noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/persist      /persist        ext4    nosuid,nodev,barrier=1,data=ordered,nodelalloc,nomblk_io_submit,errors=panic wait,notrim
 /dev/block/platform/soc.0/f9824900.sdhci/by-name/modem        /firmware       vfat    ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0        wait
diff --git a/init.angler.qseecomd.sh b/init.angler.qseecomd.sh
index f126a77..25a477d 100644
--- a/init.angler.qseecomd.sh
+++ b/init.angler.qseecomd.sh
@@ -1,5 +1,6 @@
 #!/system/bin/sh
 
+registered="`getprop sys.listeners.registered`"
 while [ "$registered" != "true" ]
 do
     sleep 0.1
diff --git a/init.angler.rc b/init.angler.rc
index ef2b52a..ff80591 100755
--- a/init.angler.rc
+++ b/init.angler.rc
@@ -60,6 +60,9 @@
     # Update dm-verity state and set partition.*.verified properties
     verity_update_state
 
+    # Busy loop to wait for devices booted by devstart_sh just in case device not ready
+    exec - root root system -- /system/bin/init.qcom.devwait.sh
+
 on boot
     # execute script to set initial CPU settings
     # don't run as a service to avoid race conditions
@@ -140,8 +143,8 @@
     chown root system /sys/class/kgsl/kgsl-3d0/dispatch/inflight_low_latency
     chmod 0660 /sys/class/kgsl/kgsl-3d0/dispatch/inflight_low_latency
 
-    write /sys/block/mmcblk0/queue/rq_affinity 0
-    write /sys/block/mmcblk0/queue/scheduler noop
+    # Wifi firmware reload path
+    chown wifi wifi /sys/module/bcmdhd/parameters/firmware_path
 
 on property:init.svc.per_mgr=running
     start per_proxy
@@ -153,10 +156,21 @@
     symlink /dev/block/platform/soc.0/f9824900.sdhci /dev/block/bootdevice
 
     start qseecomd
+    # Busy loop to wait for qseecomd started
     exec - root root system -- /system/bin/init.angler.qseecomd.sh
+    # Start devices by sysfs trigger
+    start devstart_sh
 
 on post-fs-data
-    write /sys/kernel/boot_adsp/boot 1
+    # boot time fs tune
+    write /sys/block/mmcblk0/queue/iostats 0
+    write /sys/block/mmcblk0/queue/scheduler cfq
+    write /sys/block/mmcblk0/queue/iosched/slice_idle 0
+    write /sys/block/mmcblk0/queue/read_ahead_kb 2048
+    write /sys/block/mmcblk0/queue/nr_requests 256
+    write /sys/block/dm-0/queue/read_ahead_kb 2048
+    write /sys/block/dm-1/queue/read_ahead_kb 2048
+    write /sys/block/dm-2/queue/read_ahead_kb 2048
 
     # Ecc_Handler qcril.db
     mkdir /data/misc/radio 0770 system radio
@@ -262,6 +276,15 @@
 on property:sys.boot_completed=1
      #allow CPUs to go in deeper idle state than C0
      write /sys/module/lpm_levels/parameters/sleep_disabled 0
+     #end boot time fs tune
+     write /sys/block/mmcblk0/queue/scheduler noop
+     write /sys/block/mmcblk0/queue/rq_affinity 0
+     write /sys/block/mmcblk0/queue/read_ahead_kb 128
+     write /sys/block/mmcblk0/queue/nr_requests 128
+     write /sys/block/dm-0/queue/read_ahead_kb 128
+     write /sys/block/dm-1/queue/read_ahead_kb 128
+     write /sys/block/dm-2/queue/read_ahead_kb 128
+     write /sys/block/mmcblk0/queue/iostats 1
 
 # Search the laser device under /dev/input, then create symlink
 service InputEventFind /vendor/bin/InputEventFind
@@ -288,10 +311,10 @@
 on property:persist.sys.ssr.enable_ramdumps=0
     write /sys/module/subsystem_restart/parameters/enable_ramdumps 0
 
-service charger /sbin/healthd -c
+service charger /charger
     class charger
     group log
-    seclabel u:r:healthd:s0
+    seclabel u:r:charger:s0
     writepid /dev/cpuset/system-background/tasks
 
 service per_mgr /vendor/bin/pm-service
@@ -497,3 +520,9 @@
 on property:ro.boot.mode=hw-factory
     start diag_test_server
 
+service devstart_sh /system/bin/init.qcom.devstart.sh
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
diff --git a/init.qcom.devstart.sh b/init.qcom.devstart.sh
new file mode 100755
index 0000000..8e8cff5
--- /dev/null
+++ b/init.qcom.devstart.sh
@@ -0,0 +1,4 @@
+#!/system/bin/sh
+
+echo 1 > /sys/kernel/boot_adsp/boot
+setprop sys.qcom.devup 1
diff --git a/init.qcom.devwait.sh b/init.qcom.devwait.sh
new file mode 100755
index 0000000..aeee1d4
--- /dev/null
+++ b/init.qcom.devwait.sh
@@ -0,0 +1,8 @@
+#!/system/bin/sh
+
+up="`getprop sys.qcom.devup`"
+while [ "$up" != "1" ]
+do
+    sleep 0.1
+    up="`getprop sys.qcom.devup`"
+done
diff --git a/overlay/frameworks/base/core/res/res/values-mcc204-mnc04/config.xml b/overlay/frameworks/base/core/res/res/values-mcc204-mnc04/config.xml
index ee36992..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc204-mnc04/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc204-mnc04/config.xml
@@ -34,7 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>+31654501233</item>
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc222-mnc10/config.xml b/overlay/frameworks/base/core/res/res/values-mcc222-mnc10/config.xml
index d455066..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc222-mnc10/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc222-mnc10/config.xml
@@ -34,7 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>42020</item>
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc232-mnc01/config.xml b/overlay/frameworks/base/core/res/res/values-mcc232-mnc01/config.xml
index 595a62b..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc232-mnc01/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc232-mnc01/config.xml
@@ -34,7 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>66477</item>
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc234-mnc10/config.xml b/overlay/frameworks/base/core/res/res/values-mcc234-mnc10/config.xml
deleted file mode 100755
index a389824..0000000
--- a/overlay/frameworks/base/core/res/res/values-mcc234-mnc10/config.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2015, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>901</item>
-    </string-array>
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc234-mnc15/config.xml b/overlay/frameworks/base/core/res/res/values-mcc234-mnc15/config.xml
index 6fe0c05..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc234-mnc15/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc234-mnc15/config.xml
@@ -34,7 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>121</item>
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc262-mnc02/config.xml b/overlay/frameworks/base/core/res/res/values-mcc262-mnc02/config.xml
index 701aa17..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc262-mnc02/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc262-mnc02/config.xml
@@ -34,7 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>5500</item>
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc268-mnc01/config.xml b/overlay/frameworks/base/core/res/res/values-mcc268-mnc01/config.xml
index 043040d..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc268-mnc01/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc268-mnc01/config.xml
@@ -34,7 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>123</item>
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc276-mnc02/config.xml b/overlay/frameworks/base/core/res/res/values-mcc276-mnc02/config.xml
index 8244a45..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc276-mnc02/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc276-mnc02/config.xml
@@ -34,7 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>135</item>
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc284-mnc01/config.xml b/overlay/frameworks/base/core/res/res/values-mcc284-mnc01/config.xml
index 7f4ce0e..732ac3c 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc284-mnc01/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc284-mnc01/config.xml
@@ -34,6 +34,4 @@
         <item>INTERMEDIATE_POS=0</item>
         <item>SUPL_ES=0</item>
     </string-array>
-    <string-array translatable="false" name="config_default_vm_number">
-    </string-array>
 </resources>
diff --git a/overlay/frameworks/base/core/res/res/values-mcc311-mnc480/config.xml b/overlay/frameworks/base/core/res/res/values-mcc311-mnc480/config.xml
index 1944c36..6d7dce6 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc311-mnc480/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc311-mnc480/config.xml
@@ -17,9 +17,6 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>*86</item>
-    </string-array>
 
     <!-- Values for GPS configuration (Verizon) -->
     <string-array translatable="false" name="config_gpsParameters">
diff --git a/overlay/frameworks/base/core/res/res/values-mcc440-mnc20/config.xml b/overlay/frameworks/base/core/res/res/values-mcc440-mnc20/config.xml
index 1373d47..65f8453 100755
--- a/overlay/frameworks/base/core/res/res/values-mcc440-mnc20/config.xml
+++ b/overlay/frameworks/base/core/res/res/values-mcc440-mnc20/config.xml
@@ -20,9 +20,6 @@
 <!-- These resources are around just to allow their values to be customized
      for different hardware and product builds.  Do not translate. -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_default_vm_number">
-        <item>1416</item>
-    </string-array>
 
     <string-array translatable= "false" name= "config_mobile_hotspot_provision_app">
         <item>com.huawei.entitlement</item>
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 130d5e8..e78666f 100755
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -391,9 +391,13 @@
     <!-- Default list of files pinned by the Pinner Service -->
     <string-array translatable="false" name="config_defaultPinnerServiceFiles">
         <item>"/system/framework/arm64/boot-framework.oat"</item>
+        <item>"/system/framework/arm64/boot-framework.vdex"</item>
         <item>"/system/framework/oat/arm64/services.odex"</item>
+        <item>"/system/framework/oat/arm64/services.vdex"</item>
         <item>"/system/framework/arm64/boot.oat"</item>
+        <item>"/system/framework/arm64/boot.vdex"</item>
         <item>"/system/framework/arm64/boot-core-libart.oat"</item>
+        <item>"/system/framework/arm64/boot-core-libart.vdex"</item>
     </string-array>
 
     <!-- Enable system navigation keys. -->
diff --git a/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml b/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
index 7373bf8..e55a430 100755
--- a/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
+++ b/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
@@ -4,7 +4,29 @@
      file is read after any specific config file from the assets folder, so it
      must use explicit filters for MCC ad MNC if that is desired. -->
 <carrier_config_list>
+    <carrier_config mcc="204" mnc="04">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="3" />
+    </carrier_config>
+
+    <!-- VZW specific config -->
+    <carrier_config mcc="204" mnc="04" gid1="BAE0000000000000">
+        <boolean name="ci_action_on_sys_update_bool" value="true" />
+        <string name="ci_action_on_sys_update_extra_string">ServerID</string>
+        <string name="ci_action_on_sys_update_intent_string">com.android.omadm.service.CONFIGURATION_UPDATE</string>
+        <string name="ci_action_on_sys_update_extra_val_string">com.vzwdmserver</string>
+        <boolean name="config_wifi_disable_in_ecbm" value="true" />
+        <boolean name="disable_cdma_activation_code_bool" value="true" />
+        <string-array name="signal_redirection_receiver_string_array" num="1">
+            <item value="com.google.android.carrierentitlement/.VzwActivationReceiver" />
+        </string-array>
+        <string-array name="signal_dcfailure_receiver_string_array" num="1">
+            <item value="com.google.android.carrierentitlement/.VzwActivationReceiver" />
+        </string-array>
+    </carrier_config>
+
     <carrier_config mcc="204" mnc="08">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -28,6 +50,10 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="204" mnc="16">
+        <int name="smsToMmsTextThreshold" value="3" />
+    </carrier_config>
+
     <carrier_config mcc="206" mnc="01">
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
@@ -53,6 +79,7 @@
     </carrier_config>
 
     <carrier_config mcc="206" mnc="05">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -76,6 +103,31 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="208" mnc="01">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="4" />
+    </carrier_config>
+
+    <carrier_config mcc="208" mnc="10">
+        <int name="smsToMmsTextThreshold" value="7" />
+    </carrier_config>
+
+    <carrier_config mcc="214" mnc="01">
+        <boolean name="prefer_2g_bool" value="false" />
+        <int name="smsToMmsTextThreshold" value="5" />
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="214" mnc="02">
+        <int name="maxMessageSize" value="512000" />
+    </carrier_config>
+
+    <carrier_config mcc="222" mnc="10">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="-1" />
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
     <carrier_config mcc="222" mnc="99">
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
@@ -100,7 +152,12 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="228" mnc="01">
+        <int name="smsToMmsTextThreshold" value="11" />
+    </carrier_config>
+
     <carrier_config mcc="228" mnc="02">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -124,7 +181,21 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="230" mnc="01">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="232" mnc="01">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="5" />
+    </carrier_config>
+
+    <carrier_config mcc="232" mnc="03">
+        <int name="smsToMmsTextThreshold" value="5" />
+    </carrier_config>
+
     <carrier_config mcc="232" mnc="05">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -149,6 +220,7 @@
     </carrier_config>
 
     <carrier_config mcc="232" mnc="10">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -172,7 +244,61 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="234" mnc="15">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="20">
+        <boolean name="prefer_2g_bool" value="false" />
+        <int name="smsToMmsTextThreshold" value="11" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="30">
+        <boolean name="carrier_wfc_ims_available_bool" value="true" />
+        <boolean name="editable_wfc_mode_bool" value="false" />
+        <boolean name="prefer_2g_bool" value="false" />
+        <boolean name="hide_ims_apn_bool" value="true" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="30" gid1="B3">
+        <boolean name="carrier_name_override_bool" value="true" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="30" gid1="C3">
+        <boolean name="carrier_name_override_bool" value="true" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="31">
+        <boolean name="prefer_2g_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="32">
+        <boolean name="prefer_2g_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="33">
+        <boolean name="carrier_wfc_ims_available_bool" value="true" />
+        <boolean name="editable_wfc_mode_bool" value="false" />
+        <boolean name="prefer_2g_bool" value="false" />
+        <boolean name="hide_ims_apn_bool" value="true" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="34">
+        <boolean name="prefer_2g_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="234" mnc="86">
+        <boolean name="prefer_2g_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="235" mnc="94">
+        <boolean name="prefer_2g_bool" value="false" />
+        <int name="smsToMmsTextThreshold" value="11" />
+    </carrier_config>
+
     <carrier_config mcc="238" mnc="01">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -197,6 +323,7 @@
     </carrier_config>
 
     <carrier_config mcc="238" mnc="06">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -221,6 +348,7 @@
     </carrier_config>
 
     <carrier_config mcc="238" mnc="20">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -244,7 +372,13 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="240" mnc="01">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="5" />
+    </carrier_config>
+
     <carrier_config mcc="240" mnc="02">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -269,6 +403,7 @@
     </carrier_config>
 
     <carrier_config mcc="240" mnc="07">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -293,6 +428,8 @@
     </carrier_config>
 
     <carrier_config mcc="242" mnc="01">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -316,7 +453,102 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="244" mnc="05">
+        <int name="smsToMmsTextThreshold" value="5" />
+    </carrier_config>
+
+    <carrier_config mcc="244" mnc="12">
+        <int name="smsToMmsTextThreshold" value="5" />
+    </carrier_config>
+
+    <carrier_config mcc="244" mnc="21">
+        <int name="smsToMmsTextThreshold" value="5" />
+    </carrier_config>
+
+    <carrier_config mcc="248" mnc="02">
+        <int name="smsToMmsTextThreshold" value="4" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="01">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="02">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="03">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="05">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="07">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="11">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="12">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="15">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="16">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="17">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="19">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="20">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="35">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="37">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="38">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="250" mnc="39">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+   <carrier_config mcc="250" mnc="99">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="262" mnc="01">
+        <int name="smsToMmsTextThreshold" value="4" />
+    </carrier_config>
+
+    <carrier_config mcc="262" mnc="02">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="5" />
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
     <carrier_config mcc="262" mnc="07">
+        <int name="smsToMmsTextThreshold" value="4" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -340,7 +572,23 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="268" mnc="01">
+        <boolean name="prefer_2g_bool" value="false" />
+        <int name="maxMessageSize" value="614400" />
+        <int name="smsToMmsTextThreshold" value="5" />
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="268" mnc="03">
+        <int name="smsToMmsTextThreshold" value="11" />
+    </carrier_config>
+
+   <carrier_config mcc="268" mnc="06">
+        <int name="smsToMmsTextThreshold" value="11" />
+    </carrier_config>
+
     <carrier_config mcc="272" mnc="01">
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -364,7 +612,227 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="272" mnc="02">
+        <boolean name="prefer_2g_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="272" mnc="05">
+        <boolean name="prefer_2g_bool" value="false" />
+        <int name="smsToMmsTextThreshold" value="11" />
+    </carrier_config>
+
+    <carrier_config mcc="276" mnc="02">
+        <int name="maxMessageSize" value="307200" />
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="283" mnc="01">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="283" mnc="05">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="283" mnc="10">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="284" mnc="01">
+        <int name="maxMessageSize" value="524288" />
+        <int name="smsToMmsTextThreshold" value="2" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="220">
+        <int name="maxMessageSize" value="614400" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="221">
+        <int name="maxMessageSize" value="614400" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="370">
+        <int name="smsToMmsTextThreshold" value="4" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="490">
+        <int name="smsToMmsTextThreshold" value="6" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="500">
+        <int name="smsToMmsTextThreshold" value="6" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="510">
+        <int name="smsToMmsTextThreshold" value="6" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="520">
+        <int name="smsToMmsTextThreshold" value="6" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="610">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="302" mnc="720">
+        <int name="smsToMmsTextThreshold" value="4" />
+    </carrier_config>
+
+    <carrier_config mcc="310" mnc="004">
+        <boolean name="ci_action_on_sys_update_bool" value="true" />
+        <string name="ci_action_on_sys_update_extra_string">ServerID</string>
+        <string name="ci_action_on_sys_update_intent_string">com.android.omadm.service.CONFIGURATION_UPDATE</string>
+        <string name="ci_action_on_sys_update_extra_val_string">com.vzwdmserver</string>
+        <boolean name="config_wifi_disable_in_ecbm" value="true" />
+        <boolean name="disable_cdma_activation_code_bool" value="true" />
+        <string-array name="signal_redirection_receiver_string_array" num="1">
+            <item value="com.google.android.carrierentitlement/.VzwActivationReceiver" />
+        </string-array>
+        <string-array name="signal_dcfailure_receiver_string_array" num="1">
+            <item value="com.google.android.carrierentitlement/.VzwActivationReceiver" />
+        </string-array>
+    </carrier_config>
+
+    <carrier_config mcc="310" mnc="090">
+        <int name="maxMessageSize" value="1048576" />
+    </carrier_config>
+
+    <carrier_config mcc="310" mnc="260">
+        <boolean name="carrier_allow_turnoff_ims_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="310" mnc="410">
+        <int name="smsToMmsTextThreshold" value="5" />
+    </carrier_config>
+
+    <carrier_config mcc="311" mnc="480">
+        <boolean name="ci_action_on_sys_update_bool" value="true" />
+        <string name="ci_action_on_sys_update_extra_string">ServerID</string>
+        <string name="ci_action_on_sys_update_intent_string">com.android.omadm.service.CONFIGURATION_UPDATE</string>
+        <string name="ci_action_on_sys_update_extra_val_string">com.vzwdmserver</string>
+        <boolean name="config_wifi_disable_in_ecbm" value="true" />
+        <boolean name="disable_cdma_activation_code_bool" value="true" />
+        <string-array name="signal_redirection_receiver_string_array" num="1">
+            <item value="com.google.android.carrierentitlement/.VzwActivationReceiver" />
+        </string-array>
+        <string-array name="signal_dcfailure_receiver_string_array" num="1">
+            <item value="com.google.android.carrierentitlement/.VzwActivationReceiver" />
+        </string-array>
+    </carrier_config>
+
+    <!-- Tracfone on Vzw requests empty spn -->
+    <carrier_config mcc="311" mnc="480" gid1="BA01270000000000">
+        <boolean name="carrier_name_override_bool" value="true" />
+    </carrier_config>
+
+    <carrier_config mcc="334" mnc="020">
+        <int name="smsToMmsTextThreshold" value="12" />
+    </carrier_config>
+
+    <carrier_config mcc="334" mnc="050">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="334" mnc="090">
+        <int name="maxMessageSize" value="614400" />
+        <int name="smsToMmsTextThreshold" value="9" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="840">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="854">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="855">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="856">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="857">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="858">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="859">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="860">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="861">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="862">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="863">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="864">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="865">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="866">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="867">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="868">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="869">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="870">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="871">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="872">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="873">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="405" mnc="874">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
+    <carrier_config mcc="440" mnc="00">
+        <boolean name="carrier_volte_available_bool" value="false" />
+    </carrier_config>
+
     <carrier_config mcc="440" mnc="10">
+        <boolean name="carrier_volte_available_bool" value="false" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -389,6 +857,9 @@
     </carrier_config>
 
     <carrier_config mcc="440" mnc="20">
+        <int name="ims_dtmf_tone_delay_int" value="300" />
+        <int name="gsm_dtmf_tone_delay_int" value="300" />
+        <int name="smsToMmsTextThreshold" value="5" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -411,6 +882,22 @@
         </int-array>
     </carrier_config>
 
+    <carrier_config mcc="440" mnc="50">
+        <boolean name="carrier_volte_available_bool" value="true" />
+    </carrier_config>
+
+    <carrier_config mcc="440" mnc="51">
+        <boolean name="carrier_volte_available_bool" value="true" />
+    </carrier_config>
+
+    <carrier_config mcc="450" mnc="05">
+        <int name="smsToMmsTextThreshold" value="1" />
+    </carrier_config>
+
+    <carrier_config mcc="505" mnc="01">
+        <int name="maxMessageSize" value="614400" />
+    </carrier_config>
+
     <carrier_config mcc="505" mnc="02">
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
@@ -436,6 +923,7 @@
     </carrier_config>
 
     <carrier_config mcc="505" mnc="03">
+        <int name="smsToMmsTextThreshold" value="3" />
         <!-- The list of ril radio technologies (see ServiceState.java) which only support
              a single data connection at one time.  This may change by carrier via
              overlays (some don't support multiple pdp on UMTS).  All unlisted radio
@@ -458,4 +946,46 @@
             <item value="15" /> <!-- HSPAP -->
         </int-array>
     </carrier_config>
+
+    <carrier_config mcc="655" mnc="01">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="730" mnc="01">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="730" mnc="10">
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="732" mnc="101">
+        <int name="smsToMmsTextThreshold" value="12" />
+    </carrier_config>
+
+    <carrier_config mcc="732" mnc="103">
+        <boolean name="prefer_2g_bool" value="false" />
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="732" mnc="111">
+        <boolean name="prefer_2g_bool" value="false" />
+        <int name="smsToMmsTextThreshold" value="10" />
+    </carrier_config>
+
+    <carrier_config mcc="732" mnc="123">
+        <int name="smsToMmsTextThreshold" value="6" />
+    </carrier_config>
+    <carrier_config mcc="450" mnc="02">
+        <boolean name="carrier_instant_lettering_available_bool" value="false" />
+    </carrier_config>
+    <carrier_config mcc="450" mnc="05">
+        <boolean name="carrier_instant_lettering_available_bool" value="false" />
+    </carrier_config>
+    <carrier_config mcc="450" mnc="06">
+        <boolean name="carrier_instant_lettering_available_bool" value="false" />
+    </carrier_config>
+    <carrier_config mcc="450" mnc="08">
+        <boolean name="carrier_instant_lettering_available_bool" value="false" />
+    </carrier_config>
 </carrier_config_list>
diff --git a/power/power.c b/power/power.c
index cc1aba2..357ee2a 100644
--- a/power/power.c
+++ b/power/power.c
@@ -101,10 +101,6 @@
 int display_boost;
 static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
 
-static struct hw_module_methods_t power_module_methods = {
-    .open = NULL,
-};
-
 static void power_init(struct power_module *module)
 {
     ALOGI("QCOM power HAL initing.");
@@ -750,6 +746,44 @@
     return 0;
 }
 
+static int power_open(const hw_module_t* module, const char* name,
+                    hw_device_t** device)
+{
+    ALOGD("%s: enter; name=%s", __FUNCTION__, name);
+    int retval = 0; /* 0 is ok; -1 is error */
+
+    if (strcmp(name, POWER_HARDWARE_MODULE_ID) == 0) {
+        power_module_t *dev = (power_module_t *)calloc(1,
+                sizeof(power_module_t));
+
+        if (dev) {
+            /* Common hw_device_t fields */
+            dev->common.tag = HARDWARE_DEVICE_TAG;
+            dev->common.module_api_version = POWER_MODULE_API_VERSION_0_5;
+            dev->common.hal_api_version = HARDWARE_HAL_API_VERSION;
+
+            dev->init = power_init;
+            dev->powerHint = power_hint;
+            dev->setInteractive = set_interactive;
+            dev->get_number_of_platform_modes = get_number_of_platform_modes;
+            dev->get_platform_low_power_stats = get_platform_low_power_stats;
+            dev->get_voter_list = get_voter_list;
+
+            *device = (hw_device_t*)dev;
+        } else
+            retval = -ENOMEM;
+    } else {
+        retval = -EINVAL;
+    }
+
+    ALOGD("%s: exit %d", __FUNCTION__, retval);
+    return retval;
+}
+
+static struct hw_module_methods_t power_module_methods = {
+    .open = power_open,
+};
+
 struct power_module HAL_MODULE_INFO_SYM = {
     .common = {
         .tag = HARDWARE_MODULE_TAG,
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
index 4f7f58b..ad4c871 100644
--- a/sepolicy/file_contexts
+++ b/sepolicy/file_contexts
@@ -79,6 +79,7 @@
 /persist/sensors(/.*)?                                              u:object_r:persist_sensors_file:s0
 
 /sys/bus/msm_subsys(/.*)?                                                                                  u:object_r:sysfs_msm_subsys:s0
+/sys/kernel/boot_adsp/boot                                                                                 u:object_r:sysfs_msm_subsys:s0
 /sys/devices/bt_bcm4358\.[0-9]+/rfkill/rfkill0/state                                                           u:object_r:sysfs_bluetooth_writable:s0
 /sys/devices/soc\.0/\w+\.qcom,\w+/subsys[0-9]/restart_level                                                u:object_r:sysfs_msm_subsys_toggle:s0
 /sys/devices/soc\.0/fd900000\.qcom,mdss_mdp/qcom,mdss_fb_primary\.[0-9]+/leds(/.*)?                        u:object_r:sysfs_led:s0
@@ -126,6 +127,8 @@
 /vendor/bin/ims_rtp_daemon               u:object_r:ims_exec:s0
 /system/bin/init\.angler\.power\.sh      u:object_r:init-power-sh_exec:s0
 /system/bin/init\.angler\.qseecomd\.sh   u:object_r:init-angler-qseecomd-sh_exec:s0
+/system/bin/init\.qcom\.devstart\.sh     u:object_r:init-qcom-devstart-sh_exec:s0
+/system/bin/init\.qcom\.devwait\.sh      u:object_r:init-qcom-devwait-sh_exec:s0
 /system/bin/init\.mcfg\.sh               u:object_r:init-mcfg-sh_exec:s0
 /system/bin/init\.radio\.sh              u:object_r:init-radio-sh_exec:s0
 /vendor/bin/irsc_util                    u:object_r:irsc_util_exec:s0
@@ -175,3 +178,5 @@
 # Sysfs files used by nanoapp_cmd
 /sys/devices/virtual/nanohub/nanohub(/.*)? u:object_r:sysfs_nanoapp_cmd:s0
 
+# NFC hal
+/system/bin/hw/nfc_hal_pn54x    u:object_r:nfc_hal_pn54x_exec:s0
diff --git a/sepolicy/init-devstart-sh.te b/sepolicy/init-devstart-sh.te
new file mode 100644
index 0000000..24004d2
--- /dev/null
+++ b/sepolicy/init-devstart-sh.te
@@ -0,0 +1,15 @@
+type init-qcom-devstart-sh, domain;
+type init-qcom-devstart-sh_exec, exec_type, file_type;
+
+init_daemon_domain(init-qcom-devstart-sh)
+
+allow init-qcom-devstart-sh shell_exec:file rx_file_perms;
+
+# execute toybox/toolbox
+allow init-qcom-devstart-sh toolbox_exec:file rx_file_perms;
+
+# Set the sys.qcom.devup property
+set_prop(init-qcom-devstart-sh, system_prop)
+
+# Set boot_adsp and boot_slpi to 1
+allow init-qcom-devstart-sh sysfs_msm_subsys:file w_file_perms;
diff --git a/sepolicy/init-devwait-sh.te b/sepolicy/init-devwait-sh.te
new file mode 100644
index 0000000..1529536
--- /dev/null
+++ b/sepolicy/init-devwait-sh.te
@@ -0,0 +1,9 @@
+type init-qcom-devwait-sh, domain;
+type init-qcom-devwait-sh_exec, exec_type, file_type;
+
+init_daemon_domain(init-qcom-devwait-sh)
+
+allow init-qcom-devwait-sh shell_exec:file rx_file_perms;
+
+# execute toybox/toolbox
+allow init-qcom-devwait-sh toolbox_exec:file rx_file_perms;
diff --git a/sepolicy/nfc.te b/sepolicy/nfc.te
new file mode 100644
index 0000000..90488a1
--- /dev/null
+++ b/sepolicy/nfc.te
@@ -0,0 +1,2 @@
+# allow NFC process to call into the NFC HAL
+binder_call(nfc, nfc_hal_pn54x)
diff --git a/sepolicy/nfc_hal_pn54x.te b/sepolicy/nfc_hal_pn54x.te
new file mode 100644
index 0000000..2830a71
--- /dev/null
+++ b/sepolicy/nfc_hal_pn54x.te
@@ -0,0 +1,30 @@
+# nfc subsystem
+type nfc_hal_pn54x, domain;
+type nfc_hal_pn54x_exec, exec_type, file_type;
+
+# may be started by init
+init_daemon_domain(nfc_hal_pn54x)
+
+allow nfc_hal_pn54x nfc_hal_pn54x_exec:file rx_file_perms;
+
+# hwbinder access
+hwbinder_use(nfc_hal_pn54x)
+
+# call into NFC process (callbacks)
+binder_call(nfc_hal_pn54x, nfc)
+
+# Set NFC properties
+set_prop(nfc_hal_pn54x, nfc_prop)
+
+# NFC device access.
+allow nfc_hal_pn54x nfc_device:chr_file rw_file_perms;
+
+# Data file accesses.
+allow nfc_hal_pn54x nfc_data_file:dir create_dir_perms;
+allow nfc_hal_pn54x nfc_data_file:notdevfile_class_set create_file_perms;
+
+allow nfc_hal_pn54x sysfs_nfc_power_writable:file rw_file_perms;
+allow nfc_hal_pn54x sysfs:file write;
+
+# TODO: added to match above sysfs rule. Remove me?
+allow nfc_hal_pn54x sysfs_usb:file write;