Merge cherrypicks of [15844355, 15840994, 15844397, 15844398] into sparse-7731482-L14200000951182699

Change-Id: I5f0a61c5a7a964cc66c1e3131ee7678af7afd3f4
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..361ce94
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,13 @@
+BasedOnStyle: Google
+AccessModifierOffset: -2
+AllowShortFunctionsOnASingleLine: Inline
+ColumnLimit: 100
+CommentPragmas: NOLINT:.*
+DerivePointerAlignment: false
+IndentWidth: 4
+ContinuationIndentWidth: 8
+PointerAlignment: Right
+TabWidth: 4
+UseTab: Never
+AllowShortIfStatementsOnASingleLine: false
+SpacesBeforeTrailingComments: 2
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..57ebe85
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,36 @@
+soong_namespace {
+    imports: [
+        "hardware/google/interfaces",
+        "hardware/google/pixel",
+    ],
+}
+
+package {
+    default_applicable_licenses: ["device_google_gs101_license"],
+}
+
+// Added automatically by a large-scale-change that took the approach of
+// 'apply every license found to every target'. While this makes sure we respect
+// every license restriction, it may not be entirely correct.
+//
+// e.g. GPL in an MIT project might only apply to the contrib/ directory.
+//
+// Please consider splitting the single license below into multiple licenses,
+// taking care not to lose any license_kind information, and overriding the
+// default license using the 'licenses: [...]' property on targets as needed.
+//
+// For unused files, consider creating a 'fileGroup' with "//visibility:private"
+// to attach the license to, and including a comment whether the files may be
+// used in the current project.
+// See: http://go/android-license-faq
+license {
+    name: "device_google_gs101_license",
+    visibility: [":__subpackages__"],
+    license_kinds: [
+        "SPDX-license-identifier-Apache-2.0",
+        "SPDX-license-identifier-BSD",
+    ],
+    license_text: [
+        "NOTICE",
+    ],
+}
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..e6a9462
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,30 @@
+#
+# Copyright (C) 2011 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.
+#
+
+# WARNING: Everything listed here will be built on ALL platforms,
+# including x86, the universal, and the SDK.  Modules must be uniquely
+# named (liblights.panda), and must build everywhere, or limit themselves
+# to only building on ARM if they include assembly. Individual makefiles
+# are responsible for having their own logic, for fine-grained control.
+
+LOCAL_PATH := $(call my-dir)
+
+# if some modules are built directly from this directory (not subdirectories),
+# their rules should be written here.
+
+ifeq ($(USES_DEVICE_GOOGLE_GS101),true)
+  include $(call first-makefiles-under,$(LOCAL_PATH))
+endif
diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk
new file mode 100644
index 0000000..4689c68
--- /dev/null
+++ b/BoardConfig-common.mk
@@ -0,0 +1,412 @@
+#
+# Copyright (C) 2019 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.
+#
+include build/make/target/board/BoardConfigMainlineCommon.mk
+include build/make/target/board/BoardConfigPixelCommon.mk
+
+# Should be uncommented after fixing vndk-sp violation is fixed.
+PRODUCT_FULL_TREBLE_OVERRIDE := true
+
+# This prop, when set to 1, will prevent OTA tooling from generating a VABC OTA,
+# even if device actually supports it.
+# Remove this once P21 decides to use VABC OTA
+BOARD_DONT_USE_VABC_OTA := true
+
+# HACK : To fix up after bring up multimedia devices.
+TARGET_SOC := gs101
+
+TARGET_SOC_NAME := google
+
+USES_DEVICE_GOOGLE_GS101 := true
+
+TARGET_ARCH := arm64
+TARGET_ARCH_VARIANT := armv8-2a
+TARGET_CPU_ABI := arm64-v8a
+TARGET_CPU_VARIANT := cortex-a55
+TARGET_CPU_VARIANT_RUNTIME := cortex-a55
+
+ifeq (,$(filter %_64,$(TARGET_PRODUCT)))
+TARGET_2ND_ARCH := arm
+TARGET_2ND_ARCH_VARIANT := armv8-a
+TARGET_2ND_CPU_ABI := armeabi-v7a
+TARGET_2ND_CPU_ABI2 := armeabi
+TARGET_2ND_CPU_VARIANT := generic
+TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a53
+endif
+
+BOARD_KERNEL_CMDLINE += dyndbg=\"func alloc_contig_dump_pages +p\"
+BOARD_KERNEL_CMDLINE += earlycon=exynos4210,0x10A00000 console=ttySAC0,115200 androidboot.console=ttySAC0 printk.devkmsg=on
+BOARD_KERNEL_CMDLINE += cma_sysfs.experimental=Y
+BOARD_KERNEL_CMDLINE += stack_depot_disable=off page_pinner=on
+BOARD_BOOTCONFIG += androidboot.boot_devices=14700000.ufs
+
+TARGET_NO_BOOTLOADER := true
+TARGET_NO_RADIOIMAGE := true
+ifeq (,$(TARGET_PREBUILT_KERNEL))
+TARGET_NO_KERNEL := true
+ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
+BOARD_PREBUILT_BOOTIMAGE := $(TARGET_KERNEL_DIR)/boot.img
+else
+BOARD_PREBUILT_BOOTIMAGE := $(TARGET_KERNEL_DIR)/boot-user.img
+endif
+else
+TARGET_NO_KERNEL := false
+endif
+BOARD_USES_GENERIC_KERNEL_IMAGE := true
+BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true
+BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
+TARGET_RECOVERY_WIPE := device/google/gs101/conf/recovery.wipe
+TARGET_RECOVERY_FSTAB := device/google/gs101/conf/fstab.gs101
+TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888
+TARGET_RECOVERY_UI_MARGIN_HEIGHT := 165
+TARGET_RECOVERY_UI_LIB := \
+	librecovery_ui_pixel \
+	libfstab
+
+AB_OTA_UPDATER := true
+
+AB_OTA_PARTITIONS += \
+	system \
+	system_ext \
+	product \
+	vbmeta_system
+
+ifneq ($(PRODUCT_BUILD_BOOT_IMAGE),false)
+AB_OTA_PARTITIONS += boot
+endif
+ifneq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),false)
+AB_OTA_PARTITIONS += vendor_boot
+AB_OTA_PARTITIONS += dtbo
+endif
+ifneq ($(PRODUCT_BUILD_VBMETA_IMAGE),false)
+AB_OTA_PARTITIONS += vbmeta
+endif
+
+# EMULATOR common modules
+BOARD_EMULATOR_COMMON_MODULES := liblight
+
+OVERRIDE_RS_DRIVER := libRSDriverArm.so
+BOARD_EGL_CFG := device/google/gs101/conf/egl.cfg
+#BOARD_USES_HGL := true
+USE_OPENGL_RENDERER := true
+NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
+BOARD_USES_EXYNOS5_COMMON_GRALLOC := true
+BOARD_USES_ALIGN_RESTRICTION := false
+BOARD_USES_GRALLOC_ION_SYNC := true
+
+# This should be the same value as USE_SWIFTSHADER in device.mk
+BOARD_USES_SWIFTSHADER := false
+
+# Gralloc4
+SOONG_CONFIG_NAMESPACES += arm_gralloc
+SOONG_CONFIG_arm_gralloc := \
+	gralloc_arm_no_external_afbc \
+	mali_gpu_support_afbc_basic \
+	mali_gpu_support_afbc_wideblk \
+	gralloc_init_afbc \
+	gralloc_ion_sync_on_lock \
+	dpu_support_1010102_afbc
+
+ifeq ($(BOARD_USES_SWIFTSHADER),true)
+SOONG_CONFIG_arm_gralloc_gralloc_arm_no_external_afbc := true
+SOONG_CONFIG_arm_gralloc_mali_gpu_support_afbc_basic := false
+SOONG_CONFIG_arm_gralloc_mali_gpu_support_afbc_wideblk := false
+SOONG_CONFIG_arm_gralloc_gralloc_init_afbc := false
+SOONG_CONFIG_arm_gralloc_dpu_support_1010102_afbc := false
+else
+SOONG_CONFIG_arm_gralloc_gralloc_arm_no_external_afbc := false
+SOONG_CONFIG_arm_gralloc_mali_gpu_support_afbc_basic := true
+SOONG_CONFIG_arm_gralloc_mali_gpu_support_afbc_wideblk := true
+SOONG_CONFIG_arm_gralloc_gralloc_init_afbc := true
+SOONG_CONFIG_arm_gralloc_dpu_support_1010102_afbc := true
+endif # ifeq ($(BOARD_USES_SWIFTSHADER),true)
+SOONG_CONFIG_arm_gralloc_gralloc_ion_sync_on_lock := $(BOARD_USES_GRALLOC_ION_SYNC)
+
+# Graphics
+#BOARD_USES_EXYNOS_DATASPACE_FEATURE := true
+
+# Enable chain partition for system.
+BOARD_AVB_VBMETA_SYSTEM := system system_ext product
+BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
+BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048
+BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
+BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1
+
+# Enable chained vbmeta for boot images
+BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
+BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA2048
+BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
+BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2
+
+TARGET_USERIMAGES_USE_EXT4 := true
+TARGET_USERIMAGES_USE_F2FS := true
+BOARD_USERDATAIMAGE_PARTITION_SIZE := 11796480000
+BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE := f2fs
+PRODUCT_FS_COMPRESSION := 1
+BOARD_FLASH_BLOCK_SIZE := 4096
+BOARD_MOUNT_SDCARD_RW := true
+
+# product.img
+BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := ext4
+TARGET_COPY_OUT_PRODUCT := product
+
+# system_ext.img
+BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := ext4
+TARGET_COPY_OUT_SYSTEM_EXT := system_ext
+
+########################
+# Video Codec
+########################
+# 1. Exynos C2
+BOARD_USE_CSC_FILTER := false
+BOARD_USE_DEC_SW_CSC := true
+BOARD_USE_ENC_SW_CSC := true
+BOARD_SUPPORT_MFC_ENC_RGB := true
+BOARD_USE_BLOB_ALLOCATOR := false
+########################
+
+BOARD_SUPER_PARTITION_SIZE := 8531214336
+BOARD_SUPER_PARTITION_GROUPS := google_dynamic_partitions
+# Set size to BOARD_SUPER_PARTITION_SIZE - overhead (4MiB) (b/182237294)
+BOARD_GOOGLE_DYNAMIC_PARTITIONS_SIZE := 8527020032
+BOARD_GOOGLE_DYNAMIC_PARTITIONS_PARTITION_LIST := \
+    system \
+    system_ext \
+    product \
+    vendor \
+    vendor_dlkm
+
+# Set error limit to BOARD_SUPER_PARTITON_SIZE - 500MB
+BOARD_SUPER_PARTITION_ERROR_LIMIT := 8006926336
+
+#
+# AUDIO & VOICE
+#
+BOARD_USES_GENERIC_AUDIO := true
+
+SOONG_CONFIG_NAMESPACES += aoc_audio_func
+
+SOONG_CONFIG_aoc_audio_func += \
+    ext_hidl
+
+SOONG_CONFIG_aoc_audio_func_ext_hidl := true
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+SOONG_CONFIG_aoc_audio_func += \
+    dump_usecase_data \
+    hal_socket_control \
+    record_tunning_keys
+
+SOONG_CONFIG_aoc_audio_func_dump_usecase_data := true
+SOONG_CONFIG_aoc_audio_func_hal_socket_control := true
+SOONG_CONFIG_aoc_audio_func_record_tunning_keys := true
+endif
+
+ifneq (,$(filter aosp_%,$(TARGET_PRODUCT)))
+SOONG_CONFIG_aoc_audio_func += aosp_build
+
+SOONG_CONFIG_aoc_audio_func_aosp_build := true
+endif
+
+# Primary AudioHAL Configuration
+#BOARD_USE_COMMON_AUDIOHAL := true
+#BOARD_USE_CALLIOPE_AUDIOHAL := false
+#BOARD_USE_AUDIOHAL := true
+
+# Compress Offload Configuration
+#BOARD_USE_OFFLOAD_AUDIO := true
+#BOARD_USE_OFFLOAD_EFFECT := false
+
+# SoundTriggerHAL Configuration
+#BOARD_USE_SOUNDTRIGGER_HAL := false
+
+# HWComposer
+BOARD_HWC_VERSION := libhwc2.1
+TARGET_RUNNING_WITHOUT_SYNC_FRAMEWORK := false
+BOARD_HDMI_INCAPABLE := true
+TARGET_USES_HWC2 := true
+HWC_SKIP_VALIDATE := true
+HWC_SUPPORT_RENDER_INTENT := true
+HWC_SUPPORT_COLOR_TRANSFORM := true
+#BOARD_USES_DISPLAYPORT := true
+# if AFBC is enabled, must set ro.vendor.ddk.set.afbc=1
+BOARD_USES_EXYNOS_AFBC_FEATURE := true
+#BOARD_USES_HDRUI_GLES_CONVERSION := true
+
+BOARD_LIBACRYL_DEFAULT_COMPOSITOR := fimg2d_gs101
+BOARD_LIBACRYL_G2D_HDR_PLUGIN := libacryl_hdr_plugin
+
+# HWCServices
+BOARD_USES_HWC_SERVICES := true
+
+# WiFiDisplay
+# BOARD_USES_VIRTUAL_DISPLAY := true
+# BOARD_USES_VDS_EXYNOS_HWC := true
+# BOARD_USES_WIFI_DISPLAY:= true
+# BOARD_USES_EGL_SURFACE_FOR_COMPOSITION_MIXED := true
+# BOARD_USES_VDS_YUV420SPM := true
+# BOARD_USES_VDS_OTHERFORMAT := true
+# BOARD_USES_VDS_DEBUG_FLAG := true
+# BOARD_USES_DISABLE_COMPOSITIONTYPE_GLES := true
+# BOARD_USES_SECURE_ENCODER_ONLY := true
+# BOARD_USES_TSMUX := true
+
+# SCALER
+BOARD_USES_DEFAULT_CSC_HW_SCALER := true
+BOARD_DEFAULT_CSC_HW_SCALER := 4
+BOARD_USES_SCALER_M2M1SHOT := true
+
+# Device Tree
+BOARD_USES_DT := true
+BOARD_INCLUDE_DTB_IN_BOOTIMG := true
+BOARD_PREBUILT_DTBIMAGE_DIR := $(TARGET_KERNEL_DIR)
+BOARD_PREBUILT_DTBOIMAGE := $(BOARD_PREBUILT_DTBIMAGE_DIR)/dtbo.img
+
+# PLATFORM LOG
+TARGET_USES_LOGD := true
+
+# LIBHWJPEG
+#TARGET_USES_UNIVERSAL_LIBHWJPEG := true
+#LIBHWJPEG_HWSCALER_ID := 0
+
+#Keymaster
+#BOARD_USES_KEYMASTER_VER1 := true
+
+#FMP
+#BOARD_USES_FMP_DM_CRYPT := true
+#BOARD_USES_FMP_FSCRYPTO := true
+BOARD_USES_METADATA_PARTITION := true
+
+# SKIA
+#BOARD_USES_SKIA_MULTITHREADING := true
+#BOARD_USES_FIMGAPI_V5X := true
+
+# SECCOMP Policy
+BOARD_SECCOMP_POLICY = device/google/gs101/seccomp_policy
+
+#CURL
+BOARD_USES_CURL := true
+
+# Sensor HAL
+BOARD_USES_EXYNOS_SENSORS_DUMMY := true
+
+# VISION
+# Exynos vision framework (EVF)
+#TARGET_USES_EVF := true
+# HW acceleration
+#TARGET_USES_VPU_KERNEL := true
+#TARGET_USES_SCORE_KERNEL := true
+#TARGET_USES_CL_KERNEL := false
+
+# exynos RIL
+TARGET_EXYNOS_RIL_SOURCE := true
+ENABLE_VENDOR_RIL_SERVICE := true
+
+# GNSS
+# BOARD_USES_EXYNOS_GNSS_DUMMY := true
+
+# Bluetooth defines
+# TODO(b/123695868): Remove the need for this
+BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := \
+	build/make/target/board/mainline_arm64/bluetooth
+
+TARGET_BOARD_KERNEL_HEADERS := $(TARGET_KERNEL_DIR)/kernel-headers
+
+#VNDK
+BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true
+BOARD_VNDK_VERSION := current
+
+# H/W align restriction of MM IPs
+BOARD_EXYNOS_S10B_FORMAT_ALIGN := 64
+
+# WiFi
+BOARD_WLAN_DEVICE := bcmdhd
+BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd
+BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_bcmdhd
+WPA_SUPPLICANT_VERSION := VER_0_8_X
+BOARD_WPA_SUPPLICANT_DRIVER := NL80211
+BOARD_HOSTAPD_DRIVER := NL80211
+# Wifi interface combination - {1 STA + 1 AP (bridged or single)} or {1 STA + 1 P2P}
+# or {1 STA + 1 NAN} or {2 STA}
+WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{P2P, NAN, AP}, 1}}, {{{STA}, 2}}
+WIFI_FEATURE_WIFI_EXT_HAL := true
+WIFI_FEATURE_IMU_DETECTION := true
+# Avoid Wifi reset on MAC Address change
+WIFI_AVOID_IFACE_RESET_MAC_CHANGE := true
+WIFI_FEATURE_HOSTAPD_11AX := true
+
+# NeuralNetworks
+GPU_SOURCE_PRESENT := $(wildcard vendor/arm/mali/valhall)
+GPU_PREBUILD_PRESENT := $(wildcard vendor/google_devices/gs101/prebuilts/gpu/libs)
+ifneq "$(or $(GPU_SOURCE_PRESENT),$(GPU_PREBUILD_PRESENT))" ""
+ARMNN_COMPUTE_CL_ENABLE := 1
+else
+ARMNN_COMPUTE_CL_ENABLE := 0
+endif
+ARMNN_COMPUTE_NEON_ENABLE := 1
+
+# Boot.img
+BOARD_RAMDISK_USE_LZ4     := true
+#BOARD_KERNEL_BASE        := 0x80000000
+#BOARD_KERNEL_PAGESIZE    := 2048
+#BOARD_KERNEL_OFFSET      := 0x80000
+#BOARD_RAMDISK_OFFSET     := 0x4000000
+BOARD_BOOT_HEADER_VERSION := 4
+BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION)
+
+BOARD_VENDOR_RAMDISK_FRAGMENTS := dlkm
+BOARD_VENDOR_RAMDISK_FRAGMENT.dlkm.KERNEL_MODULE_DIRS := top
+
+# Enable AVB2.0
+BOARD_AVB_ENABLE := true
+BOARD_BOOTIMAGE_PARTITION_SIZE := 0x04000000
+BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE := 0x04000000
+BOARD_DTBOIMG_PARTITION_SIZE := 0x01000000
+
+# System As Root
+BOARD_BUILD_SYSTEM_ROOT_IMAGE := false
+
+# Vendor ramdisk image for kernel development
+BOARD_BUILD_VENDOR_RAMDISK_IMAGE := true
+
+BOARD_VENDOR_KERNEL_MODULES_BLOCKLIST_FILE := device/google/gs101/vendor_dlkm.blocklist
+
+KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)
+KERNEL_MODULES := $(wildcard $(KERNEL_MODULE_DIR)/*.ko)
+
+BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := $(strip $(shell cat $(KERNEL_MODULE_DIR)/vendor_boot.modules.load))
+ifndef BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD
+$(error vendor_boot.modules.load not found or empty)
+endif
+BOARD_VENDOR_RAMDISK_KERNEL_MODULES := $(addprefix $(KERNEL_MODULE_DIR)/, $(notdir $(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD)))
+
+BOARD_VENDOR_KERNEL_MODULES_LOAD := $(strip $(shell cat $(KERNEL_MODULE_DIR)/vendor_dlkm.modules.load))
+ifndef BOARD_VENDOR_KERNEL_MODULES_LOAD
+$(error vendor_dlkm.modules.load not found or empty)
+endif
+BOARD_VENDOR_KERNEL_MODULES := $(KERNEL_MODULES)
+
+# Using BUILD_COPY_HEADERS
+BUILD_BROKEN_USES_BUILD_COPY_HEADERS := true
+
+include device/google/gs101-sepolicy/gs101-sepolicy.mk
+
+# Battery options
+BOARD_KERNEL_CMDLINE += at24.write_timeout=100
+
+# Enable larger logbuf
+BOARD_KERNEL_CMDLINE += log_buf_len=1024K
+
+-include vendor/google_devices/gs101/proprietary/BoardConfigVendor.mk
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000..12538be
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,85 @@
+# Copyright (C) 2012 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.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list.  These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list.  E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+$(call add-clean-step, find $(PRODUCT_OUT) -name "*.apk" | xargs rm)
+
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libsurfaceflinger_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libui_intermediates)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/root/default.prop)
+$(call add-clean-step, rm -f $(TARGET_OUT)/build.prop)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/etc/mixer_paths_lb.xml)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/etc/permissions/android.hardware.camera.xml)
+
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/root/*)
+# Power HAL 1.0
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/init/android.hardware.power@1.0-service.rc)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.power@1.0-service)
+# Power HAL HIDL
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power@1.3-service.pixel-libperfmgr.rc)
+
+# Health storage HAL
+$(call add-clean-step, find $(PRODUCT_OUT) -type f -name "*android.hardware.health.storage@1.0*" -print0 | xargs -0 rm -f)
+
+# Update to USB HAL 1.3
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb@1.2-service.slider)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb@1.2-service.slider.rc)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb@1.2-service.slider.xml)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb@1.3-service.slider)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb@1.3-service.slider.rc)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb@1.3-service.slider.xml)
+
+# Power Stats HAL 1.0 to AIDL
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.power.stats@1.0-service.gs101)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power.stats@1.0-service.gs101.rc)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.power.stats@1.0-service.gs101.xml)
+
+# Keymaster to KeyMint
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.keymaster@4.0-service.trusty)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/init/android.hardware.keymaster@4.0-service.trusty.rc)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.keymaster@4.0-service.trusty.xml)
+$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/wait_for_strongbox)
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..316b4eb
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,190 @@
+
+   Copyright (c) 2014, 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.
+
+   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.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
diff --git a/aosp_common.mk b/aosp_common.mk
new file mode 100644
index 0000000..1ad6eb7
--- /dev/null
+++ b/aosp_common.mk
@@ -0,0 +1,52 @@
+#
+# Copyright 2020 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.
+#
+
+#
+# All components inherited here go to system image
+#
+ifeq (,$(filter %_64,$(TARGET_PRODUCT)))
+$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
+else
+$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)
+endif
+$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_system.mk)
+
+# Enable CSI checking
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
+
+#
+# All components inherited here go to system_ext image
+#
+$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_system_ext.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_system_ext.mk)
+
+#
+# All components inherited here go to product image
+#
+$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_product.mk)
+
+#
+# All components inherited here go to vendor image
+#
+# TODO(b/136525499): move *_vendor.mk into the vendor makefile later
+$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
+
+#$(call inherit-product, device/google/gs101/device.mk)
+#$(call inherit-product-if-exists, vendor/google_devices/gs101/proprietary/device-vendor.mk)
+
+# TODO: fix
+# PRODUCT_RESTRICT_VENDOR_FILES := all
diff --git a/compatibility_matrix.xml b/compatibility_matrix.xml
new file mode 100644
index 0000000..264e854
--- /dev/null
+++ b/compatibility_matrix.xml
@@ -0,0 +1,84 @@
+<!--
+    Autogenerated skeleton compatibility matrix.
+    Use with caution. Modify it to suit your needs.
+    All HALs are set to optional.
+    Many entries other than HALs are zero-filled and
+    require human attention.
+-->
+<compatibility-matrix version="1.0" type="device">
+    <hal format="hidl" optional="true">
+        <name>android.frameworks.displayservice</name>
+        <version>1.0</version>
+        <interface>
+            <name>IDisplayService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.frameworks.schedulerservice</name>
+        <version>1.0</version>
+        <interface>
+            <name>ISchedulingPolicyService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.frameworks.sensorservice</name>
+        <version>1.0</version>
+        <interface>
+            <name>ISensorManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.graphics.composer</name>
+        <version>2.1</version>
+        <interface>
+            <name>IComposer</name>
+            <instance>vr</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hidl.allocator</name>
+        <version>1.0</version>
+        <interface>
+            <name>IAllocator</name>
+            <instance>ashmem</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hidl.manager</name>
+        <version>1.0</version>
+        <interface>
+            <name>IServiceManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hidl.memory</name>
+        <version>1.0</version>
+        <interface>
+            <name>IMapper</name>
+            <instance>ashmem</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hidl.token</name>
+        <version>1.0</version>
+        <interface>
+            <name>ITokenManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.system.wifi.keystore</name>
+        <version>1.0</version>
+        <interface>
+            <name>IKeystore</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <vndk>
+        <version>0.0.0</version>
+    </vndk>
+</compatibility-matrix>
diff --git a/component-overrides.xml b/component-overrides.xml
new file mode 100644
index 0000000..9aa38e7
--- /dev/null
+++ b/component-overrides.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2020 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.
+-->
+<config>
+    <component-override package="com.android.bluetooth" >
+        <component class=".sap.SapService" enabled="true" />
+    </component-override>
+    <component-override package="com.google.android.apps.tips" >
+        <component class=".TipsMain" enabled="true" />
+    </component-override>
+</config>
diff --git a/conf/egl.cfg b/conf/egl.cfg
new file mode 100644
index 0000000..4515dfd
--- /dev/null
+++ b/conf/egl.cfg
@@ -0,0 +1 @@
+0 1 mali
diff --git a/conf/fstab.gs101 b/conf/fstab.gs101
new file mode 100644
index 0000000..ef56f87
--- /dev/null
+++ b/conf/fstab.gs101
@@ -0,0 +1,23 @@
+# Android fstab file.
+#
+# The filesystem that contains the filesystem checker binary (typically /system) cannot
+# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
+#
+#<src>                                                   <mnt_point>                 <type>  <mnt_flags and options>  <fs_mgr_flags>
+system                                                   /system                     ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128
+system_ext                                               /system_ext                 ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount
+product                                                  /product                    ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_system,logical,first_stage_mount
+vendor                                                   /vendor                     ext4    ro,barrier=1             wait,slotselect,avb=vbmeta_vendor,logical,first_stage_mount
+vendor_dlkm                                              /vendor_dlkm                ext4    ro,barrier=1             wait,slotselect,avb=vbmeta,logical,first_stage_mount
+/dev/block/platform/14700000.ufs/by-name/boot            /boot                       emmc    defaults                 slotselect,avb=boot,first_stage_mount
+/dev/block/platform/14700000.ufs/by-name/efs             /mnt/vendor/efs             ext4    defaults,noatime,rw      wait,check,formattable
+/dev/block/platform/14700000.ufs/by-name/efs_backup      /mnt/vendor/efs_backup      ext4    defaults,noatime,rw      wait,check,formattable
+/dev/block/platform/14700000.ufs/by-name/modem_userdata  /mnt/vendor/modem_userdata  ext4    defaults,noatime,rw      wait,check,formattable
+/dev/block/platform/14700000.ufs/by-name/modem           /mnt/vendor/modem_img       ext4    ro,defaults,context=u:object_r:modem_img_file:s0,barrier=1    wait,slotselect
+/dev/block/platform/14700000.ufs/by-name/misc            /misc                       emmc    defaults                 wait
+/dev/block/platform/14700000.ufs/by-name/metadata        /metadata                   ext4    noatime,nosuid,nodev,data=journal,commit=1    wait,check,formattable,first_stage_mount,metadata_csum
+/dev/block/platform/14700000.ufs/by-name/pvmfw           /pvmfw                      emmc    defaults                 wait,slotselect,avb=pvmfw,first_stage_mount
+/dev/block/platform/14700000.ufs/by-name/userdata        /data                       f2fs    noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier,inlinecrypt,compress_extension=apk,compress_extension=apex,compress_extension=so,atgc,checkpoint_merge    latemount,wait,check,quota,formattable,sysfs_path=/dev/sys/block/bootdevice,checkpoint=fs,reservedsize=128M,fileencryption=::inlinecrypt_optimized+wrappedkey_v0,metadata_encryption=:wrappedkey_v0,keydirectory=/metadata/vold/metadata_encryption,fscompress,readahead_size_kb=128
+/dev/block/platform/14700000.ufs/by-name/vbmeta          /vbmeta                     emmc    defaults                 slotselect,first_stage_mount
+/dev/block/zram0                                         none                        swap    defaults                 zramsize=3221225472,max_comp_streams=8,zram_backingdev_size=512M
+/devices/platform/11110000.usb*                          auto                        vfat    defaults                 voldmanaged=usb:auto
diff --git a/conf/fstab.persist b/conf/fstab.persist
new file mode 100644
index 0000000..779a05d
--- /dev/null
+++ b/conf/fstab.persist
@@ -0,0 +1,4 @@
+# Android fstab file.
+# <src>                  <mnt_point>         <type>    <mnt_flags and options>                               <fs_mgr_flags>
+# Keep persist in an fstab file, since we need to run fsck on it after abnormal shutdown.
+/dev/block/platform/14700000.ufs/by-name/persist  /mnt/vendor/persist ext4      noatime,nosuid,nodev,data=journal,commit=1 wait,check,formattable,metadata_csum
diff --git a/conf/fstab.postinstall b/conf/fstab.postinstall
new file mode 100644
index 0000000..955fba7
--- /dev/null
+++ b/conf/fstab.postinstall
@@ -0,0 +1,4 @@
+# Android fstab file.
+#
+#<src>    <mnt_point>     <type>  <mnt_flags and options>   <fs_mgr_flags>
+system    /postinstall    ext4    ro,nosuid,nodev,noexec    slotselect_other,logical,avb_keys=/product/etc/security/avb/system_other.avbpubkey
diff --git a/conf/init.aoc.daemon.rc b/conf/init.aoc.daemon.rc
new file mode 100644
index 0000000..1cf204e
--- /dev/null
+++ b/conf/init.aoc.daemon.rc
@@ -0,0 +1 @@
+# AoC firmware will be loaded by Daemon
\ No newline at end of file
diff --git a/conf/init.aoc.nodaemon.rc b/conf/init.aoc.nodaemon.rc
new file mode 100644
index 0000000..329d7d3
--- /dev/null
+++ b/conf/init.aoc.nodaemon.rc
@@ -0,0 +1,3 @@
+# Load AoC firmware and boot
+on property:vendor.all.modules.ready=1
+    write /sys/devices/platform/19000000.aoc/firmware aoc.bin
\ No newline at end of file
diff --git a/conf/init.debug.rc b/conf/init.debug.rc
new file mode 100644
index 0000000..e8039e0
--- /dev/null
+++ b/conf/init.debug.rc
@@ -0,0 +1,30 @@
+# SJTAG
+on init
+    chown system system /sys/devices/platform/sjtag_ap/interface/access_lvl
+    chown system system /sys/devices/platform/sjtag_ap/interface/auth
+    chown system system /sys/devices/platform/sjtag_ap/interface/begin
+    chown system system /sys/devices/platform/sjtag_ap/interface/dbg_domain
+    chown system system /sys/devices/platform/sjtag_ap/interface/dbg_itvl
+    chown system system /sys/devices/platform/sjtag_ap/interface/end
+    chown system system /sys/devices/platform/sjtag_ap/interface/pubkey
+    chown system system /sys/devices/platform/sjtag_gsa/interface/access_lvl
+    chown system system /sys/devices/platform/sjtag_gsa/interface/auth
+    chown system system /sys/devices/platform/sjtag_gsa/interface/begin
+    chown system system /sys/devices/platform/sjtag_gsa/interface/dbg_domain
+    chown system system /sys/devices/platform/sjtag_gsa/interface/dbg_itvl
+    chown system system /sys/devices/platform/sjtag_gsa/interface/end
+    chown system system /sys/devices/platform/sjtag_gsa/interface/pubkey
+
+# Bluetooth
+on post-fs-data
+    chown bluetooth system /dev/logbuffer_btlpm
+    chown bluetooth system /dev/logbuffer_tty16
+
+on property:vendor.debug.ramdump.force_crash=true
+    write /sys/kernel/pixel_debug/trigger "null"
+
+on property:power.battery_input.suspended=true
+   write /sys/kernel/debug/google_charger/input_suspend 1
+
+on property:power.battery_input.suspended=false
+   write /sys/kernel/debug/google_charger/input_suspend 0
diff --git a/conf/init.exynos.nanohub.rc b/conf/init.exynos.nanohub.rc
new file mode 100644
index 0000000..9a58229
--- /dev/null
+++ b/conf/init.exynos.nanohub.rc
@@ -0,0 +1,20 @@
+on post-fs
+## ensure correct calibration file permissions
+    chown root system /mnt/vendor/persist/sensorcal.json
+    chmod 0640 /mnt/vendor/persist/sensorcal.json
+    start vendor.flash-nanohub-fw
+
+on post-fs-data
+    mkdir /data/vendor/sensor
+    chown root system /data/vendor/sensor
+    chmod 0770 /data/vendor/sensor
+
+service vendor.flash-nanohub-fw /vendor/bin/nanoapp_cmd download
+    oneshot
+    disabled
+    user root
+    group system
+
+on post-fs-data
+    mkdir /data/system/nanohub_lock/
+    restorecon /data/system/nanohub_lock
diff --git a/conf/init.factory.rc b/conf/init.factory.rc
new file mode 100644
index 0000000..1eba34c
--- /dev/null
+++ b/conf/init.factory.rc
@@ -0,0 +1,25 @@
+# Factory specific init.rc
+
+on early-init
+    mount debugfs /sys/kernel/debug /sys/kernel/debug
+
+on init
+    export PATH /product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin:/vendor/bin/factory
+
+    # Set UDFPS default calibration to LHBM
+    setprop persist.vendor.sensors.fingerprint.ghbm 0
+
+on post-fs-data
+    # HBM mode for UDFPS factory apk
+    chmod 666 /d/dri/0/DSI-1/panel/reg/payload
+    chmod 666 /d/dri/0/DSI-1/panel/hbm_mode
+    chmod 666 /sys/class/backlight/panel0-backlight/local_hbm_max_timeout
+    chmod 666 /sys/class/backlight/panel0-backlight/local_hbm_mode
+    chmod 666 /sys/class/backlight/panel0-backlight/hbm_mode
+
+on boot
+    # FTM log folder
+    mkdir /data/ftmlog 0775 system system
+
+    # Audio test folder
+    mkdir /data/AudioTest 0775 system system
diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc
new file mode 100644
index 0000000..7cef09b
--- /dev/null
+++ b/conf/init.gs101.rc
@@ -0,0 +1,926 @@
+import /vendor/etc/init/hw/init.gs101.usb.rc
+import android.hardware.drm@1.2-service.widevine.rc
+import init.exynos.sensorhub.rc
+import /vendor/etc/init/hw/init.aoc.rc
+
+service vendor.charger /system/bin/charger
+    class charger
+    seclabel u:r:charger:s0
+    user system
+    group system wakelock input
+    capabilities SYS_BOOT
+    file /dev/kmsg w
+    file /sys/fs/pstore/console-ramoops-0 r
+    file /sys/fs/pstore/console-ramoops r
+    file /proc/last_kmsg r
+
+on early-init
+    mount_all /vendor/etc/fstab.persist --early
+
+on init
+    # CPU0 cannot be offline
+    chmod 0444 /sys/devices/system/cpu/cpu0/online
+
+    # Boot time fs tuning
+    write /sys/block/sda/queue/iostats 0
+    write /sys/block/sda/queue/scheduler bfq
+    write /sys/block/sda/queue/iosched/slice_idle 0
+    write /sys/block/sda/queue/nr_requests 256
+    write /dev/sys/fs/by-name/userdata/data_io_flag 56
+    write /dev/sys/fs/by-name/userdata/node_io_flag 56
+
+    chown system system /sys/kernel/vendor_sched/set_task_group_bg
+    chown system system /sys/kernel/vendor_sched/set_task_group_cam
+    chown system system /sys/kernel/vendor_sched/set_task_group_fg
+    chown system system /sys/kernel/vendor_sched/set_task_group_nnapi
+    chown system system /sys/kernel/vendor_sched/set_task_group_sys
+    chown system system /sys/kernel/vendor_sched/set_task_group_sysbg
+    chown system system /sys/kernel/vendor_sched/set_task_group_ta
+    chown system system /sys/kernel/vendor_sched/set_task_group_rt
+    chown system system /sys/kernel/vendor_sched/set_task_group_sf
+    chown system system /sys/kernel/vendor_sched/set_task_group_dex2oat
+    chown system system /sys/kernel/vendor_sched/clear_group
+
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_bg
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_cam
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_fg
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_nnapi
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_sys
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_sysbg
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_ta
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_rt
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_sf
+    chmod 0220 /sys/kernel/vendor_sched/set_task_group_dex2oat
+    chmod 0220 /sys/kernel/vendor_sched/clear_group
+
+    wait /dev/block/platform/${ro.boot.boot_devices}
+    symlink /dev/block/platform/${ro.boot.boot_devices} /dev/block/bootdevice
+
+    # to access UFS/eMMC sysfs directly
+    symlink /sys/devices/platform/${ro.boot.boot_devices} /dev/sys/block/bootdevice
+
+    # Disable UFS powersaving
+    write /dev/sys/block/bootdevice/clkgate_enable 0
+
+    start vendor.keymaster-3-0
+
+    # ZRAM setup
+    write /sys/block/zram0/comp_algorithm lz77eh
+    write /proc/sys/vm/page-cluster 0
+
+    # Page Pinner dumping at bugreport
+    chown system system /sys/kernel/debug/page_pinner/longterm_pinner
+    chown system system /sys/kernel/debug/page_pinner/alloc_contig_failed
+
+    # Some user code relies on ro.boot.hardware.revision
+    setprop ro.boot.hardware.revision ${ro.revision}
+
+    # Allow PAI targeting per hardware SKU
+    setprop ro.oem.key1 ${ro.boot.hardware.sku}
+
+    # Property used by vintf for sku specific manifests
+    # Property used by NFC for sku specific configurations
+    setprop ro.boot.product.hardware.sku ${ro.boot.hardware.sku}
+
+    # NFC streset tool name
+    setprop persist.vendor.nfc.streset libstreset21
+    setprop persist.vendor.se.streset libstreset21
+
+    # Support legacy paths
+    symlink /data/app /factory
+
+    # Apply network parameters for high data performance.
+    write /proc/sys/net/core/rmem_default 327680
+    write /proc/sys/net/core/rmem_max 8388608
+    write /proc/sys/net/core/wmem_default 327680
+    write /proc/sys/net/core/wmem_max 8388608
+    write /proc/sys/net/core/optmem_max 20480
+    write /proc/sys/net/core/netdev_max_backlog 10000
+    write /proc/sys/net/ipv4/tcp_rmem "2097152 4194304 8388608"
+    write /proc/sys/net/ipv4/tcp_wmem "262144 524288 1048576"
+    write /proc/sys/net/ipv4/tcp_mem "44259 59012 88518"
+    write /proc/sys/net/ipv4/udp_mem "88518 118025 177036"
+
+    write /sys/class/net/rmnet0/queues/rx-0/rps_cpus fe
+    write /sys/class/net/rmnet1/queues/rx-0/rps_cpus fe
+    write /sys/class/net/rmnet2/queues/rx-0/rps_cpus fe
+    write /sys/class/net/rmnet3/queues/rx-0/rps_cpus fe
+    write /sys/class/net/rmnet4/queues/rx-0/rps_cpus fe
+    write /sys/class/net/rmnet5/queues/rx-0/rps_cpus fe
+    write /sys/class/net/rmnet6/queues/rx-0/rps_cpus fe
+    write /sys/class/net/rmnet7/queues/rx-0/rps_cpus fe
+
+    # Create UDS structure for base VR services.
+    mkdir /dev/socket/pdx 0775 system system
+    mkdir /dev/socket/pdx/system 0775 system system
+    mkdir /dev/socket/pdx/system/buffer_hub 0775 system system
+    mkdir /dev/socket/pdx/system/performance 0775 system system
+    mkdir /dev/socket/pdx/system/vr 0775 system system
+    mkdir /dev/socket/pdx/system/vr/display 0775 system system
+    mkdir /dev/socket/pdx/system/vr/pose 0775 system system
+    mkdir /dev/socket/pdx/system/vr/sensors 0775 system system
+
+    # Boot time 183626384
+    write /sys/kernel/vendor_sched/ta_uclamp_min 308
+    write /sys/kernel/vendor_sched/ta_prefer_idle 1
+    write /sys/kernel/vendor_sched/fg_uclamp_min 308
+    write /sys/kernel/vendor_sched/fg_prefer_idle 1
+    write /sys/kernel/vendor_sched/sys_uclamp_min 308
+    write /sys/kernel/vendor_sched/sys_prefer_idle 1
+
+    # governor setting
+    write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor sched_pixel
+    write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/up_rate_limit_us 500
+    write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/down_rate_limit_us 5000
+    write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/down_rate_limit_scale_pow 2
+    write /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor sched_pixel
+    write /sys/devices/system/cpu/cpu4/cpufreq/sched_pixel/up_rate_limit_us 500
+    write /sys/devices/system/cpu/cpu4/cpufreq/sched_pixel/down_rate_limit_us 20000
+    write /sys/devices/system/cpu/cpu6/cpufreq/scaling_governor sched_pixel
+    write /sys/devices/system/cpu/cpu6/cpufreq/sched_pixel/up_rate_limit_us 500
+    write /sys/devices/system/cpu/cpu6/cpufreq/sched_pixel/down_rate_limit_us 20000
+
+    # RT uclamp setting
+    write /proc/sys/kernel/sched_util_clamp_min_rt_default 0
+
+    # change permissions and default values for camera-daemon cpu controller
+    chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.min
+    chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.max
+    chown root root /dev/cpuctl/camera-daemon/cpu.uclamp.latency_sensitive
+    chown system system /dev/cpuctl/camera-daemon/cgroup.procs
+
+    mkdir /dev/cpuset/camera-daemon-high-group
+    write /dev/cpuset/camera-daemon-high-group/cpus 0-7
+    write /dev/cpuset/camera-daemon-high-group/mems 0
+    chown system system /dev/cpuset/camera-daemon-high-group/tasks
+    chmod 0664 /dev/cpuset/camera-daemon-high-group/tasks
+
+    mkdir /dev/cpuset/camera-daemon-mid-group
+    write /dev/cpuset/camera-daemon-mid-group/cpus 0-7
+    write /dev/cpuset/camera-daemon-mid-group/mems 0
+    chown system system /dev/cpuset/camera-daemon-mid-group/tasks
+    chmod 0664 /dev/cpuset/camera-daemon-mid-group/tasks
+
+    mkdir /dev/cpuset/camera-daemon-mid-high-group
+    write /dev/cpuset/camera-daemon-mid-high-group/cpus 0-7
+    write /dev/cpuset/camera-daemon-mid-high-group/mems 0
+    chown system system /dev/cpuset/camera-daemon-mid-high-group/tasks
+    chmod 0664 /dev/cpuset/camera-daemon-mid-high-group/tasks
+
+    write /sys/kernel/vendor_sched/cam_prefer_idle 1
+    write /sys/kernel/vendor_sched/cam_uclamp_min 1
+
+    chown system system /dev/cpuset/cgroup.procs
+
+    # nanohub sensor
+    chmod 0664 /dev/nanohub
+    chmod 0664 /dev/nanohub_comms
+    chown system system /dev/nanohub
+    chown system system /dev/nanohub_comms
+
+    # logbuffer
+    chown system system /dev/logbuffer_maxfg
+    chown system system /dev/logbuffer_maxfg_base
+    chown system system /dev/logbuffer_maxfg_flip
+    chown system system /dev/logbuffer_maxq
+    chown system system /dev/logbuffer_google,cpm
+    chown system system /dev/logbuffer_rtx
+    chown system system /dev/logbuffer_ssoc
+    chown system system /dev/logbuffer_ttf
+    chown system system /dev/logbuffer_tcpm
+    chown system system /dev/logbuffer_usbpd
+    chown system system /dev/logbuffer_wireless
+    chown system system /dev/logbuffer_pca9468
+    chown system system /dev/logbuffer_cpm
+
+    # Dump maxfg
+    chown system system /sys/class/power_supply/maxfg/m5_model_state
+    chown system system /sys/class/power_supply/maxfg_base/m5_model_state
+
+    # Dump eeprom
+    chown system system /sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom
+    chown system system /sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom
+    chown system system /dev/battery_history
+
+    # Modem temperature driver
+    chown radio system /sys/devices/platform/cp-tm1/cp_temp
+
+    # Loading common kernel modules in background
+    start insmod_sh_common
+
+    # Charge stats (write 0)
+    chown system system /sys/class/power_supply/battery/charge_stats
+
+    # Pca Charge stats (write 0)
+    chown system system /sys/class/power_supply/pca9468-mains/device/chg_stats
+
+    # Wireless Charge stats (write 0)
+    chown system system /sys/class/power_supply/wireless/device/charge_stats
+
+    # Permission for wireless charging
+    chown system system /sys/class/power_supply/wireless/capacity
+    chown system system /sys/class/power_supply/wireless/device/rtx
+    chown system system /sys/class/power_supply/wireless/device/rxdata
+    chown system system /sys/class/power_supply/wireless/device/txdata
+    chown system system /sys/class/power_supply/wireless/device/rxlen
+    chown system system /sys/class/power_supply/wireless/device/txlen
+    chown system system /sys/class/power_supply/wireless/device/ccreset
+    chown system system /sys/class/power_supply/wireless/device/status
+    chown system system /sys/class/power_supply/wireless/device/version
+    chown system system /sys/class/power_supply/wireless/device/features
+    chown system system /sys/class/power_supply/wireless/device/authtype
+
+    # Adaptive charge
+    chown system system /sys/class/power_supply/battery/charge_deadline
+
+    # Battery Defender
+    chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt
+    chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_dry_run
+    chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_enable
+    chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_recharge_soc
+    chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_reset_sec
+    chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_clear
+    chown system system /sys/devices/platform/google,battery/power_supply/battery/health_safety_margin
+    chown system system /sys/devices/platform/google,charger/bd_drainto_soc
+    chown system system /sys/devices/platform/google,charger/bd_recharge_soc
+    chown system system /sys/devices/platform/google,charger/bd_recharge_voltage
+    chown system system /sys/devices/platform/google,charger/bd_resume_abs_temp
+    chown system system /sys/devices/platform/google,charger/bd_resume_soc
+    chown system system /sys/devices/platform/google,charger/bd_resume_temp
+    chown system system /sys/devices/platform/google,charger/bd_resume_time
+    chown system system /sys/devices/platform/google,charger/bd_temp_dry_run
+    chown system system /sys/devices/platform/google,charger/bd_temp_enable
+    chown system system /sys/devices/platform/google,charger/bd_trigger_temp
+    chown system system /sys/devices/platform/google,charger/bd_trigger_time
+    chown system system /sys/devices/platform/google,charger/bd_trigger_voltage
+    chown system system /sys/devices/platform/google,charger/bd_clear
+    chown system system /sys/devices/platform/google,charger/charge_start_level
+    chown system system /sys/devices/platform/google,charger/charge_stop_level
+    chown system system /sys/devices/platform/google,cpm/dc_ctl
+
+    # Power Stats HAL
+    chown system system /dev/bbd_pwrstat
+
+    # start watchdogd
+    start watchdogd
+
+    # Add a boost for NNAPI HAL
+    write /sys/kernel/vendor_sched/nnapi_prefer_idle 0
+    write /sys/kernel/vendor_sched/nnapi_uclamp_min 512
+
+    # Add memlat governor settings
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu2_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu3_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu4_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu5_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/polling_interval 10
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/mem_latency/ratio_ceil 400
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/mem_latency/ratio_ceil 400
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu2_memlat@17000010/mem_latency/ratio_ceil 400
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu3_memlat@17000010/mem_latency/ratio_ceil 400
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu4_memlat@17000010/mem_latency/ratio_ceil 400
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu5_memlat@17000010/mem_latency/ratio_ceil 400
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/mem_latency/ratio_ceil 800
+    write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/mem_latency/ratio_ceil 800
+
+# For GKI kernel, no device specific modules
+on init
+    setprop vendor.device.modules.ready 1
+
+on init && property:ro.boot.hw.soc.rev=0
+    setprop vendor.powerhal.config powerhint_a0.json
+
+on init && property:ro.boot.hw.soc.rev=1
+    setprop vendor.powerhal.config powerhint_a1.json
+
+on init && property:ro.boot.hw.soc.rev=0
+    # STOPSHIP b/177967147 disable SICD
+    write /sys/devices/platform/cpupm/cpupm/sicd 0
+
+on init && property:ro.boot.hw.soc.rev=1
+    # STOPSHIP b/177967147 disable SICD
+    write /sys/devices/platform/cpupm/cpupm/sicd 0
+
+on late-fs
+    # Start bootanimation class before mount
+    start bootanim
+    class_start animation
+
+    # Mount RW partitions which need run fsck
+    mount_all /vendor/etc/fstab.gs101 --late
+
+on post-fs-data
+    # Log data folder
+    mkdir /data/vendor 0771 radio system
+    mkdir /data/vendor/log 0771 radio system
+    mkdir /data/vendor/log/cbd 0771 radio system
+    mkdir /data/vendor/log/rfsd 0771 radio system
+
+    mkdir /data/exynos/log 0771 radio system
+    mkdir /data/vendor/rild 0771 radio system
+    mkdir /data/vendor/dump 0771 radio system
+    mkdir /data/vendor/slog 0771 system system
+
+    # PixelLogger log paths.
+    mkdir /data/vendor/radio 773 system radio
+    mkdir /data/vendor/radio/logs 773 system radio
+    mkdir /data/vendor/radio/logs/always-on 777 system radio
+
+    # Modem extended log folder
+    mkdir /data/vendor/radio/extended_logs 0770 radio system
+
+    # Modem MDS log folder
+    mkdir /data/vendor/radio/mds 0771 radio system
+
+    # Unzipped modem images folder
+    mkdir /data/vendor/radio/image 0771 radio system
+
+    # Modem stat folder
+    mkdir /data/vendor/modem_stat 0771 radio system
+    write /data/vendor/modem_stat/debug.txt ""
+    chown radio system /data/vendor/modem_stat/debug.txt
+    chmod 0664 /data/vendor/modem_stat/debug.txt
+
+    # Modem replay folder
+    mkdir /mnt/vendor/modem_userdata/replay 0775 radio system
+
+    # Write display MIPI frequency from Modem
+    chown system system /sys/devices/platform/1c2c0000.drmdsim/hs_clock
+    chown system system /sys/devices/platform/1c2d0000.drmdsim/hs_clock
+    chmod 0664 /sys/devices/platform/1c2c0000.drmdsim/hs_clock
+    chmod 0664 /sys/devices/platform/1c2d0000.drmdsim/hs_clock
+
+    setprop vold.post_fs_data_done 1
+    setprop wifi.direct.interface p2p-dev-wlan0
+    setprop wifi.aware.interface aware_nmi0
+
+# IPSEC PIDDIR for VoWiFi
+    mkdir /data/vendor/misc 0771 root system
+    mkdir /data/vendor/misc/vpn 0771 root system
+
+# Permissions Camera
+    mkdir /data/vendor/camera 0770 system camera
+    chmod 0755 /sys/kernel/debug/tracing
+    restorecon /sys/kernel/debug/tracing/trace_marker
+
+    # ranging sensor
+    chown system system /dev/stmvl53l1_ranging
+    chmod 0660 /dev/stmvl53l1_ranging
+
+    # Factory calibration files
+    chmod 0771 /mnt/vendor/persist/camera
+    chmod 0771 /mnt/vendor/persist/camera/OTP_calibration
+    chmod 0771 /mnt/vendor/persist/camera/pdaf_calibration_data
+    chmod 0771 /mnt/vendor/persist/camera/rear
+
+# Audio dump and debug
+    mkdir /data/vendor/audio 0770 audio audio
+
+# Create the directories for Darwinn HAL.
+    mkdir /data/vendor/hal_neuralnetworks_darwinn 0770 system system
+    mkdir /data/vendor/hal_neuralnetworks_darwinn/checksum_cache 0770 system system
+    mkdir /data/vendor/edgetpu 0770 system system
+    mkdir /data/vendor/edgetpu/cache 0770 system system
+
+# Compatibility path for TPU
+    symlink /dev/abrolhos /dev/edgetpu
+
+on zygote-start
+    # For PixelLogger configuration file.
+    chmod 0771 /data/vendor/wifi
+    write /sys/kernel/vendor_sched/sys_uclamp_min 0
+
+on post-fs-data
+    # Create the directories used by the Wireless subsystem
+    mkdir /data/vendor/wifi 0771 wifi wifi
+    mkdir /data/vendor/wifi/wpa 0770 wifi wifi
+    mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi
+
+# Gatekeeper data
+    mkdir /data/vendor/gk 0771 system system
+
+# HWC data
+    mkdir /data/vendor/log/hwc 0771 system graphics
+
+# Video data
+    mkdir /data/vendor/media 0700 mediacodec mediacodec
+
+on post-fs-data
+    # GPS
+    mkdir /data/vendor/gps 0771 system system
+    chown system system /data/vendor/gps
+    rm /data/vendor/gps/gps_started
+    rm /data/vendor/gps/glonass_started
+    rm /data/vendor/gps/beidou_started
+    rm /data/vendor/gps/smd_started
+    rm /data/vendor/gps/sv_cno.info
+
+    chown gps system /sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby
+    chmod 0664 /dev/ttyBCM
+    chown gps system /dev/ttyBCM
+    chmod 0664 /dev/bbd_control
+    chown gps system /dev/bbd_control
+    chmod 0664 /dev/bbd_patch
+    chown gps system /dev/bbd_patch
+    chmod 0664 /dev/bbd_sensor
+    chown gps system /dev/bbd_sensor
+
+on early-boot
+    # Wait for insmod_sh to finish all common modules
+    wait_for_prop vendor.common.modules.ready 1
+
+    # Wait for insmod_sh to finish all device specific modules
+    wait_for_prop vendor.device.modules.ready 1
+
+    # Other services depend on the properties
+    setprop vendor.all.modules.ready 1
+    setprop vendor.all.devices.ready 1
+
+    # Update dm-verity state and set partition.*.verified properties
+    verity_update_state
+
+    # Permission for Health Storage HAL
+    chown system system /dev/sys/block/bootdevice/manual_gc
+
+    # Permission for Pixelstats
+    chown system system /dev/sys/block/bootdevice/slowio_read_cnt
+    chown system system /dev/sys/block/bootdevice/slowio_write_cnt
+    chown system system /dev/sys/block/bootdevice/slowio_unmap_cnt
+    chown system system /dev/sys/block/bootdevice/slowio_sync_cnt
+
+on boot
+
+    # Allow to access debugfs for system:system
+    chmod 0755 /sys/kernel/debug
+    chown system system /sys/kernel/debug
+
+    #setprop ro.radio.noril no
+
+    # default country code
+    setprop ro.boot.wificountrycode 00
+
+    # Set up kernel tracing, but disable it by default
+    chmod 0222 /sys/kernel/debug/tracing/trace_marker
+    write /sys/kernel/debug/tracing/tracing_on 0
+
+    # Change permission for A-Box firmware logs file & GPR dump
+    chown audioserver system /sys/devices/platform/17c50000.abox/reset
+    chown audioserver system /sys/devices/platform/17c50000.abox/service
+    chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/gpr
+    chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/calliope_sram
+    chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/calliope_dram
+    chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/calliope_iva
+    chown audioserver system /sys/kernel/debug/abox/log-00
+
+# Permission for USB SELECT
+    chown system system /sys/class/android_usb/android0/enable
+    chmod 0660 /sys/class/android_usb/android0/enable
+    chown system system /sys/class/android_usb/android0/idVendor
+    chmod 0660 /sys/class/android_usb/android0/idVendor
+    chown system system /sys/class/android_usb/android0/idProduct
+    chmod 0660 /sys/class/android_usb/android0/idProduct
+    chown system system /sys/class/android_usb/android0/f_diag/clients
+    chmod 0660 /sys/class/android_usb/android0/f_diag/clients
+    chown system system /sys/class/android_usb/android0/functions
+    chmod 0660 /sys/class/android_usb/android0/functions
+    chown system system /sys/class/android_usb/android0/bDeviceClass
+    chmod 0660 /sys/class/android_usb/android0/bDeviceClass
+
+# Permission for UART SWITCH
+    chmod 0660 /sys/class/sec/switch/uart_sel
+    chown system system /sys/class/sec/switch/uart_sel
+
+# VTS sysfs file permission
+    chown audioserver system /sys/devices/platform/13810000.vts/vts_svoice_model
+    chown audioserver system /sys/devices/platform/13810000.vts/vts_google_model
+    chmod 0660 /sys/devices/platform/13810000.vts/vts_svoice_model
+    chmod 0660 /sys/devices/platform/13810000.vts/vts_google_model
+
+# WLAN firmware/driver path
+    chown wifi wifi /sys/module/bcmdhd/parameters/nvram_path
+    chown wifi wifi /sys/module/bcmdhd/parameters/firmware_path
+
+on property:persist.vendor.radio.no_modem_board=1
+    setprop ro.radio.noril yes
+
+on fs
+    mount_all /vendor/etc/fstab.gs101 --early
+    restorecon_recursive /mnt/vendor/efs
+    chown radio system /mnt/vendor/efs
+    restorecon_recursive /mnt/vendor/efs_backup
+    chown radio system /mnt/vendor/efs_backup
+    restorecon_recursive /mnt/vendor/modem_userdata
+    chown radio system /mnt/vendor/modem_userdata
+
+    # for cycle count backup
+    mkdir /mnt/vendor/persist/battery 0700 system system
+
+    restorecon_recursive /mnt/vendor/persist
+    restorecon_recursive /mnt/vendor/persist/aoc
+    restorecon_recursive /mnt/vendor/persist/audio
+    restorecon_recursive /mnt/vendor/persist/sensors
+    restorecon_recursive /mnt/vendor/persist/battery
+    # Set up display-related directories and permissions
+    # Add restorecon_recursive command to make sure the restorecon label is persist_display_file.
+    restorecon_recursive /mnt/vendor/persist/display
+    mkdir /mnt/vendor/persist/data/sfs 0700 system system
+    mkdir /mnt/vendor/persist/data/tz 0700 system system
+    mkdir /mnt/vendor/persist/touch 0770 system system
+    mkdir /mnt/vendor/persist/audio 0770 system system
+    chown media audio /mnt/vendor/persist/audio
+
+# Permissions for ION
+    chmod 0660 /sys/class/ion_cma/ion_video_ext/isolated
+    chown system system /sys/class/ion_cma/ion_video_ext/isolated
+
+# Permissions for hwcomposer
+    chown system system /sys/class/backlight/panel0-backlight/als_table
+    chown system system /sys/class/backlight/panel0-backlight/brightness
+    chown system system /sys/class/backlight/panel0-backlight/dimming_on
+    chown system system /sys/class/backlight/panel0-backlight/hbm_mode
+    chown system system /sys/class/backlight/panel0-backlight/local_hbm_mode
+    chown system system /sys/devices/platform/exynos-drm/primary-panel/gamma
+    chown system system /sys/module/drm/parameters/vblankoffdelay
+    chown system system /sys/class/dqe/atc/ambient_light
+    chown system system /sys/class/dqe/atc/st
+    chown system system /sys/class/dqe/atc/en
+    chown system system /sys/class/dqe/atc/lt
+    chown system system /sys/class/dqe/atc/ns
+    chown system system /sys/class/dqe/atc/dither
+    chown system system /sys/class/dqe/atc/pl_w1
+    chown system system /sys/class/dqe/atc/pl_w2
+    chown system system /sys/class/dqe/atc/ctmode
+    chown system system /sys/class/dqe/atc/pp_en
+    chown system system /sys/class/dqe/atc/upgrade_on
+    chown system system /sys/class/dqe/atc/tdr_max
+    chown system system /sys/class/dqe/atc/tdr_min
+    chown system system /sys/class/dqe/atc/back_light
+    chown system system /sys/class/dqe/atc/dstep
+    chown system system /sys/class/dqe/atc/scale_mode
+    chown system system /sys/class/dqe/atc/threshold_1
+    chown system system /sys/class/dqe/atc/threshold_2
+    chown system system /sys/class/dqe/atc/threshold_3
+    chown system system /sys/class/dqe/atc/gain_limit
+    chown system system /sys/class/dqe/atc/lt_calc_ab_shift
+    chown system system /sys/devices/platform/1c300000.drmdecon/early_wakeup
+    chmod 0220 /sys/devices/platform/1c300000.drmdecon/early_wakeup
+    chown system system /sys/devices/platform/1c302000.drmdecon/early_wakeup
+    chmod 0220 /sys/devices/platform/1c302000.drmdecon/early_wakeup
+
+# Copy DRM Key
+#    copy /system/app/wv.keys /factory/wv.keys
+
+# Permission for DRM Key
+#    chmod 0644 /factory/wv.keys
+
+# Permission for flashlight control for HAL3.3
+# The Istor espresso board does not have the flash led h/w, So the below permission line are blocked.
+# If you want to test the flashlight in board which have the flash led h/w, Enable the below blocked lines.
+    chmod 0660 /sys/class/camera/flash/rear_torch_flash
+    chown system camera /sys/class/camera/flash/rear_torch_flash
+#load ecd firmware
+    write /proc/ecd/load_firmware 1
+
+service abox /vendor/bin/main_abox 17c50000.abox
+    class late_start
+    user audioserver
+    group audioserver
+    seclabel u:r:abox:s0
+
+service wpa_supplicant /vendor/bin/hw/wpa_supplicant \
+    -O/data/vendor/wifi/wpa/sockets -puse_p2p_group_interface=1p2p_device=1 \
+    -m/vendor/etc/wifi/p2p_supplicant.conf \
+    -g@android:wpa_wlan0 -dd
+    interface android.hardware.wifi.supplicant@1.0::ISupplicant default
+    interface android.hardware.wifi.supplicant@1.1::ISupplicant default
+    interface android.hardware.wifi.supplicant@1.2::ISupplicant default
+    interface android.hardware.wifi.supplicant@1.3::ISupplicant default
+    interface android.hardware.wifi.supplicant@1.4::ISupplicant default
+    socket wpa_wlan0 dgram 660 wifi wifi
+    class main
+    disabled
+    oneshot
+
+
+# GPS
+service lhd /vendor/bin/hw/lhd /vendor/etc/gnss/lhd.conf
+    class main
+    user gps
+    group system inet net_raw sdcard_rw
+    ioprio be 0
+
+service gpsd /vendor/bin/hw/gpsd -c /vendor/etc/gnss/gps.xml
+    class main
+    user gps
+    group system gps radio inet wakelock sdcard_rw net_raw
+    ioprio be 0
+
+service scd /vendor/bin/hw/scd /vendor/etc/gnss/scd.conf
+    class main
+    user gps
+    group system inet net_raw wakelock
+    ioprio be 0
+
+service gnss_service /vendor/bin/hw/android.hardware.gnss@2.1-service-brcm
+    class hal
+    user gps
+    group system gps radio
+
+# disable gps service if no gps h/w
+on property:vendor.ril.cbd.svc=0
+    stop gpsd
+    stop lhd
+    stop scd
+
+# on userdebug and eng builds, enable kgdb on the serial console
+on property:ro.debuggable=1
+    write /sys/module/kgdboc/parameters/kgdboc ttyFIQ1
+    write /sys/module/fiq_debugger/parameters/kgdb_enable 1
+
+# Touch
+on property:vendor.device.modules.ready=1
+    chown system system /sys/class/spi_master/spi11/spi11.0/stm_fts_cmd
+    chown system system /sys/class/spi_master/spi11/spi11.0/glove_mode
+    chown system system /sys/class/spi_master/spi6/spi6.0/stm_fts_cmd
+    chown system system /sys/class/spi_master/spi6/spi6.0/glove_mode
+    chown system system /sys/devices/virtual/sec/tsp/fw_version
+    chown system system /sys/devices/virtual/sec/tsp/cmd
+    chown system system /sys/devices/virtual/sec/tsp/cmd_result
+    chown system system /sys/devices/virtual/sec/tsp/status
+    # Allow access to touch
+    chown system input /dev/touch_offload
+    chmod 660 /dev/touch_offload
+
+# Route touch_sensitivity_mode to persist
+on property:debug.touch_sensitivity_mode=0
+    setprop persist.vendor.touch_sensitivity_mode 0
+
+on property:debug.touch_sensitivity_mode=1
+    setprop persist.vendor.touch_sensitivity_mode 1
+
+on property:init.svc.vendor.charger=running
+    stop keymaster-4-0
+
+    setprop sys.usb.configfs 1
+    setprop vendor.setup.power 1
+
+    # keep one little and one big
+    write /sys/devices/system/cpu/cpu1/online 0
+    write /sys/devices/system/cpu/cpu2/online 0
+    write /sys/devices/system/cpu/cpu3/online 0
+    write /sys/devices/system/cpu/cpu5/online 0
+    write /sys/devices/system/cpu/cpu6/online 0
+    write /sys/devices/system/cpu/cpu7/online 0
+
+on property:sys.boot_completed=1
+
+    # Runtime fs tuning
+    write /sys/block/sda/queue/nr_requests 64
+    write /sys/block/sda/queue/iostats 1
+    write /dev/sys/fs/by-name/userdata/data_io_flag 8
+    write /dev/sys/fs/by-name/userdata/node_io_flag 8
+
+    # Permission for Pixelstats
+    chown system system /dev/sys/fs/by-name/userdata/compr_written_block
+    chown system system /dev/sys/fs/by-name/userdata/compr_saved_block
+    chown system system /dev/sys/fs/by-name/userdata/compr_new_inode
+
+    # Block layer tuning: discard chunk size up to 128MB
+    # Otherwise, contiguous discards can be merged
+    write /sys/block/sda/queue/discard_max_bytes 134217728
+
+    # Enable ZRAM on boot_complete
+    swapon_all /vendor/etc/fstab.${ro.board.platform}
+    write /proc/sys/vm/swappiness 100
+
+    # Back to default VM settings
+    write /proc/sys/vm/dirty_expire_centisecs 3000
+    write /proc/sys/vm/dirty_background_ratio 10
+
+    # Enable UFS powersaving
+    write /dev/sys/block/bootdevice/clkgate_enable 1
+
+    # Setup final cpuset
+    write /dev/cpuset/top-app/cpus 0-7
+    write /dev/cpuset/foreground/cpus 0-3,4-5
+    write /dev/cpuset/background/cpus 0-1
+    write /dev/cpuset/system-background/cpus 0-3
+    write /dev/cpuset/restricted/cpus 0-3
+    write /dev/cpuset/camera-daemon/cpus 0-7
+    setprop vendor.powerhal.init 1
+
+    # Setup final cpu.uclamp
+    write /sys/kernel/vendor_sched/ta_uclamp_min 1
+    write /sys/kernel/vendor_sched/fg_uclamp_min 0
+    write /sys/kernel/vendor_sched/bg_uclamp_max 615
+    write /sys/kernel/vendor_sched/sys_prefer_idle 0
+    # cfs_rq clamp is using tg->uclamp setting
+    # align it with the vendor_group setting
+    write /dev/cpuctl/background/cpu.uclamp.max 60
+    write /sys/kernel/vendor_sched/bg_group_throttle 615
+
+    # Setup groups for SF (RT used for SF RE, SF used for SF main)
+    write /sys/kernel/vendor_sched/rt_uclamp_min 125
+    write /sys/kernel/vendor_sched/rt_prefer_idle 1
+    write /sys/kernel/vendor_sched/sf_uclamp_min 30
+    write /sys/kernel/vendor_sched/sf_prefer_idle 1
+
+    # Setup cpu.shares to throttle background group at 5%
+    write /dev/cpuctl/background/cpu.shares 1024
+    write /dev/cpuctl/system/cpu.shares 20480
+    # We only have system and background groups holding tasks and the groups below are empty
+    write /dev/cpuctl/camera-daemon/cpu.shares 20480
+    write /dev/cpuctl/foreground/cpu.shares 20480
+    write /dev/cpuctl/nnapi-hal/cpu.shares 20480
+    write /dev/cpuctl/rt/cpu.shares 20480
+    write /dev/cpuctl/system-background/cpu.shares 20480
+    write /dev/cpuctl/top-app/cpu.shares 20480
+
+    # gvotables for dumpstate
+    chown system system /sys/kernel/debug/gvotables
+
+    # AOC reset permission
+    chown root system /sys/devices/platform/19000000.aoc/reset
+    chmod 0220 /sys/devices/platform/19000000.aoc/reset
+
+# charger driver exposes now finer grain control, map demo mode to those properties
+# NOTE: demo mode can only be exit wiping data (which reset the persist properties)
+on property:sys.retaildemo.enabled=1
+    setprop persist.vendor.charge.stop.level 35
+    setprop persist.vendor.charge.start.level 30
+
+# Test Harness Mode default battery profile.
+on  property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=0
+    setprop persist.vendor.charge.stop.level 70
+    setprop persist.vendor.charge.start.level 35
+    setprop vendor.battery.defender.disable 1
+
+# Extremely restricted battery profile.
+on  property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=1
+    setprop persist.vendor.charge.stop.level 50
+    setprop persist.vendor.charge.start.level 35
+    setprop vendor.battery.defender.disable 1
+
+# Normal behavior (as if the device was a regular device)
+on  property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=2
+    setprop persist.vendor.charge.stop.level 100
+    setprop persist.vendor.charge.start.level 0
+
+# Unrestricted, allows charging to 100%
+on  property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=3
+    setprop persist.vendor.charge.stop.level 100
+    setprop persist.vendor.charge.start.level 0
+    setprop vendor.battery.defender.disable 1
+
+service insmod_sh_common /vendor/bin/init.insmod.sh /vendor/etc/init.insmod.gs101.cfg
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
+
+# Set watchdog timer to 30 seconds and pet it every 10 seconds to get a 20 second margin
+service watchdogd /system/bin/watchdogd 10 20
+    class core
+    oneshot
+    seclabel u:r:watchdogd:s0
+
+# bugreport is triggered by holding down volume down, volume up and power
+service bugreport /system/bin/dumpstate -d -p -z
+    class main
+    disabled
+    oneshot
+    keycodes 114 115 116
+
+# Proxy for Secure Storage
+on post-fs-data
+    mkdir /data/vendor/rebootescrow 0770 hsm hsm
+    start vendor.rebootescrow-citadel
+    mkdir /data/vendor/ss 0770 root system
+    mkdir /mnt/vendor/persist/ss 0770 root system
+    restorecon_recursive /mnt/vendor/persist/ss
+    symlink /mnt/vendor/persist/ss /data/vendor/ss/persist
+    chown root system /data/vendor/ss/persist
+    chmod 0770 /data/vendor/ss/persist
+
+    restart storageproxyd
+
+service storageproxyd /vendor/bin/storageproxyd -d /dev/trusty-ipc-dev0 \
+        -r /dev/sg1 -p /data/vendor/ss -t ufs
+    class early_hal
+    user root
+
+# Write build info to kdebuginfo
+on property:ro.build.fingerprint=*
+    write /sys/module/debug_kinfo/parameters/build_info ${ro.build.fingerprint}
+
+# Bluetooth
+on post-fs-data
+    chown bluetooth system /sys/devices/platform/175b0000.serial/serial0/serial0-0/bluetooth/hci0/rfkill0/state
+    chown bluetooth system /sys/devices/platform/odm/odm:btbcm/rfkill/rfkill0/state
+    chown bluetooth system /sys/devices/platform/odm/odm:btbcm/rfkill/rfkill2/state
+    chown bluetooth system /proc/bluetooth/sleep/btwake
+    chown bluetooth system /proc/bluetooth/sleep/lpm
+    chown bluetooth system /proc/bluetooth/sleep/btwrite
+
+# ODPM
+on fs
+    chown system system /sys/devices/platform/acpm_mfd_bus@17500000/i2c-6/i2c-s2mpg10mfd/s2mpg10-meter/s2mpg10-odpm/iio:device0/enabled_rails
+    chown system system /sys/devices/platform/acpm_mfd_bus@17510000/i2c-7/i2c-s2mpg11mfd/s2mpg11-meter/s2mpg11-odpm/iio:device1/enabled_rails
+
+    chown system system /sys/devices/platform/acpm_mfd_bus@17500000/i2c-7/i2c-s2mpg10mfd/s2mpg10-meter/s2mpg10-odpm/iio:device0/enabled_rails
+    chown system system /sys/devices/platform/acpm_mfd_bus@17510000/i2c-8/i2c-s2mpg11mfd/s2mpg11-meter/s2mpg11-odpm/iio:device1/enabled_rails
+
+on post-fs-data
+    mkdir /data/vendor/powerstats 0771 system system
+    chown system system /data/vendor/powerstats
+
+on property:vendor.thermal.link_ready=1
+    # BCL
+    write /dev/thermal/tz-by-name/smpl_gm/policy user_space
+    write /dev/thermal/tz-by-name/vdroop1/policy user_space
+    write /dev/thermal/tz-by-name/vdroop2/policy user_space
+    write /dev/thermal/tz-by-name/ocp_cpu1/policy user_space
+    write /dev/thermal/tz-by-name/ocp_cpu2/policy user_space
+    write /dev/thermal/tz-by-name/ocp_tpu/policy user_space
+    write /dev/thermal/tz-by-name/ocp_gpu/policy user_space
+    write /dev/thermal/tz-by-name/soft_ocp_cpu1/policy user_space
+    write /dev/thermal/tz-by-name/soft_ocp_cpu2/policy user_space
+    write /dev/thermal/tz-by-name/soft_ocp_tpu/policy user_space
+    write /dev/thermal/tz-by-name/soft_ocp_gpu/policy user_space
+    write /dev/thermal/tz-by-name/soc/policy user_space
+    write /dev/thermal/tz-by-name/batoilo/policy user_space
+    write /sys/devices/virtual/pmic/mitigation/triggered_lvl/soft_ocp_cpu2_lvl 9000
+    write /sys/devices/virtual/pmic/mitigation/triggered_lvl/soft_ocp_gpu_lvl 9000
+    write /sys/devices/virtual/pmic/mitigation/triggered_lvl/soft_ocp_tpu_lvl 8500
+    chown system system /dev/thermal/tz-by-name/soc/mode
+    chown system system /dev/thermal/tz-by-name/batoilo/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/batoilo/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/vdroop2/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/vdroop2/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/vdroop1/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/vdroop1/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/smpl_gm/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/smpl_gm/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/ocp_cpu1/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/ocp_cpu1/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/ocp_cpu2/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/ocp_cpu2/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/ocp_tpu/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/ocp_tpu/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/ocp_gpu/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/ocp_gpu/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/soft_ocp_cpu1/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/soft_ocp_cpu1/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/soft_ocp_cpu2/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/soft_ocp_cpu2/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/soft_ocp_tpu/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/soft_ocp_tpu/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/soft_ocp_gpu/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/soft_ocp_gpu/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/soc/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/soc/trip_point_0_hyst
+    # Thermal
+    chown system system /dev/thermal/tz-by-name/quiet_therm/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/quiet_therm/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/neutral_therm/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/neutral_therm/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/usb_pwr_therm2/trip_point_0_temp
+    chown system system /dev/thermal/tz-by-name/usb_pwr_therm2/trip_point_0_hyst
+    chown system system /dev/thermal/tz-by-name/usb_pwr_therm2/emul_temp
+    chown system system /dev/thermal/cdev-by-name/thermal-cpufreq-0/user_vote
+    chown system system /dev/thermal/cdev-by-name/thermal-cpufreq-1/user_vote
+    chown system system /dev/thermal/cdev-by-name/thermal-cpufreq-2/user_vote
+    chown system system /dev/thermal/cdev-by-name/thermal-gpufreq-0/user_vote
+    chown system system /dev/thermal/cdev-by-name/tpu_cooling/user_vote
+    chown system system /dev/thermal/cdev-by-name/fcc/cur_state
+    chown system system /dev/thermal/cdev-by-name/dc_icl/cur_state
+    chown system system /dev/thermal/cdev-by-name/wlc_fcc/cur_state
+    chown system system /dev/thermal/cdev-by-name/usbc-port/cur_state
+
+# Create thermal symlink in off charging mode
+on charger
+    mkdir /dev/thermal 0750 system system
+    mkdir /dev/thermal/tz-by-name 0750 system system
+    mkdir /dev/thermal/cdev-by-name 0750 system system
+    start vendor.thermal.symlinks
+    write /sys/kernel/vendor_sched/sys_uclamp_min 0
+    write /sys/kernel/vendor_sched/sys_prefer_idle 0
+
+# Launch thermal hal in off charging mode
+on charger && property:vendor.thermal.link_ready=1
+    start vendor.thermal-hal-2-0
+
+on property:vendor.disable.bcl.control=1
+    write /sys/devices/virtual/pmic/mitigation/instruction/enable_mitigation 0
+
+on property:vendor.disable.bcl.control=0
+    write /sys/devices/virtual/pmic/mitigation/instruction/enable_mitigation 1
+
+# UFS
+on property:ro.boot.mode=charger && property:init.svc.vendor.charger=running
+    # Enable UFS powersaving in Off Mode Charger
+    write /dev/sys/block/bootdevice/clkgate_enable 1
diff --git a/conf/init.gs101.usb.rc b/conf/init.gs101.usb.rc
new file mode 100644
index 0000000..7c76381
--- /dev/null
+++ b/conf/init.gs101.usb.rc
@@ -0,0 +1,122 @@
+on early-boot
+    mkdir /config/usb_gadget/g1
+    mkdir /config/usb_gadget/g1/strings/0x409
+    mkdir /config/usb_gadget/g1/configs/b.1
+    write /config/usb_gadget/g1/idVendor 0x18d1
+    write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}
+    write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer}
+    write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model}
+    write /config/usb_gadget/g1/configs/b.1/MaxPower 0x384
+    write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1
+    write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100"
+
+    # ffs function
+    mkdir /config/usb_gadget/g1/functions/ffs.adb 0770 shell shell
+    mkdir /config/usb_gadget/g1/functions/ffs.mtp
+    mkdir /config/usb_gadget/g1/functions/ffs.ptp
+    mkdir /dev/usb-ffs 0775 shell shell
+    mkdir /dev/usb-ffs/adb 0770 shell shell
+    mkdir /dev/usb-ffs/mtp 0770 mtp mtp
+    mkdir /dev/usb-ffs/ptp 0770 mtp mtp
+    mount functionfs adb /dev/usb-ffs/adb rmode=0770,fmode=0660,uid=2000,gid=2000,no_disconnect=1
+    mount functionfs mtp /dev/usb-ffs/mtp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1
+    mount functionfs ptp /dev/usb-ffs/ptp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1
+    setprop sys.usb.mtp.device_type 3
+    setprop sys.usb.mtp.batchcancel true
+    symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1
+
+    # mtp function
+    mkdir /config/usb_gadget/g1/functions/mtp.gs0
+
+    # ptp function
+    mkdir /config/usb_gadget/g1/functions/ptp.gs1
+
+    # accessory function
+    mkdir /config/usb_gadget/g1/functions/accessory.gs2
+
+    # audio_source function
+    mkdir /config/usb_gadget/g1/functions/audio_source.gs3
+
+    # rndis function
+    mkdir /config/usb_gadget/g1/functions/rndis.gs4
+    # Modify class/subclass/protocol for rndis.gs4
+    # Remote NDIS: Class: Wireless Controller (0xe0), Subclass: 0x1, Protocol: 0x3
+    write /config/usb_gadget/g1/functions/rndis.gs4/class e0
+    write /config/usb_gadget/g1/functions/rndis.gs4/subclass 01
+    write /config/usb_gadget/g1/functions/rndis.gs4/protocol 03
+    write /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.ncm/compatible_id RNDIS
+    write /config/usb_gadget/g1/functions/rndis.gs4/ifname rndis%d
+    setprop vendor.usb.rndis.config rndis.gs4
+
+    # midi function
+    mkdir /config/usb_gadget/g1/functions/midi.gs5
+
+    # acm function
+    mkdir /config/usb_gadget/g1/functions/acm.gs6
+
+    # dm function
+    mkdir /config/usb_gadget/g1/functions/dm.gs7
+
+    # uts function
+    mkdir /config/usb_gadget/g1/functions/uts.gs8
+
+    # ncm function
+    mkdir /config/usb_gadget/g1/functions/ncm.gs9
+    write /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id WINNCM
+    write /config/usb_gadget/g1/functions/ncm.gs9/ifname ncm%d
+
+    # etr_miu function
+    mkdir /config/usb_gadget/g1/functions/etr_miu.gs11
+
+    setprop vendor.usb.functions.ready 1
+
+on boot
+    write /config/usb_gadget/g1/bcdDevice 0x0510
+    # Use USB Gadget HAL
+    setprop sys.usb.configfs 2
+
+on property:sys.usb.ffs.ready=1 && property:sys.usb.config=adb && property:sys.usb.configfs=1
+    write /config/usb_gadget/g1/idProduct 0x4EE7
+    write /config/usb_gadget/g1/idVendor 0x18D1
+
+on property:vendor.usb.config=*
+   start usbd
+
+on property:persist.vendor.usb.usbradio.config=*
+   start usbd
+
+on property:vendor.usb.dwc3_irq=medium
+   exec /vendor/bin/hw/set_usb_irq.sh medium
+
+on property:vendor.usb.dwc3_irq=big
+   exec /vendor/bin/hw/set_usb_irq.sh big
+
+on charger
+    mkdir /config/usb_gadget/g1
+    mkdir /config/usb_gadget/g1/strings/0x409
+    mkdir /config/usb_gadget/g1/configs/b.1
+    write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}
+    write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer}
+    write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model}
+    write /config/usb_gadget/g1/configs/b.1/MaxPower 0x384
+    write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1
+    write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100"
+    write /config/usb_gadget/g1/bcdDevice 0x0510
+    mkdir /config/usb_gadget/g1/functions/midi.gs5
+    symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1
+    setprop sys.usb.controller "11110000.dwc3"
+    setprop sys.usb.configfs 1
+
+on property:ro.bootmode=charger
+    setprop sys.usb.config charger
+
+on property:sys.usb.config=charger && property:sys.usb.configfs=1
+    write /config/usb_gadget/g1/idVendor 0x18d1
+    write /config/usb_gadget/g1/idProduct 0x4eea
+    write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "midi"
+    symlink /config/usb_gadget/g1/functions/midi.gs5 /config/usb_gadget/g1/configs/b.1/f1
+    write /config/usb_gadget/g1/UDC ${sys.usb.controller}
+    setprop sys.usb.state ${sys.usb.config}
+
+on property:vendor.usb.contaminantdisable=true
+    exec /vendor/bin/hw/disable_contaminant_detection.sh
diff --git a/conf/init.recovery.device.rc b/conf/init.recovery.device.rc
new file mode 100644
index 0000000..7b34120
--- /dev/null
+++ b/conf/init.recovery.device.rc
@@ -0,0 +1,18 @@
+on init
+    setprop sys.usb.controller "11110000.dwc3"
+    setprop sys.usb.configfs 1
+
+on init && property:ro.debuggable=1 && property:ro.boot.mode=recovery
+    start recovery-console
+
+service recovery-console /system/bin/sh
+    class core
+    console
+    disabled
+    user root
+    group root shell log readproc
+    seclabel u:r:su:s0
+    setenv HOSTNAME console
+
+on fs && property:sys.usb.configfs=1
+    write /config/usb_gadget/g1/configs/b.1/MaxPower 900
diff --git a/conf/recovery.wipe b/conf/recovery.wipe
new file mode 100644
index 0000000..9ee7a1e
--- /dev/null
+++ b/conf/recovery.wipe
@@ -0,0 +1,3 @@
+# All the partitions to be wiped (in order) under recovery.
+/dev/block/by-name/userdata
+/dev/block/by-name/metadata
diff --git a/conf/soundtrigger_conf.h b/conf/soundtrigger_conf.h
new file mode 100644
index 0000000..1263c60
--- /dev/null
+++ b/conf/soundtrigger_conf.h
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+#ifndef __EXYNOS_SOUNDTRIGGERCONF_H__
+#define __EXYNOS_SOUNDTRIGGERCONF_H__
+
+/********************************************************************/
+/** ALSA Framework Sound Card & Sound Device Information            */
+/**                                                                 */
+/** You can find Sound Device Name from /dev/snd.                   */
+/** Sound Device Name consist of Card Number & Device Number.       */
+/**                                                                 */
+/********************************************************************/
+
+/* Sound Card and Mixer card Numbers based on Target Device */
+/* You have to match this number with real kernel information */
+#define VTS_SOUND_CARD          0
+#define VTS_MIXER_CARD          0
+
+/* PCM Nodes number for seamless and normal recording*/
+#define VTS_TRICAP_DEVICE_NODE         13
+#define VTS_RECORD_DEVICE_NODE         14
+
+/* sysfs file paths for loading model binaries into VTS kernel driver */
+#define VTS_HOTWORD_MODEL           "/sys/devices/platform/13810000.vts/vts_google_model"
+#define VTS_SVOICE_MODEL            "/sys/devices/platform/13810000.vts/vts_svoice_model"
+
+#define AUDIO_PRIMARY_HAL_LIBRARY_PATH "/vendor/lib/libaudioproxy.so"
+
+// VTS Capture(Input) PCM Configuration
+#define DEFAULT_VTS_CHANNELS          1       // Mono
+#define DEFAULT_VTS_SAMPLING_RATE     16000   // 16KHz
+
+#define PRIMARY_VTS_PERIOD_SIZE           160     // 160 frames, 10ms in case of 16KHz Stream
+#define PRIMARY_VTS_PERIOD_COUNT          1024       // Buffer count => Total 327680 Bytes = 160 * 1(Mono) * 2(16bit PCM) * 1024(Buffer count)
+
+/* VTS mixer controls */
+#define VTS_ACTIVE_KEYPHRASE_CTL_NAME "VTS Active Keyphrase"    /* default: 0-"SVOICE", 1-"GOOGLE", 2-"SENSORY"  */
+#define VTS_EXECUTION_MODE_CTL_NAME "VTS Execution Mode"        /* 0-"OFF-MODE", 1-"VOICE-TRIG-MODE", 2-"SOUND-DECTECT-MODE", 3-"VT-ALWAYS-MODE" 4-"GOOGLE-TRI-MODE */
+#define VTS_VOICERECOGNIZE_START_CTL_NAME "VTS VoiceRecognize Start" /* 0-"Off", 1-On" */
+#define VTS_VOICETRIGGER_VALUE_CTL_NAME "VTS VoiceTrigger Value"  /* 0 ~ 2000 ms*/
+
+#define MAIN_MIC_CONTROL_COUNT          8
+#define HEADSET_MIC_CONTROL_COUNT       8
+#define MODEL_RECOGNIZE_CONTROL_COUNT   4
+
+/* MIC Mixer controls for VTS */
+char *main_mic_ctlname[] = {
+    "VTS DMIC SEL",
+    "VTS DMIC IF RCH EN",
+    "VTS DMIC IF LCH EN",
+    "VTS SYS SEL",
+    "VTS HPF EN",
+    "VTS HPF SEL",
+    "DMIC1 Switch",
+    "VTS Virtual Output Mux",
+};
+
+char *headset_mic_ctlname[] = {
+    "AUXPDM1 Rate",
+    "AUXPDM1 Input",
+    "AUXPDM1 Output Switch",
+    "AUXPDM Switch",
+    "VTS DMIC SEL",
+    "VTS DMIC IF RCH EN",
+    "VTS DMIC IF LCH EN",
+    "VTS SYS SEL",
+    "VTS HPF EN",
+    "VTS HPF SEL",
+};
+
+/* MIC Mixer control values */
+/* FIXME : Double check this values */
+int main_mic_ctlvalue[] = {
+    0,  //"VTS DMIC SEL",
+    1,  //"VTS DMIC IF RCH EN",
+    1,  //"VTS DMIC IF LCH EN",
+    1,  //"VTS SYS SEL",
+    1,  //"VTS HPF EN",
+    1,  //"VTS HPF SEL",
+    1,  //"DMIC1 Switch",
+    1,  //"VTS Virtual Output Mux",
+};
+
+int headset_mic_ctlvalue[] = {
+    3,  //"AUXPDM1 Rate",
+    0,  //"AUXPDM1 Input",
+    1,  //"AUXPDM1 Output Switch",
+    1,  //"AUXPDM Switch",
+    1,  //"VTS DMIC SEL",
+    1,  //"VTS DMIC IF RCH EN",
+    1,  //"VTS DMIC IF LCH EN",
+    1,  //"VTS SYS SEL",
+    1,  //"VTS HPF EN",
+    1,  //"VTS HPF SEL",
+};
+#endif  // __EXYNOS_SOUNDTRIGGERCONF_H__
diff --git a/conf/ueventd.gs101.rc b/conf/ueventd.gs101.rc
new file mode 100644
index 0000000..88ee00b
--- /dev/null
+++ b/conf/ueventd.gs101.rc
@@ -0,0 +1,211 @@
+/dev/mali0                0666   system     system
+/dev/ion                  0666   system     system
+/dev/ump                  0666   system     graphics
+/dev/exynos-mem           0660   system     graphics
+/dev/video0               0660   system     camera
+/dev/video1               0660   system     camera
+/dev/video2               0660   system     camera
+/dev/video3               0660   system     camera
+/dev/video20              0660   system     system
+# media0 is used for GSC, DECON, etc
+/dev/media0               0660   system     camera
+# media1 is used for DECON Ext WB
+/dev/media1               0660   system     graphics
+# Various devices use the v4l-subdev interface
+# We declare all such nodes simultaneously here
+/dev/v4l-subdev0          0660   system     camera
+/dev/v4l-subdev1          0660   system     camera
+/dev/v4l-subdev2          0660   system     camera
+/dev/v4l-subdev3          0660   system     camera
+/dev/v4l-subdev4          0660   system     camera
+/dev/v4l-subdev5          0660   system     camera
+/dev/v4l-subdev6          0660   system     camera
+/dev/v4l-subdev7          0660   system     camera
+/dev/v4l-subdev8          0660   system     camera
+/dev/v4l-subdev9          0660   system     camera
+/dev/v4l-subdev10         0660   system     camera
+/dev/v4l-subdev11         0660   system     camera
+/dev/v4l-subdev12         0660   system     camera
+/dev/v4l-subdev13         0660   system     camera
+/dev/v4l-subdev14         0660   system     camera
+/dev/v4l-subdev15         0660   system     camera
+/dev/v4l-subdev16         0660   system     camera
+/dev/v4l-subdev17         0660   system     camera
+/dev/v4l-subdev18         0660   system     camera
+/dev/v4l-subdev19         0660   system     camera
+# v4l-subdev20 is used for DECON Ext WB
+/dev/v4l-subdev20         0660   system     graphics
+/dev/v4l-subdev21         0660   system     graphics
+/dev/v4l-subdev32         0660   system     graphics
+
+# gscalers
+/dev/video23              0660   media      graphics
+/dev/video26              0660   media      graphics
+/dev/video24              0660   media      graphics
+/dev/video27              0660   media      graphics
+/dev/video29              0660   media      graphics
+/dev/video30              0660   media      graphics
+# video31 is used for DECON Ext WB
+/dev/video31              0660   media      graphics
+
+# mscalers
+/dev/video50              0660   mediacodec      drmrpc
+/dev/m2m1shot_scaler0     0660   mediacodec      drmrpc
+
+/dev/video55              0666   system     graphics
+/dev/g2d                  0660   system     graphics
+/dev/fimg2d               0666   system     graphics
+/dev/i2c-2                0660   system     system
+/dev/HPD                  0660   system     system
+
+# wfd
+/dev/tsmux                0660   media      graphics
+/dev/repeater             0660   media      graphics
+
+# mfc
+/dev/video6               0660   mediacodec mediadrm
+/dev/video7               0660   mediacodec mediadrm
+/dev/video8               0660   mediacodec mediadrm
+/dev/video9               0660   mediacodec mediadrm
+/dev/video10              0660   mediacodec mediadrm
+/dev/video11              0660   mediacodec mediadrm
+
+# camera
+/dev/media2               0660   media      media
+/dev/hdcp2                0660   media      media
+
+# jpeg
+/dev/m2m1shot_jpeg	      0660   media          media
+/dev/video12              0660   cameraserver   media
+
+# audio
+/dev/seiren                     0660   system     audio
+/dev/acd-audio_output_tuning    0660   system     audio
+/dev/acd-audio_bulk_tx          0660   system     audio
+/dev/acd-audio_bulk_rx          0660   system     audio
+/dev/acd-audio_input_tuning     0660   system     audio
+/dev/acd-audio_input_bulk_tx    0660   system     audio
+/dev/acd-audio_input_bulk_rx    0660   system     audio
+/dev/acd-sound_trigger          0660   system     audio
+/dev/acd-hotword_notification   0660   system     audio
+/dev/acd-hotword_pcm            0660   system     audio
+/dev/acd-ambient_pcm            0660   system     audio
+/dev/acd-model_data             0660   system     audio
+/dev/acd-debug                  0660   system     audio
+/dev/acd-audio_tap*             0660   system     audio
+/dev/acd-audio_dcdoff_ref       0660   system     audio
+/dev/amcs                       0660   system     audio
+
+# Secure MEM driver
+/dev/s5p-smem             0660   drm        drmrpc
+
+# cbd
+/dev/block/by-name/modem    0640 root       radio
+/dev/block/by-name/modem_a  0640 root       radio
+/dev/block/by-name/modem_b  0640 root       radio
+
+# DM tools
+/dev/umts_dm0             0660   system      system
+/dev/umts_router          0660   system      system
+/dev/ttyGS0               0660   system      system
+/dev/ttyGS1               0660   system      system
+/dev/ttyGS2               0660   system      system
+
+# IPC RIL
+/dev/umts_boot0           0660   radio      system
+/dev/umts_ipc0            0660   radio      radio
+/dev/umts_ipc1            0660   radio      radio
+/dev/umts_rfs0            0660   radio      radio
+
+# IPC OEM
+/dev/oem_ipc*             0660   radio      radio
+
+# interactive governor parameters
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/timer_rate			0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/timer_slack			0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/min_sample_time		0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/hispeed_freq		0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/target_loads		0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/go_hispeed_load		0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/above_hispeed_delay		0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/boost			0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/boostpulse			0200	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/input_boost			0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/boostpulse_duration		0660	system	system
+/sys/devices/system/cpu/cpu*	cpufreq/interactive/io_is_busy			0660	system	system
+
+# Vision (VPU, SCORE)
+/dev/vertex0             0660   media      media
+/dev/vertex1             0660   media      media
+
+# AoC
+/dev/aoc                 0660   system     system
+
+# Sensors (USF)
+/dev/acd-com.google.usf  0660   system     system
+
+# LWIS
+/dev/lwis*               0660   system     system
+
+# NFC
+/dev/st21nfc             0660   nfc    nfc
+
+# SecureElement
+/dev/st54j_se            0660   secure_element secure_element
+/dev/st54spi             0660   secure_element secure_element
+/dev/st33spi             0660   secure_element secure_element
+
+#bigocean
+/dev/bigocean               0660   mediacodec mediadrm
+
+# Trusty
+/dev/trusty-ipc-dev0     0660   system     drmrpc
+/dev/trusty-log0         0660   system     system
+
+# RPMB
+/dev/sg1                 0660   system     system
+
+# Citadel
+/dev/gsc0                0660   hsm        hsm
+
+# Storage: for factory reset protection feature
+/dev/block/by-name/frp   0660   system     system
+
+# Storage: for calibration data sideload feature
+/dev/block/by-name/mfg_data 0660   system     system
+
+# TPU
+/dev/abrolhos            0660   system     system
+
+# TOE
+/dev/dit2                 0660   radio      radio
+
+# Bluetooth
+/dev/ttySAC16             0660   bluetooth   system
+
+# BT Wifi Coexistence
+/dev/wbrc                 0660   system      system
+
+# TUI
+/dev/tui-driver           0660   system     system
+
+# DMA-BUF heaps
+/dev/dma_heap/crypto                   0444   system     graphics
+/dev/dma_heap/crypto-uncached          0444   system     graphics
+/dev/dma_heap/faceauth_tpu-secure      0444   system     graphics
+/dev/dma_heap/faimg-secure             0444   system     graphics
+/dev/dma_heap/famodel-secure           0444   system     graphics
+/dev/dma_heap/faprev-secure            0444   system     graphics
+/dev/dma_heap/farawimg-secure          0444   system     graphics
+/dev/dma_heap/tui-secure               0444   system     graphics
+/dev/dma_heap/vframe-secure            0444   system     drmrpc
+/dev/dma_heap/video_system             0444   system     drmrpc
+/dev/dma_heap/video_system-uncached    0444   system     drmrpc
+/dev/dma_heap/vscaler-secure           0444   system     graphics
+/dev/dma_heap/vstream-secure           0444   system     drmrpc
+/dev/dma_heap/sensor_direct_heap       0444   system     graphics
+/dev/dma_heap/aaudio_playback_heap     0444   system     audio
+/dev/dma_heap/aaudio_capture_heap      0444   system     audio
+
+# Direct Charging
+/dev/logbuffer_pca9468_tcpm            0600   system     system
diff --git a/confirmationui/confirmationui.mk b/confirmationui/confirmationui.mk
new file mode 100644
index 0000000..85f77c9
--- /dev/null
+++ b/confirmationui/confirmationui.mk
@@ -0,0 +1,9 @@
+# Trusty ConfirmationUI HAL
+PRODUCT_PACKAGES += \
+	android.hardware.confirmationui@1.0-service.trusty.vendor
+
+# Trusty Secure DPU Daemon
+PRODUCT_PACKAGES += \
+	securedpud.slider
+
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/confirmationui/
diff --git a/default-permissions.xml b/default-permissions.xml
new file mode 100644
index 0000000..cd4ea09
--- /dev/null
+++ b/default-permissions.xml
@@ -0,0 +1,121 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+
+<!-- Copyright (C) 2019 Google Inc.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<!--
+    This file contains permissions to be granted by default. Default
+    permissions are granted to special platform components and to apps
+    that are approved to get default grants. The special components
+    are apps that are expected tto work out-of-the-box as they provide
+    core use cases such as default dialer, default email, etc. These
+    grants are managed by the platform. The apps that are additionally
+    approved for default grants are ones that provide carrier specific
+    functionality, ones legally required at some location, ones providing
+    alternative disclosure and opt-out UI, ones providing highlight features
+    of a dedicated device, etc. This file contains only the latter exceptions.
+    Fixed permissions cannot be controlled by the user and need a special
+    approval. Typically these are to ensure either legally mandated functions
+    or the app is considered a part of the OS.
+-->
+
+<exceptions>
+
+    <!-- This is an example of an exception:
+    <exception
+        package="foo.bar.permission"
+      <permission name="android.permission.READ_CONTACTS" fixed="true"/>
+      <permission name="android.permission.READ_CALENDAR" fixed="false"/>
+    </exception>
+    -->
+
+    <exception package="com.google.android.settings.intelligence">
+        <!-- Calendar -->
+        <permission name="android.permission.READ_CALENDAR" fixed="true"/>
+        <!-- Location -->
+        <permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"/>
+        <permission name="android.permission.ACCESS_BACKGROUND_LOCATION" fixed="false"/>
+    </exception>
+
+    <exception package="com.google.android.apps.camera.services">
+        <!-- Camera -->
+        <permission name="android.permission.CAMERA" fixed="false"/>
+    </exception>
+
+    <exception package="com.google.android.apps.cbrsnetworkmonitor">
+        <!-- Location access to create CBRS geofences-->
+        <permission name="android.permission.ACCESS_FINE_LOCATION" fixed="true"/>
+        <permission name="android.permission.ACCESS_BACKGROUND_LOCATION" fixed="true"/>
+    </exception>
+
+    <exception package="com.google.android.apps.scone">
+        <!-- Used to call ActivityTransition API for Smart PNO -->
+        <permission name="android.permission.ACTIVITY_RECOGNITION" fixed="false"/>
+    </exception>
+
+    <exception
+            package="com.google.android.apps.restore">
+        <!-- External storage -->
+        <permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"/>
+        <permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"/>
+        <!-- Contacts -->
+        <permission name="android.permission.READ_CONTACTS" fixed="false"/>
+        <permission name="android.permission.WRITE_CONTACTS" fixed="false"/>
+        <!-- Call logs -->
+        <permission name="android.permission.READ_CALL_LOG" fixed="false"/>
+        <permission name="android.permission.WRITE_CALL_LOG" fixed="false"/>
+        <!-- Used to set up a Wi-Fi P2P network -->
+        <permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"/>
+    </exception>
+
+    <exception
+            package="com.verizon.mips.services">
+        <!-- Call -->
+        <permission name="android.permission.PROCESS_OUTGOING_CALLS" fixed="false"/>
+        <!-- Phone -->
+        <permission name="android.permission.READ_PHONE_STATE" fixed="false"/>
+        <!-- SMS -->
+        <permission name="android.permission.RECEIVE_SMS" fixed="false"/>
+    </exception>
+
+    <exception
+        package="com.google.android.factorytest">
+        <!-- Camera -->
+        <permission name="android.permission.CAMERA" fixed="false"/>
+        <!-- Microphone -->
+        <permission name="android.permission.RECORD_AUDIO" fixed="false"/>
+        <!-- Storage -->
+        <permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"/>
+        <permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"/>
+    </exception>
+
+    <exception package="com.google.android.wfcactivation">
+        <!-- SMS -->
+        <permission name="android.permission.RECEIVE_WAP_PUSH" fixed="false"/>
+    </exception>
+
+    <exception package="com.google.android.apps.accessibility.voiceaccess">
+        <!-- Voice Access: A11y app to allow users to setup & control their devices with voice -->
+        <!-- Approved android bug for pregrant permissions: b/182307492 -->
+
+        <!-- Phone state to turn off Voice Access when user is in a phone call -->
+        <permission name="android.permission.READ_PHONE_STATE" fixed="false"/>
+
+        <!-- Microphone: To hear user's voice commands -->
+        <permission name="android.permission.RECORD_AUDIO" fixed="false"/>
+    </exception>
+
+</exceptions>
+
diff --git a/device-common.mk b/device-common.mk
new file mode 100644
index 0000000..864cc3c
--- /dev/null
+++ b/device-common.mk
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2020 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.
+#
+
+include device/google/gs101/device.mk
+
+# Telephony
+PRODUCT_COPY_FILES += \
+    frameworks/native/data/etc/android.hardware.telephony.carrierlock.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.telephony.carrierlock.xml
+
+# Android Verified Boot
+PRODUCT_COPY_FILES += \
+    frameworks/native/data/etc/android.software.verified_boot.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.verified_boot.xml
+
+# Factory OTA
+-include vendor/google/factoryota/client/factoryota.mk
+
+# Set system properties identifying the chipset
+PRODUCT_VENDOR_PROPERTIES += ro.soc.manufacturer=Google
+PRODUCT_VENDOR_PROPERTIES += ro.soc.model=Tensor
+
+PRODUCT_PRODUCT_PROPERTIES += \
+    persist.vendor.testing_battery_profile=2
+
+# The default value of this variable is false and should only be set to true when
+# the device allows users to retain eSIM profiles after factory reset of user data.
+PRODUCT_PRODUCT_PROPERTIES += \
+    masterclear.allow_retain_esim_profiles_after_fdr=true
+
+# ZramWriteback
+-include hardware/google/pixel/mm/device_gki.mk
diff --git a/device-shipping-common.mk b/device-shipping-common.mk
new file mode 100644
index 0000000..c305a7b
--- /dev/null
+++ b/device-shipping-common.mk
@@ -0,0 +1,29 @@
+#
+# Copyright (C) 2020 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.
+
+include device/google/gs101/device-common.mk
+
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.bluetooth.a2dp_offload.supported=true \
+    persist.bluetooth.a2dp_offload.disabled=false \
+    persist.bluetooth.a2dp_offload.cap=sbc-aac-aptx-aptxhd-ldac
+
+# SecureElement
+PRODUCT_PACKAGES += \
+    android.hardware.secure_element@1.2-service-gto
+
+PRODUCT_COPY_FILES += \
+    device/google/gs101/nfc/libse-gto-hal.conf:$(TARGET_COPY_OUT_VENDOR)/etc/libse-gto-hal.conf \
+    device/google/gs101/nfc/libse-gto-hal2.conf:$(TARGET_COPY_OUT_VENDOR)/etc/libse-gto-hal2.conf
diff --git a/device.mk b/device.mk
new file mode 100644
index 0000000..982ecb6
--- /dev/null
+++ b/device.mk
@@ -0,0 +1,1142 @@
+#
+# Copyright (C) 2011 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.
+#
+
+TARGET_BOARD_PLATFORM := gs101
+
+ifneq (,$(filter %_64,$(TARGET_PRODUCT)))
+LOCAL_64ONLY := _64
+endif
+
+AB_OTA_POSTINSTALL_CONFIG += \
+	RUN_POSTINSTALL_system=true \
+	POSTINSTALL_PATH_system=system/bin/otapreopt_script \
+	FILESYSTEM_TYPE_system=ext4 \
+POSTINSTALL_OPTIONAL_system=true
+
+# Set Vendor SPL to match platform
+VENDOR_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)
+
+# Set boot SPL
+BOOT_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)
+
+PRODUCT_SOONG_NAMESPACES += \
+	hardware/google/av \
+	hardware/google/gchips \
+	hardware/google/graphics/common \
+	hardware/google/graphics/gs101 \
+	hardware/google/interfaces \
+	hardware/google/pixel \
+	device/google/gs101 \
+	vendor/google/whitechapel/tools \
+	vendor/broadcom/bluetooth \
+	vendor/google/camera \
+	vendor/google/interfaces \
+	vendor/google_devices/common/proprietary/confirmatioui_hal \
+	vendor/google_nos/host/android \
+	vendor/google_nos/test/system-test-harness
+
+ifeq ($(TARGET_PREBUILT_KERNEL),)
+LOCAL_KERNEL := $(TARGET_KERNEL_DIR)/Image.lz4
+else
+LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL)
+endif
+
+# OEM Unlock reporting
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
+	ro.oem_unlock_supported=1
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+#Set IKE logs to verbose for WFC
+PRODUCT_PROPERTY_OVERRIDES += log.tag.IKE=VERBOSE
+
+#Set Shannon IMS logs to debug
+PRODUCT_PROPERTY_OVERRIDES += log.tag.SHANNON_IMS=DEBUG
+
+#Set Shannon QNS logs to debug
+PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS=DEBUG
+PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-ims=DEBUG
+PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-emergency=DEBUG
+PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-mms=DEBUG
+PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-xcap=DEBUG
+PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-HC=DEBUG
+
+# Modem userdebug
+include device/google/gs101/modem/userdebug.mk
+endif
+
+include device/google/gs101/modem/user.mk
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+# b/36703476: Set default log size to 1M
+PRODUCT_PROPERTY_OVERRIDES += \
+	ro.logd.size=1M
+# b/114766334: persist all logs by default rotating on 30 files of 1MiB
+PRODUCT_PROPERTY_OVERRIDES += \
+	logd.logpersistd=logcatd \
+	logd.logpersistd.size=30
+endif
+
+# From system.property
+PRODUCT_PROPERTY_OVERRIDES += \
+	dev.usbsetting.embedded=on \
+	ro.telephony.default_network=27 \
+	persist.vendor.ril.use.iccid_to_plmn=1 \
+	persist.vendor.ril.emergencynumber.mode=5
+	#rild.libpath=/system/lib64/libsec-ril.so \
+	#rild.libargs=-d /dev/umts_ipc0
+
+# SIT-RIL Logging setting
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.ril.log_mask=3 \
+	persist.vendor.ril.log.base_dir=/data/vendor/radio/sit-ril \
+	persist.vendor.ril.log.chunk_size=5242880 \
+	persist.vendor.ril.log.num_file=3
+
+# Enable reboot free DSDS
+PRODUCT_PRODUCT_PROPERTIES += \
+	persist.radio.reboot_on_modem_change=false
+
+# Enable Early Camping
+PRODUCT_PRODUCT_PROPERTIES += \
+	persist.vendor.ril.camp_on_earlier=1
+
+# Carrier configuration default location
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.radio.config.carrier_config_dir=/mnt/vendor/modem_img/images/default/confpack
+
+
+PRODUCT_PROPERTY_OVERRIDES += \
+	telephony.active_modems.max_count=2
+
+USE_LASSEN_OEMHOOK := true
+
+# Use for GRIL
+USES_LASSEN_MODEM := true
+
+ifeq ($(USES_GOOGLE_DIALER_CARRIER_SETTINGS),true)
+USE_GOOGLE_DIALER := true
+USE_GOOGLE_CARRIER_SETTINGS := true
+endif
+
+ifeq (,$(filter aosp_%,$(TARGET_PRODUCT)))
+# Audio client implementation for RIL
+USES_GAUDIO := true
+endif
+
+# ######################
+# GRAPHICS - GPU (begin)
+
+# Must match BOARD_USES_SWIFTSHADER in BoardConfig.mk
+USE_SWIFTSHADER := false
+
+# HWUI
+TARGET_USES_VULKAN = true
+
+PRODUCT_SOONG_NAMESPACES += \
+	vendor/arm/mali/valhall \
+	vendor/arm/mali/valhall/cl \
+	vendor/arm/mali/valhall/libmali \
+	vendor/arm/mali/valhall/cinstr/production/gpu-hwc-reader
+
+include device/google/gs101/neuralnetwork/neuralnetwork.mk
+
+PRODUCT_PACKAGES += \
+	libGLES_mali \
+	vulkan.gs101 \
+	libOpenCL \
+	libgpudataproducer
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
+	debug.mali.disable_backend_affinity=true
+
+ifeq ($(USE_SWIFTSHADER),true)
+PRODUCT_PACKAGES += \
+	libGLESv1_CM_swiftshader \
+	libEGL_swiftshader \
+	libGLESv2_swiftshader
+endif
+
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.opengles.aep.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.opengles.aep.xml \
+	frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \
+	frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \
+	frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \
+	frameworks/native/data/etc/android.software.vulkan.deqp.level-2021-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \
+	frameworks/native/data/etc/android.software.opengles.deqp.level-2021-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml
+
+ifeq ($(USE_SWIFTSHADER),true)
+PRODUCT_VENDOR_PROPERTIES += \
+	ro.hardware.egl = swiftshader
+else
+PRODUCT_VENDOR_PROPERTIES += \
+	ro.hardware.egl = mali
+endif
+
+PRODUCT_VENDOR_PROPERTIES += \
+	ro.opengles.version=196610 \
+	graphics.gpu.profiler.support=true \
+	debug.renderengine.backend=skiaglthreaded
+
+# GRAPHICS - GPU (end)
+# ####################
+
+# Device Manifest, Device Compatibility Matrix for Treble
+DEVICE_MANIFEST_FILE := \
+	device/google/gs101/manifest$(LOCAL_64ONLY).xml
+
+ifneq (,$(filter aosp_%,$(TARGET_PRODUCT)))
+DEVICE_MANIFEST_FILE += \
+	device/google/gs101/manifest_media_aosp.xml
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/media_codecs_aosp_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_c2.xml
+else
+DEVICE_MANIFEST_FILE += \
+	device/google/gs101/manifest_media.xml
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/media_codecs_bo_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_c2.xml \
+	device/google/gs101/media_codecs_aosp_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_aosp_c2.xml
+endif
+
+DEVICE_MATRIX_FILE := \
+	device/google/gs101/compatibility_matrix.xml
+
+DEVICE_PACKAGE_OVERLAYS += device/google/gs101/overlay
+
+# This device is shipped with 31 (Android S)
+PRODUCT_SHIPPING_API_LEVEL := 31
+
+# Enforce the Product interface
+PRODUCT_PRODUCT_VNDK_VERSION := current
+PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE := true
+
+# Init files
+PRODUCT_COPY_FILES += \
+	$(LOCAL_KERNEL):kernel \
+	device/google/gs101/conf/init.gs101.usb.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.gs101.usb.rc \
+	device/google/gs101/conf/ueventd.gs101.rc:$(TARGET_COPY_OUT_VENDOR)/ueventd.rc
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/conf/init.gs101.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.gs101.rc
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_COPY_FILES += \
+	device/google/gs101/conf/init.debug.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.debug.rc
+endif
+
+# If AoC Daemon is not present on this build, load firmware at boot via rc
+ifeq ($(wildcard vendor/google/whitechapel/aoc/aocd),)
+PRODUCT_COPY_FILES += \
+	device/google/gs101/conf/init.aoc.nodaemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.aoc.rc
+else
+PRODUCT_COPY_FILES += \
+	device/google/gs101/conf/init.aoc.daemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.aoc.rc
+endif
+
+# Recovery files
+PRODUCT_COPY_FILES += \
+	device/google/gs101/conf/init.recovery.device.rc:$(TARGET_COPY_OUT_RECOVERY)/root/init.recovery.gs101.rc
+
+# Fstab files
+PRODUCT_COPY_FILES += \
+	device/google/gs101/conf/fstab.gs101:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.gs101 \
+	device/google/gs101/conf/fstab.persist:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.persist \
+	device/google/gs101/conf/fstab.gs101:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.gs101
+
+# Shell scripts
+PRODUCT_COPY_FILES += \
+	device/google/gs101/init.insmod.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.insmod.sh \
+	device/google/gs101/set_usb_irq.sh:$(TARGET_COPY_OUT_VENDOR)/bin/hw/set_usb_irq.sh \
+	device/google/gs101/disable_contaminant_detection.sh:$(TARGET_COPY_OUT_VENDOR)/bin/hw/disable_contaminant_detection.sh
+
+# insmod files
+PRODUCT_COPY_FILES += \
+	device/google/gs101/init.insmod.gs101.cfg:$(TARGET_COPY_OUT_VENDOR)/etc/init.insmod.gs101.cfg
+
+# For creating dtbo image
+PRODUCT_HOST_PACKAGES += \
+	mkdtimg
+
+PRODUCT_PACKAGES += \
+	messaging
+
+# Contexthub HAL
+PRODUCT_PACKAGES += \
+	android.hardware.contexthub@1.2-service.generic
+
+# CHRE tools
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PACKAGES += \
+	chre_power_test_client \
+	chre_test_client
+endif
+
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.context_hub.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.context_hub.xml
+
+# Enable the CHRE Daemon
+CHRE_USF_DAEMON_ENABLED := true
+PRODUCT_PACKAGES += \
+	chre \
+	preloaded_nanoapps.json
+
+# Filesystem management tools
+PRODUCT_PACKAGES += \
+	linker.vendor_ramdisk \
+	tune2fs.vendor_ramdisk \
+	resize2fs.vendor_ramdisk
+
+# Userdata Checkpointing OTA GC
+PRODUCT_PACKAGES += \
+	checkpoint_gc
+
+# Vendor verbose logging default property
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.verbose_logging_enabled=true
+else
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.verbose_logging_enabled=false
+endif
+
+# CP Logging properties
+PRODUCT_PROPERTY_OVERRIDES += \
+	ro.vendor.sys.modem.logging.loc = /data/vendor/slog \
+	persist.vendor.sys.silentlog.tcp = "On" \
+	ro.vendor.cbd.modem_removable = "1" \
+	ro.vendor.cbd.modem_type = "s5100sit" \
+	persist.vendor.sys.modem.logging.br_num=5 \
+	persist.vendor.sys.modem.logging.enable=true
+
+# Enable silent CP crash handling
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.ril.crash_handling_mode=1
+else
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.ril.crash_handling_mode=2
+endif
+
+# Add support dual SIM mode
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.radio.multisim_switch_support=true
+
+# RPMB TA
+PRODUCT_PACKAGES += \
+	tlrpmb
+
+# Touch firmware
+#PRODUCT_COPY_FILES += \
+	device/google/gs101/firmware/touch/s6sy761.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/s6sy761.fw
+# Touch
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml
+
+# Sensors
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.accelerometer.xml \
+	frameworks/native/data/etc/android.hardware.sensor.barometer.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.barometer.xml \
+	frameworks/native/data/etc/android.hardware.sensor.compass.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.compass.xml \
+	frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.gyroscope.xml \
+	frameworks/native/data/etc/android.hardware.sensor.hifi_sensors.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.hifi_sensors.xml \
+	frameworks/native/data/etc/android.hardware.sensor.light.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.light.xml\
+	frameworks/native/data/etc/android.hardware.sensor.proximity.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.proximity.xml \
+	frameworks/native/data/etc/android.hardware.sensor.stepcounter.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.stepcounter.xml \
+	frameworks/native/data/etc/android.hardware.sensor.stepdetector.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.stepdetector.xml
+
+# Add sensor HAL 2.1 product packages
+PRODUCT_PACKAGES += android.hardware.sensors@2.1-service.multihal
+
+# Debug property for sensor.
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PROPERTY_OVERRIDES += \
+	vendor.debug.sensor.hal.event_logger=true
+endif
+
+# USB HAL
+PRODUCT_PACKAGES += \
+	android.hardware.usb@1.3-service.gs101
+
+# MIDI feature
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.software.midi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.midi.xml
+
+# default usb debug functions
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.vendor.usb.usbradio.config=dm
+endif
+
+# Power HAL
+PRODUCT_COPY_FILES += \
+	device/google/gs101/powerhint.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.json
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/task_profiles.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/powerhint_a0.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint_a0.json
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/powerhint_a1.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint_a1.json
+-include hardware/google/pixel/power-libperfmgr/aidl/device.mk
+
+# IRQ rebalancing.
+include hardware/google/pixel/rebalance_interrupts/rebalance_interrupts.mk
+
+# PowerStats HAL
+PRODUCT_PACKAGES += \
+	android.hardware.power.stats-service.pixel
+
+# dumpstate HAL
+PRODUCT_PACKAGES += \
+	android.hardware.dumpstate@1.1-service.gs101
+
+# AoC support
+PRODUCT_PACKAGES += \
+	aocd
+
+# AoC debug support
+PRODUCT_PACKAGES_DEBUG += \
+	aocdump \
+	aocutil \
+	aoc_audio_cfg \
+	vp_util
+
+#
+# Audio HALs
+#
+
+# Audio Configurations
+USE_LEGACY_LOCAL_AUDIO_HAL := false
+USE_XML_AUDIO_POLICY_CONF := 1
+
+# Enable AAudio MMAP/NOIRQ data path.
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_policy=2
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2
+PRODUCT_PROPERTY_OVERRIDES += aaudio.hw_burst_min_usec=2000
+
+# Calliope firmware overwrite
+#PRODUCT_COPY_FILES += \
+	device/google/gs101/firmware/calliope_dram.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_dram.bin \
+	device/google/gs101/firmware/calliope_sram.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_sram.bin \
+	device/google/gs101/firmware/calliope_dram_2.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_dram_2.bin \
+	device/google/gs101/firmware/calliope_sram_2.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_sram_2.bin \
+	device/google/gs101/firmware/calliope2.dt:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope2.dt \
+
+# Cannot reference variables defined in BoardConfig.mk, uncomment this if
+# BOARD_USE_OFFLOAD_AUDIO and BOARD_USE_OFFLOAD_EFFECT are true
+## AudioEffectHAL library
+#PRODUCT_PACKAGES += \
+#	libexynospostprocbundle
+
+# Cannot reference variables defined in BoardConfig.mk, uncomment this if
+# BOARD_USE_SOUNDTRIGGER_HAL is true
+#PRODUCT_PACKAGES += \
+#	sound_trigger.primary.maran9820
+
+# A-Box Service Daemon
+#PRODUCT_PACKAGES += main_abox
+
+# Libs
+PRODUCT_PACKAGES += \
+	com.android.future.usb.accessory
+
+# for now include gralloc here. should come from hardware/google_devices/exynos5
+PRODUCT_PACKAGES += \
+	android.hardware.graphics.mapper@4.0-impl \
+	android.hardware.graphics.allocator@4.0-service \
+	android.hardware.graphics.allocator@4.0-impl
+
+PRODUCT_PACKAGES += \
+	android.hardware.memtrack-service.pixel \
+	libion_exynos \
+	libion
+
+PRODUCT_PACKAGES += \
+	libhwjpeg
+
+# Video Editor
+PRODUCT_PACKAGES += \
+	VideoEditorGoogle
+
+# WideVine modules
+PRODUCT_PACKAGES += \
+	android.hardware.drm@1.4-service.clearkey \
+	android.hardware.drm@1.4-service.widevine \
+	liboemcrypto \
+
+ORIOLE_PRODUCT := %oriole
+RAVEN_PRODUCT := %raven
+ifneq (,$(filter $(ORIOLE_PRODUCT), $(TARGET_PRODUCT)))
+        LOCAL_TARGET_PRODUCT := oriole
+else ifneq (,$(filter $(RAVEN_PRODUCT), $(TARGET_PRODUCT)))
+        LOCAL_TARGET_PRODUCT := raven
+else
+        LOCAL_TARGET_PRODUCT := slider
+endif
+
+
+SOONG_CONFIG_NAMESPACES += google3a_config
+SOONG_CONFIG_google3a_config += \
+	soc \
+	gcam_awb \
+	ghawb_truetone \
+	target_device
+
+SOONG_CONFIG_google3a_config_soc := gs101
+SOONG_CONFIG_google3a_config_gcam_awb := true
+SOONG_CONFIG_google3a_config_ghawb_truetone := true
+SOONG_CONFIG_google3a_config_target_device := $(LOCAL_TARGET_PRODUCT)
+
+# Determine if Lyric is in the tree, and only have GCH build against it
+# if it is. Cases when Lyric isn't going to be in the tree:
+#    - Non-pixel gs101 devices that exclude vendor/google/services/LyricCameraHAL/src (none as of now)
+#    - master-without-vendor and other types of AOSP builds (those won't built GCH either, but need this to actually start building)
+#
+# Builds that will have it are
+#    - Regular gs101 builds
+#    - PDK gs101 builds because they still have vendor/google/services/LyricCameraHAL/src
+
+ifneq ($(wildcard vendor/google/services/LyricCameraHAL/src),)
+SOONG_CONFIG_NAMESPACES += lyric
+SOONG_CONFIG_lyric += use_lyric_camera_hal
+SOONG_CONFIG_lyric_use_lyric_camera_hal := true
+
+# Camera HAL library selection
+SOONG_CONFIG_NAMESPACES += gch
+SOONG_CONFIG_gch += hwl_library
+SOONG_CONFIG_gch_hwl_library := lyric
+endif
+
+# WiFi
+PRODUCT_PACKAGES += \
+	android.hardware.wifi@1.0-service \
+	wificond \
+	libwpa_client \
+	WifiOverlay \
+
+# Connectivity
+PRODUCT_PACKAGES += \
+        ConnectivityOverlay
+
+PRODUCT_PACKAGES_DEBUG += \
+	sg_write_buffer \
+	f2fs_io \
+	check_f2fs \
+	f2fsstat \
+	f2fs.fibmap \
+	dump.f2fs
+
+# Storage health HAL
+PRODUCT_PACKAGES += \
+	android.hardware.health.storage-service.default
+
+# storage pixelstats
+-include hardware/google/pixel/pixelstats/device.mk
+
+# Enable project quotas and casefolding for emulated storage without sdcardfs
+$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)
+
+$(call inherit-product, $(SRC_TARGET_DIR)/product/virtual_ab_ota/compression.mk)
+# Enforce generic ramdisk allow list
+$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
+
+# Titan-M
+ifeq (,$(filter true, $(BOARD_WITHOUT_DTLS)))
+include hardware/google/pixel/dauntless/dauntless.mk
+endif
+
+# Copy Camera HFD Setfiles
+#PRODUCT_COPY_FILES += \
+	device/google/gs101/firmware/camera/libhfd/default_configuration.hfd.cfg.json:$(TARGET_COPY_OUT_VENDOR)/firmware/default_configuration.hfd.cfg.json \
+	device/google/gs101/firmware/camera/libhfd/pp_cfg.json:$(TARGET_COPY_OUT_VENDOR)/firmware/pp_cfg.json \
+	device/google/gs101/firmware/camera/libhfd/tracker_cfg.json:$(TARGET_COPY_OUT_VENDOR)/firmware/tracker_cfg.json \
+	device/google/gs101/firmware/camera/libhfd/WithLightFixNoBN.SDNNmodel:$(TARGET_COPY_OUT_VENDOR)/firmware/WithLightFixNoBN.SDNNmodel
+
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \
+	frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \
+	frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml \
+	frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
+	frameworks/native/data/etc/android.hardware.wifi.rtt.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.rtt.xml \
+	frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \
+	frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml
+
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.flash-autofocus.xml \
+	frameworks/native/data/etc/android.hardware.camera.front.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.front.xml \
+	frameworks/native/data/etc/android.hardware.camera.concurrent.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.concurrent.xml \
+	frameworks/native/data/etc/android.hardware.camera.full.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.full.xml\
+	frameworks/native/data/etc/android.hardware.camera.raw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.raw.xml\
+	vendor/google/services/LyricCameraHAL/src/vendor.android.hardware.camera.preview-dis.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/vendor.android.hardware.camera.preview-dis.xml\
+
+#PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \
+	frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \
+	frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \
+	frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
+	frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \
+	frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml \
+
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.audio.low_latency.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.low_latency.xml \
+	frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml \
+
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml \
+
+PRODUCT_PROPERTY_OVERRIDES += \
+	debug.slsi_platform=1 \
+	debug.hwc.winupdate=1
+
+# hw composer HAL
+PRODUCT_PACKAGES += \
+	libdisplaycolor \
+	hwcomposer.$(TARGET_BOARD_PLATFORM)
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PACKAGES += displaycolor_service
+endif
+
+PRODUCT_PROPERTY_OVERRIDES += \
+	debug.sf.disable_backpressure=0 \
+	debug.sf.enable_gl_backpressure=1
+
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.use_phase_offsets_as_durations=1
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.late.sf.duration=10500000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.late.app.duration=16600000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.early.sf.duration=16600000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.early.app.duration=16600000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.earlyGl.sf.duration=16600000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.earlyGl.app.duration=16600000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.frame_rate_multiple_threshold=120
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.layer_caching_active_layer_timeout_ms=1000
+
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.enable_layer_caching=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_idle_timer_ms?=80
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_touch_timer_ms=200
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_display_power_timer_ms=1000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_content_detection_for_refresh_rate=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.max_frame_buffer_acquired_buffers=3
+
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.supports_background_blur=1
+PRODUCT_SYSTEM_PROPERTIES += ro.launcher.blur.appLaunch=0
+
+# Must align with HAL types Dataspace
+# The data space of wide color gamut composition preference is Dataspace::DISPLAY_P3
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.wcg_composition_dataspace=143261696
+
+# Display
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.has_wide_color_display=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.has_HDR_display=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_color_management=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.protected_contents=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.display_update_imminent_timeout_ms=50
+
+# force to blend in P3 mode
+PRODUCT_PROPERTY_OVERRIDES += \
+	persist.sys.sf.native_mode=2 \
+	persist.sys.sf.color_mode=9
+PRODUCT_COPY_FILES += \
+	device/google/gs101/display/display_colordata_cal0.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal0.pb
+
+# limit DPP downscale ratio
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += vendor.hwc.dpp.downscale=2
+
+# Cannot reference variables defined in BoardConfig.mk, uncomment this if
+# BOARD_USES_EXYNOS_DSS_FEATURE is true
+## set the dss enable status setup
+#PRODUCT_PROPERTY_OVERRIDES += \
+#        ro.exynos.dss=1
+
+# Cannot reference variables defined in BoardConfig.mk, uncomment this if
+# BOARD_USES_EXYNOS_AFBC_FEATURE is true
+# set the dss enable status setup
+PRODUCT_PROPERTY_OVERRIDES += \
+	ro.vendor.ddk.set.afbc=1
+
+PRODUCT_CHARACTERISTICS := nosdcard
+
+# WPA SUPPLICANT
+PRODUCT_COPY_FILES += \
+	device/google/gs101/wifi/p2p_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant.conf \
+	device/google/gs101/wifi/wpa_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant_overlay.conf
+
+# WIFI COEX
+PRODUCT_COPY_FILES += \
+	device/google/gs101/wifi/coex_table.xml:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/coex_table.xml
+
+PRODUCT_PACKAGES += hostapd
+PRODUCT_PACKAGES += wpa_supplicant
+PRODUCT_PACKAGES += wpa_supplicant.conf
+
+WIFI_PRIV_CMD_UPDATE_MBO_CELL_STATUS := enabled
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PACKAGES += wpa_cli
+PRODUCT_PACKAGES += hostapd_cli
+endif
+
+####################################
+## VIDEO
+####################################
+
+SOONG_CONFIG_NAMESPACES += bigo
+SOONG_CONFIG_bigo += soc
+SOONG_CONFIG_bigo_soc := gs101
+
+# MFC firmware
+PRODUCT_COPY_FILES += \
+	device/google/gs101/firmware/mfc/mfc_fw.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/mfc_fw.bin
+
+# 1. Codec 2.0
+# exynos service
+PRODUCT_SOONG_NAMESPACES += vendor/samsung_slsi/codec2
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/media_codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \
+
+PRODUCT_PACKAGES += \
+	samsung.hardware.media.c2@1.0-service \
+	codec2.vendor.base.policy \
+	codec2.vendor.ext.policy \
+	libExynosC2ComponentStore \
+	libExynosC2H264Dec \
+	libExynosC2H264Enc \
+	libExynosC2HevcDec \
+	libExynosC2HevcEnc \
+	libExynosC2Mpeg4Dec \
+	libExynosC2Mpeg4Enc \
+	libExynosC2H263Dec \
+	libExynosC2H263Enc \
+	libExynosC2Vp8Dec \
+	libExynosC2Vp8Enc \
+	libExynosC2Vp9Dec \
+	libExynosC2Vp9Enc
+
+PRODUCT_PROPERTY_OVERRIDES += \
+       debug.c2.use_dmabufheaps=1 \
+       media.c2.dmabuf.padding=512 \
+       debug.stagefright.ccodec_delayed_params=1 \
+       ro.vendor.gpu.dataspace=1
+
+# Create input surface on the framework side
+PRODUCT_PROPERTY_OVERRIDES += \
+	debug.stagefright.c2inputsurface=-1 \
+
+# 2. OpenMAX IL
+PRODUCT_COPY_FILES += \
+	device/google/gs101/media_codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \
+	device/google/gs101/media_codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml
+####################################
+
+# Telephony
+#PRODUCT_COPY_FILES += \
+	frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml
+
+# CBD (CP booting deamon)
+CBD_USE_V2 := true
+CBD_PROTOCOL_SIT := true
+
+# setup dalvik vm configs.
+$(call inherit-product, frameworks/native/build/phone-xhdpi-6144-dalvik-heap.mk)
+
+PRODUCT_TAGS += dalvik.gc.type-precise
+
+# Exynos OpenVX framework
+PRODUCT_PACKAGES += \
+		libexynosvision
+
+ifeq ($(TARGET_USES_CL_KERNEL),true)
+PRODUCT_PACKAGES += \
+	libopenvx-opencl
+endif
+
+# GPS HAL
+include device/google/gs101/gnss/device-gnss.mk
+
+# Trusty (KM, GK, Storage)
+$(call inherit-product, system/core/trusty/trusty-storage.mk)
+$(call inherit-product, system/core/trusty/trusty-base.mk)
+
+# Trusty unit test tool
+PRODUCT_PACKAGES_DEBUG += trusty-ut-ctrl
+
+include device/google/gs101/confirmationui/confirmationui.mk
+
+include device/google/gs101/trusty_metricsd/trusty_metricsd.mk
+
+PRODUCT_PACKAGES += \
+	android.hardware.graphics.composer@2.4-impl \
+	android.hardware.graphics.composer@2.4-service
+
+# Storage: for factory reset protection feature
+PRODUCT_PROPERTY_OVERRIDES += \
+	ro.frp.pst=/dev/block/by-name/frp
+
+# Bluetooth HAL
+PRODUCT_PACKAGES += \
+	android.hardware.bluetooth@1.1-service.bcmbtlinux \
+	bt_vendor.conf
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \
+	frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml
+
+# System props to enable Bluetooth Quality Report (BQR) feature
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PRODUCT_PROPERTIES += \
+	persist.bluetooth.bqr.event_mask=262174 \
+	persist.bluetooth.bqr.min_interval_ms=500
+else
+PRODUCT_PRODUCT_PROPERTIES += \
+	persist.bluetooth.bqr.event_mask=30 \
+	persist.bluetooth.bqr.min_interval_ms=500
+endif
+
+#VNDK
+PRODUCT_PACKAGES += \
+	vndk-libs
+
+PRODUCT_ENFORCE_RRO_TARGETS := \
+	framework-res
+
+# Dynamic Partitions
+PRODUCT_USE_DYNAMIC_PARTITIONS := true
+
+# Use FUSE passthrough
+PRODUCT_PRODUCT_PROPERTIES += \
+	persist.sys.fuse.passthrough.enable=true
+
+# Use /product/etc/fstab.postinstall to mount system_other
+PRODUCT_PRODUCT_PROPERTIES += \
+	ro.postinstall.fstab.prefix=/product
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/conf/fstab.postinstall:$(TARGET_COPY_OUT_PRODUCT)/etc/fstab.postinstall
+
+# fastbootd
+PRODUCT_PACKAGES += \
+	android.hardware.fastboot@1.1-impl.pixel \
+	fastbootd
+
+#google iwlan
+PRODUCT_PACKAGES += \
+	Iwlan
+
+#Iwlan test app for userdebug/eng builds
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PACKAGES += \
+	IwlanTestApp
+endif
+
+PRODUCT_PACKAGES += \
+	whitelist \
+	libstagefright_hdcp \
+	libskia_opt
+
+#PRODUCT_PACKAGES += \
+	mfc_fw.bin \
+	calliope_sram.bin \
+	calliope_dram.bin \
+	calliope_iva.bin \
+	vts.bin
+
+# This will be called only if IMSService is building with source code for dev branches.
+$(call inherit-product-if-exists, vendor/samsung_slsi/telephony/shannon-ims/device-vendor.mk)
+
+PRODUCT_PACKAGES += ShannonIms
+
+$(call inherit-product-if-exists, vendor/samsung_slsi/telephony/shannon-iwlan/device-vendor.mk)
+include device/google/gs101/telephony/pktrouter.mk
+
+#RCS Test Messaging App
+PRODUCT_PACKAGES_DEBUG += \
+	TestRcsApp
+
+PRODUCT_PACKAGES += ShannonRcs
+
+# Boot Control HAL
+PRODUCT_PACKAGES += \
+	android.hardware.boot@1.2-impl-gs101 \
+	android.hardware.boot@1.2-service-gs101
+
+# Exynos RIL and telephony
+# Multi SIM(DSDS)
+SIM_COUNT := 2
+SUPPORT_MULTI_SIM := true
+# Support NR
+SUPPORT_NR := true
+# Using IRadio 1.6
+USE_RADIO_HAL_1_6 := true
+
+#$(call inherit-product, vendor/google_devices/telephony/common/device-vendor.mk)
+#$(call inherit-product, vendor/google_devices/gs101/proprietary/device-vendor.mk)
+
+ifneq ($(BOARD_WITHOUT_RADIO),true)
+$(call inherit-product-if-exists, vendor/samsung_slsi/telephony/common/device-vendor.mk)
+PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.telephony.cdma.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.telephony.cdma.xml
+endif
+
+ifeq (,$(filter %_64,$(TARGET_PRODUCT)))
+$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
+else
+$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)
+endif
+#$(call inherit-product, hardware/google_devices/exynos5/exynos5.mk)
+#$(call inherit-product-if-exists, hardware/google_devices/gs101/gs101.mk)
+#$(call inherit-product-if-exists, vendor/google_devices/common/exynos-vendor.mk)
+#$(call inherit-product-if-exists, hardware/broadcom/wlan/bcmdhd/firmware/bcm4375/device-bcm.mk)
+$(call inherit-product-if-exists, vendor/google/sensors/usf/android/usf_efw_product.mk)
+$(call inherit-product-if-exists, vendor/google/services/LyricCameraHAL/src/build/device-vendor.mk)
+$(call inherit-product-if-exists, vendor/google/camera/devices/whi/device-vendor.mk)
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/default-permissions.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/default-permissions/default-permissions.xml \
+	device/google/gs101/component-overrides.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sysconfig/component-overrides.xml \
+	frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \
+
+# modem_svc_sit daemon
+PRODUCT_PACKAGES += modem_svc_sit
+
+# modem logging binary/configs
+PRODUCT_PACKAGES += modem_logging_control
+
+PRODUCT_COPY_FILES += \
+	device/google/gs101/radio/gnss_blanking.csv:$(TARGET_COPY_OUT_VENDOR)/etc/modem/gnss_blanking.csv
+
+# ARM NN files
+ARM_COMPUTE_CL_ENABLE := 1
+
+# Vibrator Diag
+PRODUCT_PACKAGES_DEBUG += \
+	diag-vibrator \
+	diag-vibrator-cs40l25a \
+	diag-vibrator-drv2624 \
+	$(NULL)
+
+# NFC
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.nfc.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.nfc.xml \
+	frameworks/native/data/etc/android.hardware.nfc.hce.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.nfc.hce.xml \
+	frameworks/native/data/etc/android.hardware.nfc.hcef.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.nfc.hcef.xml \
+	frameworks/native/data/etc/com.nxp.mifare.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/com.nxp.mifare.xml \
+	frameworks/native/data/etc/android.hardware.nfc.uicc.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.nfc.uicc.xml \
+	frameworks/native/data/etc/android.hardware.nfc.ese.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.nfc.ese.xml
+
+PRODUCT_PACKAGES += \
+	NfcNci \
+	Tag \
+	android.hardware.nfc@1.2-service.st
+
+# SecureElement
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.se.omapi.ese.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.se.omapi.ese.xml \
+	frameworks/native/data/etc/android.hardware.se.omapi.uicc.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.se.omapi.uicc.xml
+
+PRODUCT_PACKAGES += \
+	android.hardware.health@2.1-impl-gs101 \
+	android.hardware.health@2.1-service
+
+# Audio
+# Audio HAL Server & Default Implementations
+PRODUCT_PACKAGES += \
+	android.hardware.audio.service \
+	android.hardware.audio@7.0-impl \
+	android.hardware.audio.effect@7.0-impl \
+	android.hardware.bluetooth.audio@2.1-impl \
+	android.hardware.soundtrigger@2.3-impl \
+	vendor.google.whitechapel.audio.audioext@2.0-impl
+
+#Audio HAL libraries
+PRODUCT_PACKAGES += \
+	audio.primary.$(TARGET_BOARD_PLATFORM) \
+	audio.platform.aoc \
+	sound_trigger.primary.$(TARGET_BOARD_PLATFORM) \
+	audio_bt_aoc \
+	audio_tunnel_aoc \
+	aoc_aud_ext \
+	libaoctuningdecoder \
+	libaoc_waves \
+	liboffloadeffect \
+	audio_waves_aoc \
+	audio_fortemedia_aoc \
+	audio_bluenote_aoc \
+	audio_usb_aoc \
+	audio_spk_35l41 \
+	audio.usb.default \
+	audio.usbv2.default \
+	audio.a2dp.default \
+	audio.bluetooth.default \
+	audio.r_submix.default \
+	libamcsextfile \
+	audio_amcs_ext \
+
+
+#Audio Vendor libraries
+PRODUCT_PACKAGES += \
+	libfvsam_prm_parser \
+	libmahalcontroller \
+	libAlgFx_HiFi3z
+
+# AudioHAL Configurations
+PRODUCT_COPY_FILES += \
+	frameworks/av/services/audiopolicy/config/a2dp_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration_7_0.xml \
+	frameworks/av/services/audiopolicy/config/a2dp_in_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_in_audio_policy_configuration_7_0.xml \
+	frameworks/av/services/audiopolicy/config/bluetooth_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_audio_policy_configuration_7_0.xml \
+	frameworks/av/services/audiopolicy/config/hearing_aid_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/hearing_aid_audio_policy_configuration_7_0.xml \
+	frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
+	frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \
+	frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
+	frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
+
+#Audio soong
+PRODUCT_SOONG_NAMESPACES += \
+	vendor/google/whitechapel/audio/hal \
+	vendor/google/whitechapel/audio/interfaces
+
+SOONG_CONFIG_NAMESPACES += aoc_audio_board
+SOONG_CONFIG_aoc_audio_board += \
+	platform
+
+SOONG_CONFIG_aoc_audio_board_platform := $(TARGET_BOARD_PLATFORM)
+
+# Audio properties
+PRODUCT_PROPERTY_OVERRIDES += \
+	ro.config.vc_call_vol_steps=7 \
+	ro.config.media_vol_steps=25 \
+	ro.audio.monitorRotation = true \
+	ro.audio.offload_wakelock=false
+
+ifeq (,$(filter aosp_%,$(TARGET_PRODUCT)))
+# IAudioMetricExt HIDL
+PRODUCT_PACKAGES += \
+    vendor.google.audiometricext@1.0-service-vendor
+endif
+
+# vndservicemanager and vndservice no longer included in API 30+, however needed by vendor code.
+# See b/148807371 for reference
+PRODUCT_PACKAGES += vndservicemanager
+PRODUCT_PACKAGES += vndservice
+
+# TinyTools, debug tool and cs35l41 speaker calibration tool for Audio
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+PRODUCT_PACKAGES += \
+	tinyplay \
+	tinycap \
+	tinymix \
+	tinypcminfo \
+	tinyhostless \
+	cplay \
+	aoc_hal \
+	aoc_tuning_inft \
+	crus_sp_cal \
+	mahal_test \
+	ma_aoc_tuning_test
+endif
+
+PRODUCT_PACKAGES += \
+	google.hardware.media.c2@1.0-service \
+	libgc2_store \
+	libgc2_base \
+	libgc2_av1_dec \
+	libbo_av1 \
+	libgc2_cwl \
+	libgc2_utils
+
+# Thermal HAL
+include hardware/google/pixel/thermal/device.mk
+PRODUCT_PROPERTY_OVERRIDES += persist.vendor.enable.thermal.genl=true
+
+include device/google/gs101/edgetpu/edgetpu.mk
+
+# Connectivity Thermal Power Manager
+PRODUCT_PACKAGES += \
+	ConnectivityThermalPowerManager
+
+# A/B support
+PRODUCT_PACKAGES += \
+	otapreopt_script \
+	cppreopts.sh \
+	update_engine \
+	update_engine_sideload \
+	update_verifier
+
+# tetheroffload HAL
+PRODUCT_PACKAGES += \
+	vendor.samsung_slsi.hardware.tetheroffload@1.1-service
+
+# pKVM
+ifeq ($(TARGET_PKVM_ENABLED),true)
+    $(call inherit-product, packages/modules/Virtualization/apex/product_packages.mk)
+endif
+
+# Enable watchdog timeout loop breaker.
+PRODUCT_PROPERTY_OVERRIDES += \
+	framework_watchdog.fatal_window.second=600 \
+	framework_watchdog.fatal_count=3
+
+# Enable zygote critical window.
+PRODUCT_PROPERTY_OVERRIDES += \
+	zygote.critical_window.minute=10
+
+# Suspend properties
+# (b/171433995): Enable short suspend backoffs and reduce max backoff time
+PRODUCT_PROPERTY_OVERRIDES += \
+    suspend.short_suspend_threshold_millis=2000 \
+    suspend.short_suspend_backoff_enabled=true \
+    suspend.max_sleep_time_millis=40000
+
+# (b/183612348): Enable skia reduceOpsTaskSplitting
+PRODUCT_PROPERTY_OVERRIDES += \
+    renderthread.skia.reduceopstasksplitting=true
+
+# Enable Incremental on the device
+PRODUCT_PROPERTY_OVERRIDES += \
+	ro.incremental.enable=true
+
+# Project
+include hardware/google/pixel/common/pixel-common-device.mk
+
+# Pixel Logger
+include hardware/google/pixel/PixelLogger/PixelLogger.mk
+
+# Telephony
+include device/google/gs101/telephony/user.mk
+
+# Battery Stats Viewer
+PRODUCT_PACKAGES_DEBUG += BatteryStatsViewer
+
+# Install product specific framework compatibility matrix
+# (TODO: b/169535506) This includes the FCM for system_ext and product partition.
+# It must be split into the FCM of each partition.
+DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := device/google/gs101/device_framework_matrix_product.xml
+
+# Preopt SystemUI
+PRODUCT_DEXPREOPT_SPEED_APPS += \
+    SystemUIGoogle
+
+# Keymaster configuration
+PRODUCT_COPY_FILES += \
+    frameworks/native/data/etc/android.software.device_id_attestation.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.device_id_attestation.xml \
+    frameworks/native/data/etc/android.hardware.device_unique_attestation.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.device_unique_attestation.xml
+
+# Use 64-bit dex2oat for better dexopt time.
+PRODUCT_PROPERTY_OVERRIDES += \
+    dalvik.vm.dex2oat64.enabled=true
+
+# Call deleteAllKeys if vold detects a factory reset
+PRODUCT_VENDOR_PROPERTIES += ro.crypto.metadata_init_delete_all_keys.enabled=true
diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product.xml
new file mode 100644
index 0000000..0637c13
--- /dev/null
+++ b/device_framework_matrix_product.xml
@@ -0,0 +1,194 @@
+<compatibility-matrix version="1.0" type="framework" level="6">
+    <hal format="hidl" optional="true">
+        <name>android.hardware.radio</name>
+        <version>1.2</version>
+        <interface>
+            <name>ISap</name>
+            <instance>slot2</instance>
+        </interface>
+    </hal>
+    <hal format="aidl" optional="true">
+        <name>android.hardware.vibrator</name>
+        <version>2</version>
+        <interface>
+            <name>IVibrator</name>
+            <instance>dual</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>android.vendor.samsung_slsi.telephony.hardware.radio</name>
+        <version>1.1</version>
+        <interface>
+            <name>IOemSamsungslsi</name>
+            <instance>slot1</instance>
+            <instance>slot2</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>com.fingerprints33.extension</name>
+        <version>1.0</version>
+        <interface>
+            <name>IFingerprintAuthenticator</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IFingerprintCalibration</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IFingerprintEngineering</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IFingerprintNavigation</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IFingerprintRecalibration</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IFingerprintSenseTouch</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IFingerprintSensorTest</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl" optional="true">
+      <name>com.google.face.debug</name>
+        <interface>
+            <name>IDebugHost</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl" optional="true">
+      <name>com.google.edgetpu</name>
+        <interface>
+            <name>IEdgeTpuVendorService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl" optional="true">
+      <name>com.google.hardware.pixel.display</name>
+        <version>3</version>
+        <interface>
+            <name>IDisplay</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl" optional="true">
+        <name>com.google.input</name>
+        <interface>
+            <name>ITouchContextService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>hardware.google.bluetooth.bt_channel_avoidance</name>
+        <version>1.0</version>
+        <interface>
+            <name>IBTChannelAvoidance</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>hardware.google.bluetooth.sar</name>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothSar</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>hardware.google.bluetooth.ccc</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBluetoothCcc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl" optional="true">
+        <name>hardware.qorvo.uwb</name>
+        <interface>
+            <name>IUwb</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>vendor.goodix.hardware.biometrics.fingerprint</name>
+        <version>2.1</version>
+        <interface>
+            <name>IGoodixFingerprintDaemon</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>vendor.google.google_battery</name>
+        <version>1.1</version>
+        <interface>
+            <name>IGoogleBattery</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>vendor.google.radioext</name>
+        <version>1.3</version>
+        <interface>
+            <name>IRadioExt</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.whitechapel.audio.audioext</name>
+       <version>2.0</version>
+       <interface>
+           <name>IAudioExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>vendor.google.wifi_ext</name>
+        <version>1.2</version>
+        <interface>
+            <name>IWifiExt</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>vendor.google.wireless_charger</name>
+        <version>1.3</version>
+        <interface>
+            <name>IWirelessCharger</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>vendor.samsung_slsi.telephony.hardware.oemservice</name>
+        <version>1.0</version>
+        <interface>
+            <name>IOemService</name>
+            <instance>dm0</instance>
+            <instance>dm1</instance>
+            <instance>sced0</instance>
+        </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+        <name>vendor.samsung_slsi.telephony.hardware.radioExternal</name>
+        <version>1.1</version>
+        <interface>
+            <name>IOemSlsiRadioExternal</name>
+            <instance>rilExternal</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.audiometricext</name>
+       <version>1.0</version>
+       <interface>
+           <name>IAudioMetricExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+</compatibility-matrix>
diff --git a/disable_contaminant_detection.sh b/disable_contaminant_detection.sh
new file mode 100755
index 0000000..97ae794
--- /dev/null
+++ b/disable_contaminant_detection.sh
@@ -0,0 +1,3 @@
+#!/vendor/bin/sh
+
+echo 0 > "$(find /sys/devices/platform/10d50000.hsi2c -name contaminant_detection)"
diff --git a/display/display_colordata_cal0.pb b/display/display_colordata_cal0.pb
new file mode 100644
index 0000000..1bef374
--- /dev/null
+++ b/display/display_colordata_cal0.pb
Binary files differ
diff --git a/dumpstate/Android.mk b/dumpstate/Android.mk
new file mode 100644
index 0000000..d9fee2c
--- /dev/null
+++ b/dumpstate/Android.mk
@@ -0,0 +1,47 @@
+#
+# Copyright 2016 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.dumpstate@1.1-service.gs101
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE
+LOCAL_INIT_RC := android.hardware.dumpstate@1.1-service.gs101.rc
+LOCAL_MODULE_RELATIVE_PATH := hw
+
+LOCAL_SRC_FILES := \
+    DumpstateDevice.cpp \
+    service.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+    android.hardware.dumpstate@1.0 \
+    android.hardware.dumpstate@1.1 \
+    libbase \
+    libcutils \
+    libdumpstateutil \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libutils
+
+LOCAL_CFLAGS := -Werror -Wall
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_PROPRIETARY_MODULE := true
+
+include $(BUILD_EXECUTABLE)
diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/DumpstateDevice.cpp
new file mode 100644
index 0000000..620df1a
--- /dev/null
+++ b/dumpstate/DumpstateDevice.cpp
@@ -0,0 +1,1190 @@
+/*
+ * Copyright 2016 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.
+ */
+
+#define LOG_TAG "dumpstate_device"
+
+#include <inttypes.h>
+
+#include <android-base/file.h>
+#include <android-base/stringprintf.h>
+#include <android-base/properties.h>
+#include <android-base/unique_fd.h>
+#include <hidl/HidlBinderSupport.h>
+#include <log/log.h>
+#include <pthread.h>
+#include <sys/stat.h>
+
+#include "DumpstateDevice.h"
+
+#include "DumpstateUtil.h"
+
+#define MODEM_LOG_DIRECTORY "/data/vendor/radio/logs/always-on"
+#define MODEM_EXTENDED_LOG_DIRECTORY "/data/vendor/radio/extended_logs"
+#define RIL_LOG_DIRECTORY "/data/vendor/radio"
+#define RIL_LOG_DIRECTORY_PROPERTY "persist.vendor.ril.log.base_dir"
+#define RIL_LOG_NUMBER_PROPERTY "persist.vendor.ril.log.num_file"
+#define MODEM_LOGGING_PERSIST_PROPERTY "persist.vendor.sys.modem.logging.enable"
+#define MODEM_LOGGING_PROPERTY "vendor.sys.modem.logging.enable"
+#define MODEM_LOGGING_STATUS_PROPERTY "vendor.sys.modem.logging.status"
+#define MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY "persist.vendor.sys.modem.logging.br_num"
+#define MODEM_LOGGING_PATH_PROPERTY "vendor.sys.modem.logging.log_path"
+#define GPS_LOG_DIRECTORY "/data/vendor/gps/logs"
+#define GPS_LOG_NUMBER_PROPERTY "persist.vendor.gps.aol.log_num"
+#define GPS_LOGGING_STATUS_PROPERTY "vendor.gps.aol.enabled"
+
+#define UFS_BOOTDEVICE "ro.boot.bootdevice"
+
+#define TCPDUMP_LOG_DIRECTORY "/data/vendor/tcpdump_logger/logs"
+#define TCPDUMP_NUMBER_BUGREPORT "persist.vendor.tcpdump.log.br_num"
+#define TCPDUMP_PERSIST_PROPERTY "persist.vendor.tcpdump.log.alwayson"
+
+#define HW_REVISION "ro.boot.hardware.revision"
+
+using android::os::dumpstate::CommandOptions;
+using android::os::dumpstate::DumpFileToFd;
+using android::os::dumpstate::PropertiesHelper;
+using android::os::dumpstate::RunCommandToFd;
+
+namespace android {
+namespace hardware {
+namespace dumpstate {
+namespace V1_1 {
+namespace implementation {
+
+#define GPS_LOG_PREFIX "gl-"
+#define GPS_MCU_LOG_PREFIX "esw-"
+#define MODEM_LOG_PREFIX "sbuff_"
+#define EXTENDED_LOG_PREFIX "extended_log_"
+#define RIL_LOG_PREFIX "rild.log."
+#define BUFSIZE 65536
+#define TCPDUMP_LOG_PREFIX "tcpdump"
+
+typedef std::chrono::time_point<std::chrono::steady_clock> timepoint_t;
+
+const char kVerboseLoggingProperty[] = "persist.vendor.verbose_logging_enabled";
+
+void copyFile(std::string srcFile, std::string destFile) {
+    uint8_t buffer[BUFSIZE];
+    ssize_t size;
+
+    int fdSrc = open(srcFile.c_str(), O_RDONLY);
+    if (fdSrc < 0) {
+        ALOGD("Failed to open source file %s\n", srcFile.c_str());
+        return;
+    }
+
+    int fdDest = open(destFile.c_str(), O_WRONLY | O_CREAT, 0666);
+    if (fdDest < 0) {
+        ALOGD("Failed to open destination file %s\n", destFile.c_str());
+        close(fdSrc);
+        return;
+    }
+
+    ALOGD("Copying %s to %s\n", srcFile.c_str(), destFile.c_str());
+    while ((size = TEMP_FAILURE_RETRY(read(fdSrc, buffer, BUFSIZE))) > 0) {
+        TEMP_FAILURE_RETRY(write(fdDest, buffer, size));
+    }
+
+    close(fdDest);
+    close(fdSrc);
+}
+
+void dumpLogs(int fd, std::string srcDir, std::string destDir, int maxFileNum,
+              const char *logPrefix) {
+    (void) fd;
+    struct dirent **dirent_list = NULL;
+    int num_entries = scandir(srcDir.c_str(),
+                              &dirent_list,
+                              0,
+                              (int (*)(const struct dirent **, const struct dirent **)) alphasort);
+    if (!dirent_list) {
+        return;
+    } else if (num_entries <= 0) {
+        return;
+    }
+
+    int copiedFiles = 0;
+
+    for (int i = num_entries - 1; i >= 0; i--) {
+        ALOGD("Found %s\n", dirent_list[i]->d_name);
+
+        if (0 != strncmp(dirent_list[i]->d_name, logPrefix, strlen(logPrefix))) {
+            continue;
+        }
+
+        if ((copiedFiles >= maxFileNum) && (maxFileNum != -1)) {
+            ALOGD("Skipped %s\n", dirent_list[i]->d_name);
+            continue;
+        }
+
+        copiedFiles++;
+
+        std::string srcLogFile = srcDir + "/" + dirent_list[i]->d_name;
+        std::string destLogFile = destDir + "/" + dirent_list[i]->d_name;
+        copyFile(srcLogFile, destLogFile);
+
+        ALOGD("Copying %s to %s\n", srcLogFile.c_str(), destLogFile.c_str());
+    }
+
+    while (num_entries--) {
+        free(dirent_list[num_entries]);
+    }
+
+    free(dirent_list);
+}
+
+void dumpRilLogs(int fd, std::string destDir) {
+    std::string rilLogDir =
+            android::base::GetProperty(RIL_LOG_DIRECTORY_PROPERTY, RIL_LOG_DIRECTORY);
+
+    int maxFileNum = android::base::GetIntProperty(RIL_LOG_NUMBER_PROPERTY, 50);
+
+    const std::string currentLogDir = rilLogDir + "/cur";
+    const std::string previousLogDir = rilLogDir + "/prev";
+    const std::string currentDestDir = destDir + "/cur";
+    const std::string previousDestDir = destDir + "/prev";
+
+    RunCommandToFd(fd, "MKDIR RIL CUR LOG", {"/vendor/bin/mkdir", "-p", currentDestDir.c_str()},
+                   CommandOptions::WithTimeout(2).Build());
+    RunCommandToFd(fd, "MKDIR RIL PREV LOG", {"/vendor/bin/mkdir", "-p", previousDestDir.c_str()},
+                   CommandOptions::WithTimeout(2).Build());
+
+    dumpLogs(fd, currentLogDir, currentDestDir, maxFileNum, RIL_LOG_PREFIX);
+    dumpLogs(fd, previousLogDir, previousDestDir, maxFileNum, RIL_LOG_PREFIX);
+}
+
+void dumpNetmgrLogs(std::string destDir) {
+    const std::vector <std::string> netmgrLogs
+        {
+            "/data/vendor/radio/metrics_data",
+            "/data/vendor/radio/omadm_logs.txt",
+            "/data/vendor/radio/power_anomaly_data.txt",
+        };
+    for (const auto& logFile : netmgrLogs) {
+        copyFile(logFile, destDir + "/" + basename(logFile.c_str()));
+    }
+}
+
+/** Dumps last synced NV data into bugreports */
+void dumpModemEFS(std::string destDir) {
+    const std::string EFS_DIRECTORY = "/mnt/vendor/efs/";
+    const std::vector <std::string> nv_files
+        {
+            EFS_DIRECTORY+"nv_normal.bin",
+            EFS_DIRECTORY+"nv_protected.bin",
+        };
+    for (const auto& logFile : nv_files) {
+        copyFile(logFile, destDir + "/" + basename(logFile.c_str()));
+    }
+}
+
+void dumpGpsLogs(int fd, std::string destDir) {
+    const std::string gpsLogDir = GPS_LOG_DIRECTORY;
+    const std::string gpsTmpLogDir = gpsLogDir + "/.tmp";
+    const std::string gpsDestDir = destDir + "/gps";
+    int maxFileNum = android::base::GetIntProperty(GPS_LOG_NUMBER_PROPERTY, 30);
+
+    RunCommandToFd(fd, "MKDIR GPS LOG", {"/vendor/bin/mkdir", "-p", gpsDestDir.c_str()},
+                   CommandOptions::WithTimeout(2).Build());
+
+    dumpLogs(fd, gpsTmpLogDir, gpsDestDir, 1, GPS_LOG_PREFIX);
+    dumpLogs(fd, gpsLogDir, gpsDestDir, 3, GPS_MCU_LOG_PREFIX);
+    dumpLogs(fd, gpsLogDir, gpsDestDir, maxFileNum, GPS_LOG_PREFIX);
+}
+
+void dumpCameraLogs(int fd, const std::string &destDir) {
+    static const std::string kCameraLogDir = "/data/vendor/camera/profiler";
+    const std::string cameraDestDir = destDir + "/camera";
+    RunCommandToFd(fd, "MKDIR CAMERA LOG", {"/vendor/bin/mkdir", "-p", cameraDestDir.c_str()},
+                   CommandOptions::WithTimeout(2).Build());
+    // Attach multiple latest sessions (in case the user is running concurrent
+    // sessions or starts a new session after the one with performance issues).
+    dumpLogs(fd, kCameraLogDir, cameraDestDir, 10, "session-ended-");
+    dumpLogs(fd, kCameraLogDir, cameraDestDir, 5, "high-drop-rate-");
+}
+
+timepoint_t startSection(int fd, const std::string &sectionName) {
+    android::base::WriteStringToFd(
+            "\n"
+            "------ Section start: " + sectionName + " ------\n"
+            "\n", fd);
+    return std::chrono::steady_clock::now();
+}
+
+void endSection(int fd, const std::string &sectionName, timepoint_t startTime) {
+    auto endTime = std::chrono::steady_clock::now();
+    auto elapsedMsec = std::chrono::duration_cast<std::chrono::milliseconds>
+            (endTime - startTime).count();
+
+    android::base::WriteStringToFd(
+            "\n"
+            "------ Section end: " + sectionName + " ------\n"
+            "Elapsed msec: " + std::to_string(elapsedMsec) + "\n"
+            "\n", fd);
+}
+
+// If you are adding a single RunCommandToFd() or DumpFileToFd() call, please
+// add it to dumpMiscSection().  But if you are adding multiple items that are
+// related to each other - for instance, for a Foo peripheral - please add them
+// to a new dump function and include it in this table so it can be accessed from the
+// command line, e.g.:
+//   lshal debug android.hardware.dumpstate@1.0::IDumpstateDevice/default foo
+//
+// However, if your addition generates attachments and/or binary data for the
+// bugreport (i.e. if it requires two file descriptors to execute), it must not be
+// added to this table and should instead be added to dumpstateBoard() below.
+
+DumpstateDevice::DumpstateDevice()
+  : mTextSections{
+        { "wlan", [this](int fd) { dumpWlanSection(fd); } },
+        { "soc", [this](int fd) { dumpSocSection(fd); } },
+        { "storage", [this](int fd) { dumpStorageSection(fd); } },
+        { "memory", [this](int fd) { dumpMemorySection(fd); } },
+        { "Devfreq", [this](int fd) { dumpDevfreqSection(fd); } },
+        { "cpu", [this](int fd) { dumpCpuSection(fd); } },
+        { "power", [this](int fd) { dumpPowerSection(fd); } },
+        { "thermal", [this](int fd) { dumpThermalSection(fd); } },
+        { "touch", [this](int fd) { dumpTouchSection(fd); } },
+        { "display", [this](int fd) { dumpDisplaySection(fd); } },
+        { "sensors-usf", [this](int fd) { dumpSensorsUSFSection(fd); } },
+        { "aoc", [this](int fd) { dumpAoCSection(fd); } },
+        { "ramdump", [this](int fd) { dumpRamdumpSection(fd); } },
+        { "misc", [this](int fd) { dumpMiscSection(fd); } },
+        { "gsc", [this](int fd) { dumpGscSection(fd); } },
+        { "camera", [this](int fd) { dumpCameraSection(fd); } },
+        { "trusty", [this](int fd) { dumpTrustySection(fd); } },
+        { "modem", [this](int fd) { dumpModemSection(fd); } },
+    } {
+}
+
+// Dump data requested by an argument to the "debug" HAL interface, or help info
+// if the specified section is not supported.
+void DumpstateDevice::dumpTextSection(int fd, const std::string &sectionName) {
+    bool dumpAll = (sectionName == kAllSections);
+
+    for (const auto &section : mTextSections) {
+        if (dumpAll || sectionName == section.first) {
+            auto startTime = startSection(fd, section.first);
+            section.second(fd);
+            endSection(fd, section.first, startTime);
+
+            if (!dumpAll) {
+                return;
+            }
+        }
+    }
+
+    if (dumpAll) {
+        return;
+    }
+
+    // An unsupported section was requested on the command line
+    android::base::WriteStringToFd("Unrecognized text section: " + sectionName + "\n", fd);
+    android::base::WriteStringToFd("Try \"" + kAllSections + "\" or one of the following:", fd);
+    for (const auto &section : mTextSections) {
+        android::base::WriteStringToFd(" " + section.first, fd);
+    }
+    android::base::WriteStringToFd("\nNote: sections with attachments (e.g. modem) are"
+                                   "not avalable from the command line.\n", fd);
+}
+
+// Dump items related to wlan
+void DumpstateDevice::dumpWlanSection(int fd) {
+    RunCommandToFd(fd, "WLAN Debug Dump", {"/vendor/bin/sh", "-c",
+                   "cat /sys/wifi/dump_start"});
+}
+
+// Dump items related to power and battery
+void DumpstateDevice::dumpPowerSection(int fd) {
+    struct stat buffer;
+
+    RunCommandToFd(fd, "Power Stats Times", {"/vendor/bin/sh", "-c",
+                   "echo -n \"Boot: \" && /vendor/bin/uptime -s && "
+                   "echo -n \"Now: \" && date"});
+
+    RunCommandToFd(fd, "ACPM stats", {"/vendor/bin/sh", "-c",
+                   "for f in /sys/devices/platform/acpm_stats/*_stats ; do "
+                   "echo \"\\n\\n$f\" ; cat $f ; "
+                   "done"});
+
+    DumpFileToFd(fd, "CPU PM stats", "/sys/devices/system/cpu/cpupm/cpupm/time_in_state");
+
+    DumpFileToFd(fd, "GENPD summary", "/d/pm_genpd/pm_genpd_summary");
+
+    DumpFileToFd(fd, "Power supply property battery", "/sys/class/power_supply/battery/uevent");
+    DumpFileToFd(fd, "Power supply property dc", "/sys/class/power_supply/dc/uevent");
+    DumpFileToFd(fd, "Power supply property gcpm", "/sys/class/power_supply/gcpm/uevent");
+    DumpFileToFd(fd, "Power supply property gcpm_pps", "/sys/class/power_supply/gcpm_pps/uevent");
+    DumpFileToFd(fd, "Power supply property main-charger", "/sys/class/power_supply/main-charger/uevent");
+    DumpFileToFd(fd, "Power supply property pca9486-mains", "/sys/class/power_supply/pca9468-mains/uevent");
+    DumpFileToFd(fd, "Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-i2c-max77759tcpc/uevent");
+    DumpFileToFd(fd, "Power supply property usb", "/sys/class/power_supply/usb/uevent");
+    DumpFileToFd(fd, "Power supply property wireless", "/sys/class/power_supply/wireless/uevent");
+    if (!stat("/sys/class/power_supply/maxfg", &buffer)) {
+        DumpFileToFd(fd, "Power supply property maxfg", "/sys/class/power_supply/maxfg/uevent");
+        DumpFileToFd(fd, "m5_state", "/sys/class/power_supply/maxfg/m5_model_state");
+        DumpFileToFd(fd, "maxfg", "/dev/logbuffer_maxfg");
+    } else {
+        DumpFileToFd(fd, "Power supply property maxfg_base", "/sys/class/power_supply/maxfg_base/uevent");
+        DumpFileToFd(fd, "Power supply property maxfg_flip", "/sys/class/power_supply/maxfg_flip/uevent");
+        DumpFileToFd(fd, "m5_state", "/sys/class/power_supply/maxfg_base/m5_model_state");
+        DumpFileToFd(fd, "maxfg_base", "/dev/logbuffer_maxfg_base");
+        DumpFileToFd(fd, "maxfg_flip", "/dev/logbuffer_maxfg_flip");
+    }
+
+    if (!stat("/dev/logbuffer_tcpm", &buffer)) {
+        DumpFileToFd(fd, "Logbuffer TCPM", "/dev/logbuffer_tcpm");
+    } else if (!PropertiesHelper::IsUserBuild()) {
+        if (!stat("/sys/kernel/debug/tcpm", &buffer)) {
+            RunCommandToFd(fd, "TCPM logs", {"/vendor/bin/sh", "-c", "cat /sys/kernel/debug/tcpm/*"});
+        } else {
+            RunCommandToFd(fd, "TCPM logs", {"/vendor/bin/sh", "-c", "cat /sys/kernel/debug/usb/tcpm*"});
+        }
+    }
+
+    DumpFileToFd(fd, "PD Engine", "/dev/logbuffer_usbpd");
+    DumpFileToFd(fd, "PPS-google_cpm", "/dev/logbuffer_cpm");
+    DumpFileToFd(fd, "PPS-dc", "/dev/logbuffer_pca9468");
+
+    DumpFileToFd(fd, "BMS", "/dev/logbuffer_ssoc");
+    DumpFileToFd(fd, "TTF", "/dev/logbuffer_ttf");
+    DumpFileToFd(fd, "TTF details", "/sys/class/power_supply/battery/ttf_details");
+    DumpFileToFd(fd, "TTF stats", "/sys/class/power_supply/battery/ttf_stats");
+    DumpFileToFd(fd, "maxq", "/dev/logbuffer_maxq");
+
+    RunCommandToFd(fd, "TRICKLE-DEFEND Config", {"/vendor/bin/sh", "-c",
+                        " cd /sys/devices/platform/google,battery/power_supply/battery/;"
+                        " for f in `ls bd_*` ; do echo \"$f: `cat $f`\" ; done"});
+
+    RunCommandToFd(fd, "DWELL-DEFEND Config", {"/vendor/bin/sh", "-c",
+                        " cd /sys/devices/platform/google,charger/;"
+                        " for f in `ls charge_s*` ; do echo \"$f: `cat $f`\" ; done"});
+
+    RunCommandToFd(fd, "TEMP-DEFEND Config", {"/vendor/bin/sh", "-c",
+                        " cd /sys/devices/platform/google,charger/;"
+                        " for f in `ls bd_*` ; do echo \"$f: `cat $f`\" ; done"});
+    if (!PropertiesHelper::IsUserBuild()) {
+
+        RunCommandToFd(fd, "DC_registers dump", {"/vendor/bin/sh", "-c",
+                        "for f in /d/regmap/*-0057-pca9468-mains ; do "
+                        "regs=`cat $f/registers`; echo $f: ;"
+                        "echo \"$regs\"; done"});
+
+        RunCommandToFd(fd, "fg_model", {"/vendor/bin/sh", "-c",
+                        "for f in /d/maxfg* ; do "
+                        "regs=`cat $f/fg_model`; echo $f: ;"
+                        "echo \"$regs\"; done"});
+
+        RunCommandToFd(fd, "fg_alo_ver", {"/vendor/bin/sh", "-c",
+                        "for f in /d/maxfg* ; do "
+                        "regs=`cat $f/algo_ver`; echo $f: ;"
+                        "echo \"$regs\"; done"});
+
+        RunCommandToFd(fd, "fg_model_ok", {"/vendor/bin/sh", "-c",
+                        "for f in /d/maxfg* ; do "
+                        "regs=`cat $f/model_ok`; echo $f: ;"
+                        "echo \"$regs\"; done"});
+
+
+        /* FG Registers */
+        RunCommandToFd(fd, "fg registers", {"/vendor/bin/sh", "-c",
+                        "for f in /d/regmap/*-0036 ; do "
+                        "regs=`cat $f/registers`; echo $f: ;"
+                        "echo \"$regs\"; done"});
+    }
+
+    /* EEPROM State */
+    if (!stat("/sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom", &buffer)) {
+        RunCommandToFd(fd, "Battery EEPROM", {"/vendor/bin/sh", "-c", "xxd /sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom"});
+    } else {
+        RunCommandToFd(fd, "Battery EEPROM", {"/vendor/bin/sh", "-c", "xxd /sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom"});
+    }
+
+    DumpFileToFd(fd, "Charger Stats", "/sys/class/power_supply/battery/charge_details");
+    if (!PropertiesHelper::IsUserBuild()) {
+        RunCommandToFd(fd, "Google Charger", {"/vendor/bin/sh", "-c", "cd /sys/kernel/debug/google_charger/; "
+                        "for f in `ls pps_*` ; do echo \"$f: `cat $f`\" ; done"});
+        RunCommandToFd(fd, "Google Battery", {"/vendor/bin/sh", "-c", "cd /sys/kernel/debug/google_battery/; "
+                        "for f in `ls ssoc_*` ; do echo \"$f: `cat $f`\" ; done"});
+    }
+
+    DumpFileToFd(fd, "WLC logs", "/dev/logbuffer_wireless");
+    DumpFileToFd(fd, "WLC VER", "/sys/class/power_supply/wireless/device/version");
+    DumpFileToFd(fd, "WLC STATUS", "/sys/class/power_supply/wireless/device/status");
+    DumpFileToFd(fd, "WLC FW Version", "/sys/class/power_supply/wireless/device/fw_rev");
+    DumpFileToFd(fd, "RTX", "/dev/logbuffer_rtx");
+
+    if (!PropertiesHelper::IsUserBuild()) {
+        RunCommandToFd(fd, "gvotables", {"/vendor/bin/sh", "-c", "cat /sys/kernel/debug/gvotables/*/status"});
+    }
+    RunCommandToFd(fd, "Mitigation Stats", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tCount\\tSOC\\tTime\\tVoltage\"; "
+                        "for f in `ls /sys/devices/virtual/pmic/mitigation/last_triggered_count/*` ; "
+                        "do count=`cat $f`; "
+                        "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/last_triggered_count\\//}; "
+                        "b=${f/last_triggered_count/last_triggered_capacity}; "
+                        "c=${f/last_triggered_count/last_triggered_timestamp/}; "
+                        "d=${f/last_triggered_count/last_triggered_voltage/}; "
+                        "cnt=`cat $f`; "
+                        "cap=`cat ${b/count/cap}`; "
+                        "ti=`cat ${c/count/time}`; "
+                        "volt=`cat ${d/count/volt}`; "
+                        "echo \"${a/_count/} "
+                        "\\t$cnt\\t$cap\\t$ti\\t$volt\" ; done"});
+    RunCommandToFd(fd, "Clock Divider Ratio", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tRatio\"; "
+                        "for f in `ls /sys/devices/virtual/pmic/mitigation/clock_ratio/*` ; "
+                        "do ratio=`cat $f`; "
+                        "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/clock_ratio\\//}; "
+                        "echo \"${a/_ratio/} \\t$ratio\" ; done"});
+    RunCommandToFd(fd, "Clock Stats", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tStats\"; "
+                        "for f in `ls /sys/devices/virtual/pmic/mitigation/clock_stats/*` ; "
+                        "do stats=`cat $f`; "
+                        "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/clock_stats\\//}; "
+                        "echo \"${a/_stats/} \\t$stats\" ; done"});
+    RunCommandToFd(fd, "Triggered Level", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tLevel\"; "
+                        "for f in `ls /sys/devices/virtual/pmic/mitigation/triggered_lvl/*` ; "
+                        "do lvl=`cat $f`; "
+                        "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/triggered_lvl\\//}; "
+                        "echo \"${a/_lvl/} \\t$lvl\" ; done"});
+    RunCommandToFd(fd, "Instruction", {"/vendor/bin/sh", "-c",
+                        "for f in `ls /sys/devices/virtual/pmic/mitigation/instruction/*` ; "
+                        "do val=`cat $f` ; "
+                        "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/instruction\\//}; "
+                        "echo \"$a=$val\" ; done"});
+
+}
+
+// Dump items related to thermal
+void DumpstateDevice::dumpThermalSection(int fd) {
+    RunCommandToFd(fd, "Temperatures", {"/vendor/bin/sh", "-c",
+                   "for f in /sys/class/thermal/thermal* ; do "
+                       "type=`cat $f/type` ; temp=`cat $f/temp` ; echo \"$type: $temp\" ; "
+                       "done"});
+    RunCommandToFd(fd, "Cooling Device Current State", {"/vendor/bin/sh", "-c",
+                   "for f in /sys/class/thermal/cooling* ; do "
+                       "type=`cat $f/type` ; temp=`cat $f/cur_state` ; echo \"$type: $temp\" ; "
+                       "done"});
+    RunCommandToFd(fd, "Cooling Device State2Power Table", {"/vendor/bin/sh", "-c",
+                   "for f in /sys/class/thermal/cooling* ; do "
+                       "type=`cat $f/type` ; state2power_table=`cat $f/state2power_table` ; echo \"$type: $state2power_table\" ; "
+                       "done"});
+}
+
+// Dump items related to touch
+void DumpstateDevice::dumpTouchSection(int fd) {
+    const char stm_cmd_path[4][50] = {"/sys/class/spi_master/spi11/spi11.0",
+                                      "/proc/fts/driver_test",
+                                      "/sys/class/spi_master/spi6/spi6.0",
+                                      "/proc/fts_ext/driver_test"};
+    const char lsi_spi_path[] = "/sys/devices/virtual/sec/tsp";
+    char cmd[256];
+
+    for (int i = 0; i < 4; i+=2) {
+        snprintf(cmd, sizeof(cmd), "%s", stm_cmd_path[i + 1]);
+        if (!access(cmd, R_OK)) {
+            snprintf(cmd, sizeof(cmd), "echo A0 01 01 > %s", stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Force Set AP as Bus Owner with Bugreport Flag",
+                           {"/vendor/bin/sh", "-c", cmd});
+        }
+
+        snprintf(cmd, sizeof(cmd), "%s/appid", stm_cmd_path[i]);
+        if (!access(cmd, R_OK)) {
+            // Touch firmware version
+            DumpFileToFd(fd, "STM touch firmware version", cmd);
+
+            // Touch controller status
+            snprintf(cmd, sizeof(cmd), "%s/status", stm_cmd_path[i]);
+            DumpFileToFd(fd, "STM touch status", cmd);
+
+            // Mutual raw data
+            snprintf(cmd, sizeof(cmd),
+                     "echo 13 00 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd",
+                     stm_cmd_path[i], stm_cmd_path[i]);
+            RunCommandToFd(fd, "Mutual Raw", {"/vendor/bin/sh", "-c", cmd});
+
+            // Mutual strength data
+            snprintf(cmd, sizeof(cmd),
+                     "echo 17 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd",
+                     stm_cmd_path[i], stm_cmd_path[i]);
+            RunCommandToFd(fd, "Mutual Strength", {"/vendor/bin/sh", "-c", cmd});
+
+            // Self raw data
+            snprintf(cmd, sizeof(cmd),
+                     "echo 15 00 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd",
+                     stm_cmd_path[i], stm_cmd_path[i]);
+            RunCommandToFd(fd, "Self Raw", {"/vendor/bin/sh", "-c", cmd});
+        }
+
+        snprintf(cmd, sizeof(cmd), "%s", stm_cmd_path[i + 1]);
+        if (!access(cmd, R_OK)) {
+            snprintf(cmd, sizeof(cmd), "echo 23 00 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Mutual Raw Data",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 23 03 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Mutual Baseline Data",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 23 02 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Mutual Strength Data",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 24 00 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Self Raw Data",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 24 03 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Self Baseline Data",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 24 02 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Self Strength Data",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 32 10 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Mutual Compensation",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 32 11 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Mutual Low Power Compensation",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 33 12 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Self Compensation",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 34 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Golden Mutual Raw Data",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd), "echo 01 FA 20 00 00 24 80 > %s",
+                     stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Packaging Plant - HW reset",
+                           {"/vendor/bin/sh", "-c", cmd});
+            snprintf(cmd, sizeof(cmd), "echo 01 FA 20 00 00 68 08 > %s",
+                     stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Packaging Plant - Hibernate Memory",
+                           {"/vendor/bin/sh", "-c", cmd});
+            snprintf(cmd, sizeof(cmd),
+                     "echo 02 FB 00 04 3F D8 00 10 01 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Packaging Plant - Read 16 bytes from Address 0x00041FD8",
+                           {"/vendor/bin/sh", "-c", cmd});
+
+            snprintf(cmd, sizeof(cmd),
+                     "echo 01 A4 06 C3 > %s; echo 02 A7 00 00 00 20 00 > %s && cat %s",
+                     stm_cmd_path[i + 1], stm_cmd_path[i + 1], stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "HDM debug information (32 bytes)",
+                           {"/vendor/bin/sh", "-c", cmd});
+        }
+
+        snprintf(cmd, sizeof(cmd), "%s/stm_fts_cmd", stm_cmd_path[i]);
+        if (!access(cmd, R_OK)) {
+            // ITO raw data
+            snprintf(cmd, sizeof(cmd),
+                     "echo 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd",
+                     stm_cmd_path[i], stm_cmd_path[i]);
+            RunCommandToFd(fd, "ITO Raw", {"/vendor/bin/sh", "-c", cmd});
+        }
+
+        snprintf(cmd, sizeof(cmd), "%s", stm_cmd_path[i + 1]);
+        if (!access(cmd, R_OK)) {
+            snprintf(cmd, sizeof(cmd), "echo A0 00 01 > %s", stm_cmd_path[i + 1]);
+            RunCommandToFd(fd, "Restore Bus Owner",
+                           {"/vendor/bin/sh", "-c", cmd});
+        }
+    }
+
+    if (!access(lsi_spi_path, R_OK)) {
+        // Enable: force touch active
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "force_touch_active,2,1",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "Force Touch Active", {"/vendor/bin/sh", "-c", cmd});
+
+        // Firmware info
+        snprintf(cmd, sizeof(cmd), "%s/fw_version", lsi_spi_path);
+        DumpFileToFd(fd, "LSI firmware version", cmd);
+
+        // Touch status
+        snprintf(cmd, sizeof(cmd), "%s/status", lsi_spi_path);
+        DumpFileToFd(fd, "LSI touch status", cmd);
+
+        // Calibration info
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "get_mis_cal_info",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "Calibration info", {"/vendor/bin/sh", "-c", cmd});
+
+        // Mutual strength
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_delta_read_all",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "Mutual Strength", {"/vendor/bin/sh", "-c", cmd});
+
+        // Self strength
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_self_delta_read_all",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "Self Strength", {"/vendor/bin/sh", "-c", cmd});
+
+        // TYPE_AMBIENT_DATA
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_rawdata_read_type,3",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "TYPE_AMBIENT_DATA", {"/vendor/bin/sh", "-c", cmd});
+
+        // TYPE_DECODED_DATA
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_rawdata_read_type,5",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "TYPE_DECODED_DATA", {"/vendor/bin/sh", "-c", cmd});
+
+        // TYPE_OFFSET_DATA_SEC
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_rawdata_read_type,19",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "TYPE_OFFSET_DATA_SEC", {"/vendor/bin/sh", "-c", cmd});
+
+        // TYPE_NOI_P2P_MIN
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_rawdata_read_type,30",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "TYPE_NOI_P2P_MIN", {"/vendor/bin/sh", "-c", cmd});
+
+        // TYPE_NOI_P2P_MAX
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_rawdata_read_type,31",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "TYPE_NOI_P2P_MAX", {"/vendor/bin/sh", "-c", cmd});
+
+        // Raw cap
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_rawcap_read_all",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "Mutual Raw Cap", {"/vendor/bin/sh", "-c", cmd});
+
+        // Self raw cap
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_self_rawcap_read_all",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "Self Raw Cap", {"/vendor/bin/sh", "-c", cmd});
+
+        // CM2
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "run_rawcap_high_freq_read_all",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "CM2", {"/vendor/bin/sh", "-c", cmd});
+
+        // Disable: force touch active
+        snprintf(cmd, sizeof(cmd),
+                 "echo %s > %s/cmd && cat %s/cmd_result",
+                 "force_touch_active,2,0",
+                 lsi_spi_path, lsi_spi_path);
+        RunCommandToFd(fd, "Force Touch Active", {"/vendor/bin/sh", "-c", cmd});
+    }
+}
+
+// Dump items related to SoC
+void DumpstateDevice::dumpSocSection(int fd) {
+    DumpFileToFd(fd, "AP HW TUNE", "/sys/devices/system/chip-id/ap_hw_tune_str");
+    DumpFileToFd(fd, "EVT VERSION", "/sys/devices/system/chip-id/evt_ver");
+    DumpFileToFd(fd, "LOT ID", "/sys/devices/system/chip-id/lot_id");
+    DumpFileToFd(fd, "PRODUCT ID", "/sys/devices/system/chip-id/product_id");
+    DumpFileToFd(fd, "REVISION", "/sys/devices/system/chip-id/revision");
+    DumpFileToFd(fd, "RAW STR", "/sys/devices/system/chip-id/raw_str");
+}
+
+// Dump items related to CPUs
+void DumpstateDevice::dumpCpuSection(int fd) {
+    DumpFileToFd(fd, "CPU present", "/sys/devices/system/cpu/present");
+    DumpFileToFd(fd, "CPU online", "/sys/devices/system/cpu/online");
+    RunCommandToFd(fd, "CPU time-in-state", {"/vendor/bin/sh", "-c",
+                   "for cpu in /sys/devices/system/cpu/cpu*; do "
+                       "f=$cpu/cpufreq/stats/time_in_state; "
+                       "if [ ! -f $f ]; then continue; fi; "
+                       "echo $f:; cat $f; "
+                       "done"});
+    RunCommandToFd(fd, "CPU cpuidle", {"/vendor/bin/sh", "-c",
+                   "for cpu in /sys/devices/system/cpu/cpu*; do "
+                       "for d in $cpu/cpuidle/state*; do "
+                           "if [ ! -d $d ]; then continue; fi; "
+                           "echo \"$d: `cat $d/name` `cat $d/desc` `cat $d/time` `cat $d/usage`\"; "
+                           "done; "
+                       "done"});
+    DumpFileToFd(fd, "INTERRUPTS", "/proc/interrupts");
+}
+
+// Dump items related to Devfreq & BTS
+void DumpstateDevice::dumpDevfreqSection(int fd) {
+    DumpFileToFd(fd, "MIF DVFS",
+                 "/sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/time_in_state");
+    DumpFileToFd(fd, "INT DVFS",
+                 "/sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/time_in_state");
+    DumpFileToFd(fd, "INTCAM DVFS",
+                 "/sys/devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam/time_in_state");
+    DumpFileToFd(fd, "DISP DVFS",
+                 "/sys/devices/platform/17000040.devfreq_disp/devfreq/17000040.devfreq_disp/time_in_state");
+    DumpFileToFd(fd, "CAM DVFS",
+                 "/sys/devices/platform/17000050.devfreq_cam/devfreq/17000050.devfreq_cam/time_in_state");
+    DumpFileToFd(fd, "TNR DVFS",
+                 "/sys/devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr/time_in_state");
+    DumpFileToFd(fd, "MFC DVFS",
+                 "/sys/devices/platform/17000070.devfreq_mfc/devfreq/17000070.devfreq_mfc/time_in_state");
+    DumpFileToFd(fd, "BO DVFS",
+                 "/sys/devices/platform/17000080.devfreq_bo/devfreq/17000080.devfreq_bo/time_in_state");
+    DumpFileToFd(fd, "BTS stats", "/sys/devices/platform/exynos-bts/bts_stats");
+}
+
+// Dump items related to memory
+void DumpstateDevice::dumpMemorySection(int fd) {
+    RunCommandToFd(fd, "ION HEAPS", {"/vendor/bin/sh", "-c",
+                   "for d in $(ls -d /d/ion/*); do "
+                       "if [ -f $d ]; then "
+                           "echo --- $d; cat $d; "
+                       "else "
+                           "for f in $(ls $d); do "
+                               "echo --- $d/$f; cat $d/$f; "
+                               "done; "
+                        "fi; "
+                        "done"});
+    DumpFileToFd(fd, "dmabuf info", "/d/dma_buf/bufinfo");
+    DumpFileToFd(fd, "Page Pinner - longterm pin", "/sys/kernel/debug/page_pinner/longterm_pinner");
+    DumpFileToFd(fd, "Page Pinner - alloc_contig_failed", "/sys/kernel/debug/page_pinner/alloc_contig_failed");
+    RunCommandToFd(fd, "Pixel CMA stat", {"/vendor/bin/sh", "-c",
+                   "for d in $(ls -d /sys/kernel/pixel_stat/mm/cma/*); do "
+                       "if [ -f $d ]; then "
+                           "echo --- $d; cat $d; "
+                       "else "
+                           "for f in $(ls $d); do "
+                               "echo --- $d/$f; cat $d/$f; "
+                               "done; "
+                        "fi; "
+                        "done"});
+}
+
+static void DumpF2FS(int fd) {
+    DumpFileToFd(fd, "F2FS", "/sys/kernel/debug/f2fs/status");
+    RunCommandToFd(fd, "F2FS - fsck time (ms)", {"/vendor/bin/sh", "-c", "getprop ro.boottime.init.fsck.data"});
+    RunCommandToFd(fd, "F2FS - checkpoint=disable time (ms)", {"/vendor/bin/sh", "-c", "getprop ro.boottime.init.mount.data"});
+}
+
+static void DumpUFS(int fd) {
+    DumpFileToFd(fd, "UFS model", "/sys/block/sda/device/model");
+    DumpFileToFd(fd, "UFS rev", "/sys/block/sda/device/rev");
+    DumpFileToFd(fd, "UFS size", "/sys/block/sda/size");
+
+    DumpFileToFd(fd, "UFS Slow IO Read", "/dev/sys/block/bootdevice/slowio_read_cnt");
+    DumpFileToFd(fd, "UFS Slow IO Write", "/dev/sys/block/bootdevice/slowio_write_cnt");
+    DumpFileToFd(fd, "UFS Slow IO Unmap", "/dev/sys/block/bootdevice/slowio_unmap_cnt");
+    DumpFileToFd(fd, "UFS Slow IO Sync", "/dev/sys/block/bootdevice/slowio_sync_cnt");
+
+    RunCommandToFd(fd, "UFS err_stats", {"/vendor/bin/sh", "-c",
+                       "path=\"/dev/sys/block/bootdevice/err_stats\"; "
+                       "for node in `ls $path/* | grep -v reset_err_status`; do "
+                       "printf \"%s:%d\\n\" $(basename $node) $(cat $node); done;"});
+
+
+    RunCommandToFd(fd, "UFS io_stats", {"/vendor/bin/sh", "-c",
+                       "path=\"/dev/sys/block/bootdevice/io_stats\"; "
+                       "printf \"\\t\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" "
+                       "ReadCnt ReadBytes WriteCnt WriteBytes RWCnt RWBytes; "
+                       "str=$(cat $path/*_start); arr=($str); "
+                       "printf \"Started: \\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" "
+                       "${arr[1]} ${arr[0]} ${arr[5]} ${arr[4]} ${arr[3]} ${arr[2]}; "
+                       "str=$(cat $path/*_complete); arr=($str); "
+                       "printf \"Completed: \\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" "
+                       "${arr[1]} ${arr[0]} ${arr[5]} ${arr[4]} ${arr[3]} ${arr[2]}; "
+                       "str=$(cat $path/*_maxdiff); arr=($str); "
+                       "printf \"MaxDiff: \\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\\n\" "
+                       "${arr[1]} ${arr[0]} ${arr[5]} ${arr[4]} ${arr[3]} ${arr[2]}; "});
+
+    RunCommandToFd(fd, "UFS req_stats", {"/vendor/bin/sh", "-c",
+                       "path=\"/dev/sys/block/bootdevice/req_stats\"; "
+                       "printf \"\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" "
+                       "All Write Read Security Flush Discard; "
+                       "str=$(cat $path/*_min); arr=($str); "
+                       "printf \"Min:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" "
+                       "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]}; "
+                       "str=$(cat $path/*_max); arr=($str); "
+                       "printf \"Max:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" "
+                       "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]}; "
+                       "str=$(cat $path/*_avg); arr=($str); "
+                       "printf \"Avg.:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" "
+                       "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]}; "
+                       "str=$(cat $path/*_sum); arr=($str); "
+                       "printf \"Count:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\\n\" "
+                       "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]};"});
+
+    std::string ufs_health = "for f in $(find /dev/sys/block/bootdevice/health_descriptor -type f); do if [[ -r $f && -f $f ]]; then echo --- $f; cat $f; echo ''; fi; done";
+    RunCommandToFd(fd, "UFS health", {"/vendor/bin/sh", "-c", ufs_health.c_str()});
+}
+
+// Dump items related to storage
+void DumpstateDevice::dumpStorageSection(int fd) {
+    DumpF2FS(fd);
+    DumpUFS(fd);
+}
+
+// Dump items related to display
+void DumpstateDevice::dumpDisplaySection(int fd) {
+    DumpFileToFd(fd, "CRTC-0 underrun count", "/sys/kernel/debug/dri/0/crtc-0/underrun_cnt");
+    DumpFileToFd(fd, "CRTC-0 crc count", "/sys/kernel/debug/dri/0/crtc-0/crc_cnt");
+    DumpFileToFd(fd, "CRTC-0 ecc count", "/sys/kernel/debug/dri/0/crtc-0/ecc_cnt");
+    DumpFileToFd(fd, "CRTC-0 idma err count", "/sys/kernel/debug/dri/0/crtc-0/idma_err_cnt");
+    DumpFileToFd(fd, "CRTC-0 event log", "/sys/kernel/debug/dri/0/crtc-0/event");
+    DumpFileToFd(fd, "CRTC-1 underrun count", "/sys/kernel/debug/dri/0/crtc-1/underrun_cnt");
+    DumpFileToFd(fd, "CRTC-1 crc count", "/sys/kernel/debug/dri/0/crtc-1/crc_cnt");
+    DumpFileToFd(fd, "CRTC-1 ecc count", "/sys/kernel/debug/dri/0/crtc-1/ecc_cnt");
+    DumpFileToFd(fd, "CRTC-1 idma err count", "/sys/kernel/debug/dri/0/crtc-1/idma_err_cnt");
+    DumpFileToFd(fd, "CRTC-1 event log", "/sys/kernel/debug/dri/0/crtc-1/event");
+    RunCommandToFd(fd, "libdisplaycolor", {"/vendor/bin/dumpsys", "displaycolor", "-v"},
+                   CommandOptions::WithTimeout(2).Build());
+    DumpFileToFd(fd, "Primary panel extra info", "/sys/devices/platform/exynos-drm/primary-panel/panel_extinfo");
+    DumpFileToFd(fd, "secondary panel extra info", "/sys/devices/platform/exynos-drm/secondary-panel/panel_extinfo");
+}
+
+// Dump items related to AoC
+void DumpstateDevice::dumpAoCSection(int fd) {
+    DumpFileToFd(fd, "AoC Service Status", "/sys/devices/platform/19000000.aoc/services");
+    DumpFileToFd(fd, "AoC Restarts", "/sys/devices/platform/19000000.aoc/restart_count");
+    DumpFileToFd(fd, "AoC Coredumps", "/sys/devices/platform/19000000.aoc/coredump_count");
+    DumpFileToFd(fd, "AoC ring buf wake", "/sys/devices/platform/19000000.aoc/control/ring_buffer_wakeup");
+    DumpFileToFd(fd, "AoC host ipc wake", "/sys/devices/platform/19000000.aoc/control/host_ipc_wakeup");
+    DumpFileToFd(fd, "AoC usf wake", "/sys/devices/platform/19000000.aoc/control/usf_wakeup");
+    DumpFileToFd(fd, "AoC audio wake", "/sys/devices/platform/19000000.aoc/control/audio_wakeup");
+    DumpFileToFd(fd, "AoC logging wake", "/sys/devices/platform/19000000.aoc/control/logging_wakeup");
+    DumpFileToFd(fd, "AoC hotword wake", "/sys/devices/platform/19000000.aoc/control/hotword_wakeup");
+    DumpFileToFd(fd, "AoC memory exception wake", "/sys/devices/platform/19000000.aoc/control/memory_exception");
+}
+
+// Dump items related to sensors usf.
+void DumpstateDevice::dumpSensorsUSFSection(int fd) {
+    CommandOptions options = CommandOptions::WithTimeout(2).Build();
+    RunCommandToFd(fd, "USF statistics",
+                   {"/vendor/bin/sh", "-c", "usf_stats get --all"},
+                   options);
+    if (!PropertiesHelper::IsUserBuild()) {
+        // Not a user build, if this is also not a production device dump the USF registry.
+        std::string hwRev = android::base::GetProperty(HW_REVISION, "");
+        if (hwRev.find("PROTO") != std::string::npos ||
+            hwRev.find("EVT") != std::string::npos ||
+            hwRev.find("DVT") != std::string::npos) {
+            RunCommandToFd(fd, "USF Registry",
+                           {"/vendor/bin/sh", "-c", "usf_reg_edit save -"},
+                           options);
+        }
+    }
+}
+
+// Gzip binary data and dump to fd in base64 format. Cmd to decode is also attached.
+void dumpGzippedFileInBase64ToFd(int fd, const char* title, const char* file_path) {
+    auto cmd = android::base::StringPrintf("echo 'base64 -d <<EOF | gunzip' ; "
+               "/vendor/bin/gzip < \"%s\" | /vendor/bin/base64 ; "
+               "echo 'EOF'", file_path);
+    RunCommandToFd(fd, title,
+                   {"/vendor/bin/sh", "-c", cmd.c_str()},
+                   CommandOptions::WithTimeout(10).Build());
+}
+
+struct abl_log_header {
+    uint64_t i;
+    uint64_t size;
+    char buf[];
+} __attribute__((packed));
+
+// Dump items related to ramdump.
+void DumpstateDevice::dumpRamdumpSection(int fd) {
+    std::string abl_log;
+    if (android::base::ReadFileToString("/mnt/vendor/ramdump/abl.log", &abl_log)) {
+        const struct abl_log_header *header = (const struct abl_log_header*) abl_log.c_str();
+        android::base::WriteStringToFd(android::base::StringPrintf(
+                    "------ Ramdump misc file: abl.log (i:0x%" PRIx64 " size:0x%" PRIx64 ") ------\n%s\n",
+                    header->i, header->size, std::string(header->buf, header->i).c_str()), fd);
+    } else {
+        android::base::WriteStringToFd("*** Ramdump misc file: abl.log: File not found\n", fd);
+    }
+    dumpGzippedFileInBase64ToFd(
+        fd, "Ramdump misc file: acpm.lst (gzipped in base64)", "/mnt/vendor/ramdump/acpm.lst");
+    dumpGzippedFileInBase64ToFd(
+        fd, "Ramdump misc file: s2d.lst (gzipped in base64)", "/mnt/vendor/ramdump/s2d.lst");
+}
+
+// Dump items that don't fit well into any other section
+void DumpstateDevice::dumpMiscSection(int fd) {
+    RunCommandToFd(fd, "VENDOR PROPERTIES", {"/vendor/bin/getprop"});
+    DumpFileToFd(fd, "VENDOR PROC DUMP", "/proc/vendor_sched/dump_task");
+}
+
+// Dump items related to GSC
+void DumpstateDevice::dumpGscSection(int fd) {
+    RunCommandToFd(fd, "Citadel VERSION", {"vendor/bin/hw/citadel_updater", "-lv"});
+    RunCommandToFd(fd, "Citadel STATS", {"vendor/bin/hw/citadel_updater", "--stats"});
+}
+
+// Dump essential camera debugging logs
+void DumpstateDevice::dumpCameraSection(int fd) {
+    RunCommandToFd(fd, "Camera HAL Graph State Dump", {"/vendor/bin/sh", "-c",
+                       "for f in $(ls -t /data/vendor/camera/hal_graph_state*.txt |head -1); do "
+                       "echo $f ; cat $f ; done"},
+                       CommandOptions::WithTimeout(4).Build());
+}
+
+void DumpstateDevice::dumpTrustySection(int fd) {
+    DumpFileToFd(fd, "Trusty TEE0 Logs", "/dev/trusty-log0");
+}
+
+// Dump items related to modem
+void DumpstateDevice::dumpModemSection(int fd) {
+    DumpFileToFd(fd, "Modem Stat", "/data/vendor/modem_stat/debug.txt");
+    RunCommandToFd(fd, "Modem SSR history", {"/vendor/bin/sh", "-c",
+                       "for f in $(ls /data/vendor/ssrdump/crashinfo_modem*); do "
+                       "echo $f ; cat $f ; done"},
+                       CommandOptions::WithTimeout(2).Build());
+    RunCommandToFd(fd, "RFSD error log", {"/vendor/bin/sh", "-c",
+                       "for f in $(ls /data/vendor/log/rfsd/rfslog_*); do "
+                       "echo $f ; cat $f ; done"},
+                       CommandOptions::WithTimeout(2).Build());
+}
+
+static void *dumpModemThread(void *data) {
+    std::string modemLogDir = MODEM_LOG_DIRECTORY;
+    std::string extendedLogDir = MODEM_EXTENDED_LOG_DIRECTORY;
+    std::string tcpdumpLogDir = TCPDUMP_LOG_DIRECTORY;
+    static const std::string sectionName = "modem";
+
+    const std::string modemLogCombined = modemLogDir + "/modem_log_all.tar";
+    const std::string modemLogAllDir = modemLogDir + "/modem_log";
+
+    long fdModem = (long)data;
+
+    ALOGD("dumpModemThread started\n");
+
+    RunCommandToFd(STDOUT_FILENO, "MKDIR MODEM LOG", {"/vendor/bin/mkdir", "-p", modemLogAllDir.c_str()}, CommandOptions::WithTimeout(2).Build());
+
+    bool modemLogEnabled = android::base::GetBoolProperty(MODEM_LOGGING_PERSIST_PROPERTY, false);
+    if (modemLogEnabled && android::base::GetProperty(MODEM_LOGGING_PATH_PROPERTY, "") == MODEM_LOG_DIRECTORY) {
+        bool modemLogStarted = android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false);
+        int maxFileNum = android::base::GetIntProperty(MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY, 100);
+
+        if (modemLogStarted) {
+            android::base::SetProperty(MODEM_LOGGING_PROPERTY, "false");
+            ALOGD("Stopping modem logging...\n");
+        } else {
+            ALOGD("modem logging is not running\n");
+        }
+
+        for (int i = 0; i < 15; i++) {
+            if (!android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false)) {
+                ALOGD("modem logging stopped\n");
+                sleep(1);
+                break;
+            }
+            sleep(1);
+        }
+
+        dumpLogs(STDOUT_FILENO, modemLogDir, modemLogAllDir, maxFileNum, MODEM_LOG_PREFIX);
+
+        if (modemLogStarted) {
+            ALOGD("Restarting modem logging...\n");
+            android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true");
+        }
+    }
+
+    if (!PropertiesHelper::IsUserBuild()) {
+        bool gpsLogEnabled = android::base::GetBoolProperty(GPS_LOGGING_STATUS_PROPERTY, false);
+        bool tcpdumpEnabled = android::base::GetBoolProperty(TCPDUMP_PERSIST_PROPERTY, false);
+        bool cameraLogsEnabled = android::base::GetBoolProperty(
+                "vendor.camera.debug.camera_performance_analyzer.attach_to_bugreport", true);
+
+        if (tcpdumpEnabled) {
+            dumpLogs(STDOUT_FILENO, tcpdumpLogDir, modemLogAllDir, android::base::GetIntProperty(TCPDUMP_NUMBER_BUGREPORT, 5), TCPDUMP_LOG_PREFIX);
+        }
+
+        if (gpsLogEnabled) {
+            dumpGpsLogs(STDOUT_FILENO, modemLogAllDir);
+        } else {
+            ALOGD("gps logging is not running\n");
+        }
+
+        if (cameraLogsEnabled) {
+            dumpCameraLogs(STDOUT_FILENO, modemLogAllDir);
+        }
+
+        dumpLogs(STDOUT_FILENO, extendedLogDir, modemLogAllDir, 50, EXTENDED_LOG_PREFIX);
+        dumpRilLogs(STDOUT_FILENO, modemLogAllDir);
+        dumpNetmgrLogs(modemLogAllDir);
+        dumpModemEFS(modemLogAllDir);
+    }
+
+    ALOGD("Going to compress logs\n");
+
+    RunCommandToFd(STDOUT_FILENO, "TAR LOG", {"/vendor/bin/tar", "cvf", modemLogCombined.c_str(), "-C", modemLogAllDir.c_str(), "."}, CommandOptions::WithTimeout(25).Build());
+    RunCommandToFd(STDOUT_FILENO, "CHG PERM", {"/vendor/bin/chmod", "a+w", modemLogCombined.c_str()}, CommandOptions::WithTimeout(2).Build());
+
+    std::vector<uint8_t> buffer(65536);
+    android::base::unique_fd fdLog(TEMP_FAILURE_RETRY(open(modemLogCombined.c_str(), O_RDONLY | O_CLOEXEC | O_NONBLOCK)));
+
+    ALOGD("Going to write to dumpstate board binary\n");
+    if (fdLog >= 0) {
+        while (1) {
+            ssize_t bytes_read = TEMP_FAILURE_RETRY(read(fdLog, buffer.data(), buffer.size()));
+
+            if (bytes_read == 0) {
+                break;
+            } else if (bytes_read < 0) {
+                ALOGD("read(%s): %s\n", modemLogCombined.c_str(), strerror(errno));
+                break;
+            }
+
+            ssize_t result = TEMP_FAILURE_RETRY(write(fdModem, buffer.data(), bytes_read));
+
+            if (result != bytes_read) {
+                ALOGD("Failed to write %ld bytes, actually written: %ld", bytes_read, result);
+                break;
+            }
+        }
+    }
+
+    ALOGD("Going to remove logs\n");
+
+    RunCommandToFd(STDOUT_FILENO, "RM MODEM DIR", { "/vendor/bin/rm", "-r", modemLogAllDir.c_str()}, CommandOptions::WithTimeout(2).Build());
+    RunCommandToFd(STDOUT_FILENO, "RM LOG", { "/vendor/bin/rm", modemLogCombined.c_str()}, CommandOptions::WithTimeout(2).Build());
+
+    ALOGD("dumpModemThread finished\n");
+
+    return NULL;
+}
+
+// Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow.
+Return<void> DumpstateDevice::dumpstateBoard(const hidl_handle &handle) {
+// Ignore return value, just return an empty status.
+    dumpstateBoard_1_1(handle, DumpstateMode::DEFAULT, 30 * 1000 /* timeoutMillis */);
+    return Void();
+}
+
+// Methods from ::android::hardware::dumpstate::V1_1::IDumpstateDevice follow.
+Return<DumpstateStatus> DumpstateDevice::dumpstateBoard_1_1(const hidl_handle& handle,
+                                                            const DumpstateMode mode,
+                                                            const uint64_t timeoutMillis) {
+    // Unused arguments.
+    (void) timeoutMillis;
+
+    if (handle == nullptr || handle->numFds < 1) {
+        ALOGE("no FDs\n");
+        return DumpstateStatus::ILLEGAL_ARGUMENT;
+    }
+
+    int fd = handle->data[0];
+    if (fd < 0) {
+        ALOGE("invalid FD: %d\n", handle->data[0]);
+        return DumpstateStatus::ILLEGAL_ARGUMENT;
+    }
+
+    if (mode == DumpstateMode::WEAR) {
+        // We aren't a Wear device.
+        ALOGE("Unsupported mode: %d\n", mode);
+        return DumpstateStatus::UNSUPPORTED_MODE;
+    } else if (mode < DumpstateMode::FULL || mode > DumpstateMode::PROTO) {
+        ALOGE("Invalid mode: %d\n", mode);
+        return DumpstateStatus::ILLEGAL_ARGUMENT;
+    }
+
+    // Create thread to collect modem related logs
+    pthread_t modemThreadHandle = 0;
+    if (getVerboseLoggingEnabled()) {
+        if (handle->numFds < 2) {
+            ALOGE("no FD for modem\n");
+        } else {
+            int fdModem = handle->data[1];
+            if (pthread_create(&modemThreadHandle, NULL, dumpModemThread, (void *)((long)fdModem)) != 0) {
+                ALOGE("could not create thread for dumpModem\n");
+            }
+        }
+    } else {
+        ALOGD("Verbose logging is not enabled\n");
+    }
+
+    dumpTextSection(fd, kAllSections);
+
+    if (modemThreadHandle) {
+        pthread_join(modemThreadHandle, NULL);
+    }
+
+    return DumpstateStatus::OK;
+}
+
+Return<void> DumpstateDevice::setVerboseLoggingEnabled(const bool enable) {
+    ::android::base::SetProperty(kVerboseLoggingProperty, enable ? "true" : "false");
+    return Void();
+}
+
+Return<bool> DumpstateDevice::getVerboseLoggingEnabled() {
+    return ::android::base::GetBoolProperty(kVerboseLoggingProperty, false);
+}
+
+// Since HALs that support the debug() interface are automatically invoked during
+// bugreport generation and we don't want to generate a second copy of the same
+// data that will go into dumpstate_board.txt, this function will only do
+// something if it is called with an option, e.g.
+//   lshal debug android.hardware.dumpstate@1.0::IDumpstateDevice/default all
+//
+// Also, note that sections which generate attachments and/or binary data when
+// included in a bugreport are not available through the debug() interface.
+Return<void> DumpstateDevice::debug(const hidl_handle &handle, const hidl_vec<hidl_string> &args) {
+    // Exit when dump is completed since this is a lazy HAL.
+    addPostCommandTask([]() {
+        exit(0);
+    });
+
+    if (handle == nullptr || handle->numFds < 1 || args.size() != 1) {
+        return Void();
+    }
+
+    int fd = handle->data[0];
+    dumpTextSection(fd, static_cast<std::string>(args[0]));
+
+    fsync(fd);
+    return Void();
+}
+
+
+}  // namespace implementation
+}  // namespace V1_1
+}  // namespace dumpstate
+}  // namespace hardware
+}  // namespace android
diff --git a/dumpstate/DumpstateDevice.h b/dumpstate/DumpstateDevice.h
new file mode 100644
index 0000000..74d0ce1
--- /dev/null
+++ b/dumpstate/DumpstateDevice.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+#ifndef ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H
+#define ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H
+
+#include <android/hardware/dumpstate/1.1/IDumpstateDevice.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <string>
+
+namespace android {
+namespace hardware {
+namespace dumpstate {
+namespace V1_1 {
+namespace implementation {
+
+using ::android::hardware::dumpstate::V1_1::DumpstateMode;
+using ::android::hardware::dumpstate::V1_1::DumpstateStatus;
+using ::android::hardware::dumpstate::V1_1::IDumpstateDevice;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+
+struct DumpstateDevice : public IDumpstateDevice {
+  public:
+    DumpstateDevice();
+
+    // Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow.
+    Return<void> dumpstateBoard(const hidl_handle& h) override;
+
+    // Methods from ::android::hardware::dumpstate::V1_1::IDumpstateDevice follow.
+    Return<DumpstateStatus> dumpstateBoard_1_1(const hidl_handle& h,
+                                               const DumpstateMode mode,
+                                               const uint64_t timeoutMillis) override;
+    Return<void> setVerboseLoggingEnabled(const bool enable) override;
+    Return<bool> getVerboseLoggingEnabled() override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+    Return<void> debug(const hidl_handle &fd, const hidl_vec<hidl_string> &args) override;
+
+  private:
+    const std::string kAllSections = "all";
+
+    std::vector<std::pair<std::string, std::function<void(int)>>> mTextSections;
+
+    void dumpTextSection(int fd, std::string const& sectionName);
+
+    // Text sections that can be dumped individually on the command line in
+    // addition to being included in full dumps
+    void dumpWlanSection(int fd);
+    void dumpPowerSection(int fd);
+    void dumpThermalSection(int fd);
+    void dumpTouchSection(int fd);
+    void dumpSocSection(int fd);
+    void dumpCpuSection(int fd);
+    void dumpDevfreqSection(int fd);
+    void dumpMemorySection(int fd);
+    void dumpStorageSection(int fd);
+    void dumpDisplaySection(int fd);
+    void dumpSensorsUSFSection(int fd);
+    void dumpAoCSection(int fd);
+    void dumpRamdumpSection(int fd);
+    void dumpMiscSection(int fd);
+    void dumpGscSection(int fd);
+    void dumpCameraSection(int fd);
+    void dumpTrustySection(int fd);
+    void dumpModemSection(int fd);
+};
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace dumpstate
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H
diff --git a/dumpstate/android.hardware.dumpstate@1.1-service.gs101.rc b/dumpstate/android.hardware.dumpstate@1.1-service.gs101.rc
new file mode 100644
index 0000000..6be0278
--- /dev/null
+++ b/dumpstate/android.hardware.dumpstate@1.1-service.gs101.rc
@@ -0,0 +1,6 @@
+service vendor.dumpstate-1-1 /vendor/bin/hw/android.hardware.dumpstate@1.1-service.gs101
+    class hal
+    user system
+    group system
+    interface android.hardware.dumpstate@1.0::IDumpstateDevice default
+    interface android.hardware.dumpstate@1.1::IDumpstateDevice default
diff --git a/dumpstate/service.cpp b/dumpstate/service.cpp
new file mode 100644
index 0000000..4717231
--- /dev/null
+++ b/dumpstate/service.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+#define LOG_TAG "android.hardware.dumpstate@1.0-service.gs101"
+
+#include <hidl/HidlSupport.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include "DumpstateDevice.h"
+
+using ::android::hardware::configureRpcThreadpool;
+using ::android::hardware::dumpstate::V1_1::IDumpstateDevice;
+using ::android::hardware::dumpstate::V1_1::implementation::DumpstateDevice;
+using ::android::hardware::joinRpcThreadpool;
+using ::android::sp;
+
+
+int main(int /* argc */, char* /* argv */ []) {
+  sp<IDumpstateDevice> dumpstate = new DumpstateDevice;
+  configureRpcThreadpool(1, true);
+
+  android::status_t status = dumpstate->registerAsService();
+
+  if (status != android::OK)
+  {
+    ALOGE("Could not register DumpstateDevice service (%d).", status);
+    return -1;
+  }
+
+  joinRpcThreadpool();
+}
diff --git a/edgetpu/edgetpu.mk b/edgetpu/edgetpu.mk
new file mode 100644
index 0000000..426dfa9
--- /dev/null
+++ b/edgetpu/edgetpu.mk
@@ -0,0 +1,35 @@
+# Config variables for TPU chip on device.
+SOONG_CONFIG_NAMESPACES += edgetpu_config
+SOONG_CONFIG_edgetpu_config += chip
+
+SOONG_CONFIG_edgetpu_config_chip := abrolhos
+
+# TPU logging service
+PRODUCT_PACKAGES += \
+	android.hardware.edgetpu.logging@service-edgetpu-logging
+
+# TPU firmware
+PRODUCT_PACKAGES += \
+	edgetpu-abrolhos.fw
+
+# TPU NN AIDL HAL
+PRODUCT_PACKAGES += \
+	android.hardware.neuralnetworks@service-darwinn-aidl
+
+# TPU application service
+PRODUCT_PACKAGES += \
+	vendor.google.edgetpu_app_service@1.0-service
+
+# TPU vendor service
+PRODUCT_PACKAGES += \
+	vendor.google.edgetpu_vendor_service@1.0-service
+
+# TPU HAL client library
+PRODUCT_PACKAGES += \
+	libedgetpu_client.google
+
+# TPU metrics logger library
+PRODUCT_PACKAGES += \
+	libmetrics_logger
+
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/edgetpu/
diff --git a/factory/framework/Android.bp b/factory/framework/Android.bp
new file mode 100644
index 0000000..54b5b68
--- /dev/null
+++ b/factory/framework/Android.bp
@@ -0,0 +1,15 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+runtime_resource_overlay {
+    name: "FactoryOverlayFrameworkRes",
+    product_specific: true,
+}
diff --git a/factory/framework/AndroidManifest.xml b/factory/framework/AndroidManifest.xml
new file mode 100644
index 0000000..73875be
--- /dev/null
+++ b/factory/framework/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 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.
+-->
+<!-- Pixel specific factory overlays -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.frameworkres.overlay.factory">
+    <application android:hasCode="false" />
+    <overlay
+      android:targetPackage="android"
+      android:isStatic="true"
+      android:priority="2"/>
+</manifest>
diff --git a/factory/framework/res/drawable-nodpi/default_wallpaper.png b/factory/framework/res/drawable-nodpi/default_wallpaper.png
new file mode 100644
index 0000000..93b787e
--- /dev/null
+++ b/factory/framework/res/drawable-nodpi/default_wallpaper.png
Binary files differ
diff --git a/factory/launcher3/Android.bp b/factory/launcher3/Android.bp
new file mode 100644
index 0000000..31ee56a
--- /dev/null
+++ b/factory/launcher3/Android.bp
@@ -0,0 +1,15 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+runtime_resource_overlay {
+    name: "FactoryOverlayLauncher3",
+    product_specific: true,
+}
diff --git a/factory/launcher3/AndroidManifest.xml b/factory/launcher3/AndroidManifest.xml
new file mode 100644
index 0000000..3f28585
--- /dev/null
+++ b/factory/launcher3/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 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.
+-->
+<!-- Pixel specific factory overlays -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.launcher3.overlay.factory">
+    <application android:hasCode="false" />
+    <overlay
+      android:targetPackage="com.android.launcher3"
+      android:targetName="favorites"
+      android:isStatic="true"
+      android:priority="2"/>
+</manifest>
diff --git a/factory/launcher3/res/xml/default_workspace_5x5.xml b/factory/launcher3/res/xml/default_workspace_5x5.xml
new file mode 100644
index 0000000..ba1427a
--- /dev/null
+++ b/factory/launcher3/res/xml/default_workspace_5x5.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3">
+
+    <!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
+    <!-- Dialer, Capacity, ELabel, Language, Barcode -->
+    <resolve
+        launcher:container="-101"
+        launcher:screen="0"
+        launcher:x="0"
+        launcher:y="0" >
+        <favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" />
+        <favorite launcher:uri="tel:123" />
+        <favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" />
+    </resolve>
+
+    <resolve
+        launcher:container="-101"
+        launcher:screen="4"
+        launcher:x="4"
+        launcher:y="0" >
+        <favorite
+            launcher:packageName="com.google_cte.barcodescanner"
+            launcher:className="com.google_cte.barcodescanner.MainActivity" />
+    </resolve>
+
+</favorites>
diff --git a/factory/settings/Android.bp b/factory/settings/Android.bp
new file mode 100644
index 0000000..adc3ea4
--- /dev/null
+++ b/factory/settings/Android.bp
@@ -0,0 +1,15 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+runtime_resource_overlay {
+    name: "FactoryOverlaySettings",
+    product_specific: true,
+}
diff --git a/factory/settings/AndroidManifest.xml b/factory/settings/AndroidManifest.xml
new file mode 100644
index 0000000..72e7838
--- /dev/null
+++ b/factory/settings/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 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.
+-->
+<!-- Pixel specific factory overlays -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.providers.settings.overlay.factory">
+    <application android:hasCode="false" />
+    <overlay
+      android:targetPackage="com.android.providers.settings"
+      android:targetName="resources"
+      android:isStatic="true"
+      android:priority="2"/>
+</manifest>
diff --git a/factory/settings/res/values/defaults.xml b/factory/settings/res/values/defaults.xml
new file mode 100644
index 0000000..b7febd9
--- /dev/null
+++ b/factory/settings/res/values/defaults.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2009, 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>
+  <integer name="def_lockscreen_sounds_enabled">0</integer>
+  <bool name="def_lockscreen_disabled">true</bool>
+  <bool name="def_dtmf_tones_enabled">false</bool>
+  <bool name="def_sound_effects_enabled">false</bool>
+  <bool name="def_charging_sounds_enabled">false</bool>
+  <string name="def_immersive_mode_confirmations" translatable="false">confirmed</string>
+</resources>
diff --git a/factory_common.mk b/factory_common.mk
new file mode 100644
index 0000000..342ae46
--- /dev/null
+++ b/factory_common.mk
@@ -0,0 +1,81 @@
+#
+# Copyright 2020 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.
+#
+
+$(call inherit-product, device/google/gs101/aosp_common.mk)
+$(call inherit-product-if-exists, vendor/google_devices/gs101/factory/pixel/device-factory.mk)
+
+PRODUCT_PROPERTY_OVERRIDES += service.adb.root=1 \
+                              ro.vendor.factory=1 \
+                              ro.adb.secure=0
+
+# Factory Libraries of Audio
+PRODUCT_PACKAGES += audioroute libaudioroutelite
+
+# Enable fatp by default for factory builds
+PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
+    persist.vendor.camera.fatp.enable=1
+
+# Disable camera related features for factory builds
+PRODUCT_PROPERTY_OVERRIDES += \
+    persist.vendor.camera.partial_result_count=1 \
+    vendor.camera.debug.bypass_face_ssd_processor=1 \
+    vendor.camera.debug.csi_ebuf_enable=0 \
+    vendor.camera.debug.enable_face_detection=0 \
+    vendor.camera.debug.force_dpm_on=0 \
+    vendor.camera.debug.force_eis_on=0 \
+    vendor.camera.debug.force_eaf_on=0 \
+    vendor.camera.debug.force_local_tone_mapping_on=0 \
+    vendor.camera.debug.force_mesh_warp_on=0 \
+    vendor.camera.debug.force_rectiface_node_on=0 \
+    vendor.camera.debug.force_steadiface_on=0 \
+    vendor.camera.debug.force_tnr_on=0 \
+    vendor.camera.debug.local_tone_mapping_controller_v1.mode=0
+
+# Disable ScreenDecorations for factory builds
+PRODUCT_PROPERTY_OVERRIDES += \
+    debug.disable_screen_decorations=true
+
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_idle_timer_ms=80
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_touch_timer_ms=200
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_display_power_timer_ms=1000
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_content_detection_for_refresh_rate=true
+
+# factory should always has SELinux permissive
+BOARD_BOOTCONFIG += androidboot.selinux=permissive
+BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive
+
+# Disable Bluetooth as default in factory build
+DEVICE_PACKAGE_OVERLAYS += device/google/gs101/overlay-factory
+
+PRODUCT_COPY_FILES += \
+    device/google/gs101/conf/init.factory.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.factory.rc
+
+# Add factory-friendly changes
+PRODUCT_PACKAGES += \
+        FactoryOverlaySettings \
+        FactoryOverlayLauncher3 \
+        FactoryOverlayFrameworkRes
+
+# Disable DebugFS restrictions in factory builds
+PRODUCT_SET_DEBUGFS_RESTRICTIONS := false
+
+# PixelLogger for RF testing
+PRODUCT_PACKAGES_DEBUG += \
+    PixelLogger
+
+# Tool for installing Widevine keybox
+PRODUCT_PACKAGES_DEBUG += \
+    WvInstallKeybox
diff --git a/fingerprint/fpc1540/fingerprint_config.mk b/fingerprint/fpc1540/fingerprint_config.mk
new file mode 100644
index 0000000..1584e11
--- /dev/null
+++ b/fingerprint/fpc1540/fingerprint_config.mk
@@ -0,0 +1,18 @@
+# ----------------------------
+# Add feature flags below
+# ----------------------------
+FPC_CONFIG_BUILD_VERSION=33
+FPC_CONFIG_CAPACITIVE=1
+FPC_CONFIG_MAX_NR_TEMPLATES=5
+FPC_CONFIG_SENSE_TOUCH_CALIBRATION_PATH=/data/fpc/calibration_sense_touch.dat
+FPC_CONFIG_TA_FS=1
+FPC_DEFECTIVE_PIXEL_LIST_SIZE=5000
+FPC_SENSOR_SDK_LOG_LEVEL=3
+FPC_TEE_RUNTIME=TRUSTY
+LIBFPC_NAME=libfpc1541_S_nav_debug.a
+FPC_CONFIG_DEBUG=1
+FPC_CONFIG_PRODUCT_DEFAULT=FPC_PRODUCT_TYPE1541_S
+
+#
+# File included from device/<manufacture>/<>/<device>.mk
+# Packages to include into the build
diff --git a/fingerprint/fpc1540/fingerprint_config_factory.mk b/fingerprint/fpc1540/fingerprint_config_factory.mk
new file mode 100644
index 0000000..85b1064
--- /dev/null
+++ b/fingerprint/fpc1540/fingerprint_config_factory.mk
@@ -0,0 +1,21 @@
+# ----------------------------
+# Add feature flags below
+# ----------------------------
+FPC_CONFIG_BUILD_VERSION=33
+FPC_CONFIG_CAPACITIVE=1
+FPC_CONFIG_MAX_NR_TEMPLATES=5
+FPC_CONFIG_NAVIGATION=0
+FPC_CONFIG_SENSE_TOUCH_CALIBRATION_PATH=/data/fpc/calibration_sense_touch.dat
+FPC_CONFIG_SENSORTEST=1
+FPC_CONFIG_TA_FS=1
+FPC_DEFECTIVE_PIXEL_LIST_SIZE=5000
+FPC_SENSOR_SDK_LOG_LEVEL=3
+FPC_TEE_RUNTIME=TRUSTY
+LIBFPC_NAME=libfpc1541_S_nav_debug.a
+FPC_CONFIG_DEBUG=1
+FPC_CONFIG_ENGINEERING=1
+FPC_CONFIG_PRODUCT_DEFAULT=FPC_PRODUCT_TYPE1541_S
+
+#
+# File included from device/<manufacture>/<>/<device>.mk
+# Packages to include into the build
diff --git a/fingerprint/fpc1540/fpc1540.mk b/fingerprint/fpc1540/fpc1540.mk
new file mode 100644
index 0000000..7fdcb12
--- /dev/null
+++ b/fingerprint/fpc1540/fpc1540.mk
@@ -0,0 +1,8 @@
+# Fingerprint
+include device/google/gs101/fingerprint/fpc1540/fingerprint_config.mk
+
+PRODUCT_PACKAGES += \
+    android.hardware.biometrics.fingerprint@2.1-service.fpc \
+
+PRODUCT_COPY_FILES += \
+    frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml
diff --git a/fingerprint/fpc1540/fpc1540_factory.mk b/fingerprint/fpc1540/fpc1540_factory.mk
new file mode 100644
index 0000000..e868c5e
--- /dev/null
+++ b/fingerprint/fpc1540/fpc1540_factory.mk
@@ -0,0 +1,10 @@
+# Fingerprint
+include device/google/gs101/fingerprint/fpc1540/fingerprint_config_factory.mk
+
+PRODUCT_PACKAGES += \
+    fpc_tee_test\
+    SensorTestTool \
+
+PRODUCT_PACKAGES += \
+    com.fingerprints.extension.xml \
+    com.fingerprints.extension \
diff --git a/fingerprint/udfps_common.mk b/fingerprint/udfps_common.mk
new file mode 100644
index 0000000..51ce07f
--- /dev/null
+++ b/fingerprint/udfps_common.mk
@@ -0,0 +1,32 @@
+#
+# Copyright (C) 2020 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.
+#
+
+PRODUCT_COPY_FILES += \
+    frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml
+
+# Fingerprint manifest
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+DEVICE_MANIFEST_FILE += \
+    device/google/gs101/fingerprint/vendor.goodix.hardware.biometrics.fingerprint@2.1-service.xml
+endif
+
+# Include the Goodix AIDL HAL namespaces.
+PRODUCT_SOONG_NAMESPACES += vendor/goodix/udfps/g6_trusty
+PRODUCT_SOONG_NAMESPACES += vendor/goodix/udfps/g6_aidl_trusty
+
+SOONG_CONFIG_NAMESPACES += fp_hal_feature
+SOONG_CONFIG_fp_hal_feature += biometric_suez_support
+SOONG_CONFIG_fp_hal_feature_biometric_suez_support := true
diff --git a/fingerprint/udfps_factory.mk b/fingerprint/udfps_factory.mk
new file mode 100644
index 0000000..40993fb
--- /dev/null
+++ b/fingerprint/udfps_factory.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2020 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.
+#
+
+PRODUCT_PACKAGES += \
+    android.hardware.biometrics.fingerprint@2.1-service.goodix \
+    GF_delmar_factory \
+    udfps_test
+
+PRODUCT_PROPERTY_OVERRIDES += \
+    gf.debug.dump_data=1
diff --git a/fingerprint/udfps_shipping.mk b/fingerprint/udfps_shipping.mk
new file mode 100644
index 0000000..ed88f66
--- /dev/null
+++ b/fingerprint/udfps_shipping.mk
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2021 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.
+#
+
+PRODUCT_PACKAGES += \
+    android.hardware.biometrics.fingerprint-service.goodix
diff --git a/fingerprint/vendor.goodix.hardware.biometrics.fingerprint@2.1-service.xml b/fingerprint/vendor.goodix.hardware.biometrics.fingerprint@2.1-service.xml
new file mode 100644
index 0000000..e42448f
--- /dev/null
+++ b/fingerprint/vendor.goodix.hardware.biometrics.fingerprint@2.1-service.xml
@@ -0,0 +1,11 @@
+<manifest version="1.0" type="device">
+  <hal format="hidl">
+    <name>vendor.goodix.hardware.biometrics.fingerprint</name>
+    <transport>hwbinder</transport>
+    <version>2.1</version>
+    <interface>
+      <name>IGoodixFingerprintDaemon</name>
+      <instance>default</instance>
+    </interface>
+  </hal>
+</manifest>
diff --git a/firmware/BCM.btaddr b/firmware/BCM.btaddr
new file mode 100644
index 0000000..4bf70eb
--- /dev/null
+++ b/firmware/BCM.btaddr
@@ -0,0 +1 @@
+22:22:3b:ff:0d:50
diff --git a/firmware/BCM4362A2_001.003.006.0027.0033.hcd b/firmware/BCM4362A2_001.003.006.0027.0033.hcd
new file mode 100644
index 0000000..27b0dbc
--- /dev/null
+++ b/firmware/BCM4362A2_001.003.006.0027.0033.hcd
Binary files differ
diff --git a/firmware/BCM4389C0_003.001.010.0101.0000_Google_eval_USI_ES10.hcd b/firmware/BCM4389C0_003.001.010.0101.0000_Google_eval_USI_ES10.hcd
new file mode 100644
index 0000000..8e73e47
--- /dev/null
+++ b/firmware/BCM4389C0_003.001.010.0101.0000_Google_eval_USI_ES10.hcd
Binary files differ
diff --git a/firmware/BCM4389C1_003.002.009.0050.0000_Google_eval_USI_ES10_ePA_Updated.hcd b/firmware/BCM4389C1_003.002.009.0050.0000_Google_eval_USI_ES10_ePA_Updated.hcd
new file mode 100644
index 0000000..47120b3
--- /dev/null
+++ b/firmware/BCM4389C1_003.002.009.0050.0000_Google_eval_USI_ES10_ePA_Updated.hcd
Binary files differ
diff --git a/firmware/mfc/mfc_fw.bin b/firmware/mfc/mfc_fw.bin
new file mode 100644
index 0000000..4a5c070
--- /dev/null
+++ b/firmware/mfc/mfc_fw.bin
Binary files differ
diff --git a/firmware/mfc/signed/mfc_fw.bin b/firmware/mfc/signed/mfc_fw.bin
new file mode 100644
index 0000000..6f60c16
--- /dev/null
+++ b/firmware/mfc/signed/mfc_fw.bin
Binary files differ
diff --git a/gnss/47765/Android.bp b/gnss/47765/Android.bp
new file mode 100644
index 0000000..f4a2902
--- /dev/null
+++ b/gnss/47765/Android.bp
@@ -0,0 +1,231 @@
+// Copyright (C) 2020 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.
+
+soong_namespace {
+}
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+cc_prebuilt_library_shared {
+    name: "android.hardware.gnss@2.1-impl-google",
+    arch: {
+        arm64: {
+            srcs: ["bin/android.hardware.gnss@2.1-impl-google.so"],
+            shared_libs: [
+                "liblog",
+                "libhidlbase",
+                // "libhidltransport",
+                "libutils",
+                "android.hardware.gnss@1.0",
+                "android.hardware.gnss@1.1",
+                "android.hardware.gnss@2.0",
+                "android.hardware.gnss@2.1",
+                "android.hardware.gnss.measurement_corrections@1.0",
+                "android.hardware.gnss.visibility_control@1.0",
+                "android.hardware.gnss-V1-ndk_platform",
+                "libhardware",
+                "libc++",
+                "libc",
+                "libm",
+                "libdl",
+            ],
+        },
+    },
+    compile_multilib: "64",
+    vendor: true,
+    relative_install_path: "hw",
+    strip: {
+        none: true,
+    },
+    // Bypass because libhidltransport is deprecated
+    check_elf_files: false,
+}
+
+cc_prebuilt_binary {
+    name: "android.hardware.gnss@2.1-service-brcm",
+    arch: {
+        arm64: {
+            srcs: ["bin/android.hardware.gnss@2.1-service-brcm"],
+            shared_libs: [
+                "liblog",
+                "libutils",
+                "libhardware",
+                "android.hardware.gnss@1.0",
+                "libhidlbase",
+                // "libhidltransport",
+                // "libhwbinder",
+                "android.hardware.gnss@1.1",
+                "android.hardware.gnss@2.0",
+                "android.hardware.gnss@2.1",
+                "libc++",
+                "libc",
+                "libm",
+                "libdl",
+            ],
+        },
+    },
+    compile_multilib: "64",
+    vendor: true,
+    relative_install_path: "hw",
+    strip: {
+        none: true,
+    },
+    // Bypass because libhidltransport is deprecated
+    // Bypass because libhwbinder is deprecated
+    check_elf_files: false,
+    vintf_fragments: ["android.hardware.gnss@2.1-service-brcm.xml"]
+}
+
+cc_prebuilt_library_shared {
+    name: "flp.default",
+    arch: {
+        arm64: {
+            srcs: ["bin/flp.default.so"],
+            shared_libs: [
+                "liblog",
+                "libcutils",
+                "libutils",
+                "libc++",
+                "libc",
+                "libm",
+                "libdl",
+            ],
+        },
+    },
+    compile_multilib: "64",
+    vendor: true,
+    relative_install_path: "hw",
+    strip: {
+        none: true,
+    },
+    // Bypass because soname mismatch
+    check_elf_files: false,
+}
+
+cc_prebuilt_binary {
+    name: "gpsd",
+    arch: {
+        arm64: {
+            srcs: ["bin/gpsd"],
+            shared_libs: [
+                "liblog",
+                "libutils",
+                "libhardware_legacy",
+                "libcutils",
+                "libssl",
+                "libcrypto",
+                // "libsitril-gps",
+                "android.frameworks.sensorservice@1.0",
+                "libhidlbase",
+                "libandroid_net",
+                "libc++",
+                "libc",
+                "libm",
+                "libdl",
+            ],
+        },
+    },
+    compile_multilib: "64",
+    vendor: true,
+    relative_install_path: "hw",
+    strip: {
+        none: true,
+    },
+    // Bypass because libsitril-gps is Android.mk module
+    check_elf_files: false,
+}
+
+cc_prebuilt_library_shared {
+    name: "gps.default",
+    arch: {
+        arm64: {
+            srcs: ["bin/gps.default.so"],
+            shared_libs: [
+                "liblog",
+                "libcutils",
+                "libutils",
+                "libc++",
+                "libc",
+                "libm",
+                "libdl",
+            ],
+        },
+    },
+    compile_multilib: "64",
+    vendor: true,
+    relative_install_path: "hw",
+    strip: {
+        none: true,
+    },
+    // Bypass because soname mismatch
+    check_elf_files: false,
+}
+
+cc_prebuilt_binary {
+    name: "lhd",
+    arch: {
+        arm64: {
+            srcs: ["bin/lhd"],
+            shared_libs: [
+                "liblog",
+                "libutils",
+                "libhardware_legacy",
+                "libc++",
+                "libc",
+                "libm",
+                "libz",
+                "android.hardware.contexthub@1.0",
+                "libhidlbase",
+                "libdl",
+            ],
+        },
+    },
+    compile_multilib: "64",
+    vendor: true,
+    relative_install_path: "hw",
+    strip: {
+        none: true,
+    },
+}
+
+cc_prebuilt_binary {
+    name: "scd",
+    arch: {
+        arm64: {
+            srcs: ["bin/scd"],
+            shared_libs: [
+	        "liblog",
+                "libutils",
+                "libssl",
+                "libcrypto",
+                "libandroid_net",
+            ],
+        },
+    },
+    compile_multilib: "64",
+    vendor: true,
+    relative_install_path: "hw",
+    strip: {
+        none: true,
+    },
+}
diff --git a/gnss/47765/android.hardware.gnss@2.1-service-brcm.xml b/gnss/47765/android.hardware.gnss@2.1-service-brcm.xml
new file mode 100644
index 0000000..1eb3509
--- /dev/null
+++ b/gnss/47765/android.hardware.gnss@2.1-service-brcm.xml
@@ -0,0 +1,16 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.gnss</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <version>1.1</version>
+        <interface>
+            <name>IGnss</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl">
+        <name>android.hardware.gnss</name>
+        <fqname>IGnss/default</fqname>
+    </hal>
+</manifest>
diff --git a/gnss/47765/bin/android.hardware.gnss@2.1-impl-google.so b/gnss/47765/bin/android.hardware.gnss@2.1-impl-google.so
new file mode 100755
index 0000000..570a3b0
--- /dev/null
+++ b/gnss/47765/bin/android.hardware.gnss@2.1-impl-google.so
Binary files differ
diff --git a/gnss/47765/bin/android.hardware.gnss@2.1-service-brcm b/gnss/47765/bin/android.hardware.gnss@2.1-service-brcm
new file mode 100755
index 0000000..3242846
--- /dev/null
+++ b/gnss/47765/bin/android.hardware.gnss@2.1-service-brcm
Binary files differ
diff --git a/gnss/47765/bin/flp.default.so b/gnss/47765/bin/flp.default.so
new file mode 100755
index 0000000..d9ba6b5
--- /dev/null
+++ b/gnss/47765/bin/flp.default.so
Binary files differ
diff --git a/gnss/47765/bin/gps.default.so b/gnss/47765/bin/gps.default.so
new file mode 100755
index 0000000..862d64c
--- /dev/null
+++ b/gnss/47765/bin/gps.default.so
Binary files differ
diff --git a/gnss/47765/bin/gpsd b/gnss/47765/bin/gpsd
new file mode 100755
index 0000000..f51a74b
--- /dev/null
+++ b/gnss/47765/bin/gpsd
Binary files differ
diff --git a/gnss/47765/bin/lhd b/gnss/47765/bin/lhd
new file mode 100755
index 0000000..8cc43cc
--- /dev/null
+++ b/gnss/47765/bin/lhd
Binary files differ
diff --git a/gnss/47765/bin/scd b/gnss/47765/bin/scd
new file mode 100755
index 0000000..31ccc24
--- /dev/null
+++ b/gnss/47765/bin/scd
Binary files differ
diff --git a/gnss/47765/config/gps.cer b/gnss/47765/config/gps.cer
new file mode 100644
index 0000000..934e0c5
--- /dev/null
+++ b/gnss/47765/config/gps.cer
@@ -0,0 +1,161 @@
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
+MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI
+2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx
+1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ
+q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz
+tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ
+vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP
+BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV
+5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY
+1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4
+NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG
+Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91
+8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe
+pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
+MrY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFZTCCA02gAwIBAgIPAWv6o5fPZQ5hxva1vuNrMA0GCSqGSIb3DQEBCwUAMDgx
+CzAJBgNVBAYTAkpQMRcwFQYDVQQKDA5SYWt1dGVuIE1vYmlsZTEQMA4GA1UEAwwH
+Um9vdCBDQTAeFw0xOTA3MTYxMTU1NDJaFw0yOTA3MTMxMTU1NDJaMD4xCzAJBgNV
+BAYTAkpQMRcwFQYDVQQKEw5SYWt1dGVuIE1vYmlsZTEWMBQGA1UEAxMNREMgSXNz
+dWluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAObjAbQ8TkzF
+A+/WvSE6fzDf+rlvBKY1dJJbiJ2/j0lc+tj56dE7+BhZ2JVmAYIYfEoUw69dwxTR
+44EdZln3ZVFmMuOdfxvF9A46pMKzH1skr8ErDgjNyJ9f/JOuQ29p/7BvLC55aRzk
+yj99BYdzJWKs+5W7jQlv7/HyJ/PQ+rUEBOx4o/YiTucDFduWdV6/x5mcEbKD3ufL
+66vUEf3MHGegDkOWAMTchl1RmaYDlf3IMsXC7M2bFPFa/9y/vzaaY6EhnJ861co6
+rkOhTZe/kJZwqQYFmWczBPZK/9zRy3C1zA09tCBk+CDNBrNXe+3dMLFmnW4npxUQ
+oceTPhaaDo5lA6HkkARwVWLrporFZ2B/th2Bqtu6uObLSB6JMA2jxmKwKukM8/jp
+C9tKV9X03rHQIQultc63rivPdgQvqYgW1PVdzV1a3pZEMk5zv257+fxgfUGzfUh7
+tx0OY+BkykSP6ZK/BsbI/BY+rsS0L/0lmC22NU1p+qVeN3ZRHoqntB+FymaBfQ3/
+yfKkDNfnMua5GzLyyYGYUDDx71rtfrs3hGDiwjvE4B0IvsU0E7Oerk5gLqx8t0q/
+MmhI+CJJS1bH2sRBMcqfRAv+eyByFsvLY7Er/ztveaabX9xEwyPNFOcU+SZMhipv
+EUKmUcOAHxzx4HbYEFyM0Z7WgUdlTd1xAgMBAAGjZjBkMB8GA1UdIwQYMBaAFPUI
+BlLFno+y5xdHlCX349iVyS75MB0GA1UdDgQWBBQzVhTSCf8F31Zf0Bu661qymMko
+JzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0B
+AQsFAAOCAgEADQEufjma/6fT/Do4Fh13lZhsowHSsGv5sFYly6224GsciE80ZwYg
+R4EK/TAR0jorBXsu6sQc51pZ5SSHhIxfo2frfprTPaaWN6cZwfrb6UcnD/FaZ1jP
+HzWrI3kRxG9JCDffzE8uMf8Rnc69n1j+TBerk4Ix3Zui2TaaF6LVceJ4RgeNkZl0
+OFkGGFruHz/d83q7A6YjgN0iwMEabdtKH7Sq27LqGPeCS8NuGlrziNAxktdwaYlN
+D5t6ntM/1nHYPmVqdioEU9vAnyB3BiXOlITPHEEMOSlItcUsJ6rN5DZJaJgkBxvN
+Qdi6wmaDlxy8XFyy4KGFKWAl17FlfpqW5VtYQJ4aDpibGlGqamg0vm+IJDIGPlOs
+KQcxG17cOw4MCflAtnzHKHBn52DegQKwxev2ZpqdwVw/NqPq0yTNEbCRqEyiq7+H
+ljKEFiEjEjeXTcqR4DoCseA5UgcriuriV0OCvr8KTlviV4FEUu+IA9ut8YIvf2of
+Zz0z8rO4H+Rb4tMi/yBRM09x3rEW4hXwO0qpCBNBa0wEJBxufF3f6l9efEle+YTR
+XS92gutaoVluqMfRSJckjwWokToi32/FvF79guZymD0qHkOSi5dewsIW7zsdobvv
+t2CWLfTAb9cx222ELBpVPkfcgUKfF4RCGWPzuAlK6OueuDrInOiz8ag=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFUjCCAzqgAwIBAgICBpAwDQYJKoZIhvcNAQELBQAwODELMAkGA1UEBhMCSlAx
+FzAVBgNVBAoMDlJha3V0ZW4gTW9iaWxlMRAwDgYDVQQDDAdSb290IENBMB4XDTE5
+MDcxNjEwNTkwMVoXDTM5MDcxNTEwNTkwMVowODELMAkGA1UEBhMCSlAxFzAVBgNV
+BAoMDlJha3V0ZW4gTW9iaWxlMRAwDgYDVQQDDAdSb290IENBMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAqiPMbNudotG8afkk5Fwo2QdDcFFmC+qGpGjw
+yQs57QtGPRk1HsIhZFfr6zn8t1tZw6Zo+A0biFA7d2N93nYsseHBy/bZlhhOL+Js
+Jb907UM09L5xaJIgnbFYVT1QjtB7ksLAy3rHpdSKiggfT1ynwM/u6wIdWRSx24QU
+Vxpq5iFpVj041+/RnpCPASL5pSnbYZKQyOb/XsOaR+hz7aSjwiUzk2cRjAmRqYxY
+qYVe135IAy377inJRtUPvi3IhtmUHJToiMLBH5tChkjkIpdRG1lVIj4vGdzrIb+Q
+Kvg/k7BDVZ3sstsLvJ8evNonBzrqcr80ek/X+HFrgY/3M1VEru4ohLAiA877CuuG
+UAfrxFh9qjP1yue+dlrQWk+WHMbGMzKI1zCKEMphJatyNHfpRtD8LUWtLV96DD78
+qLwQwrSYrEMd2u/akeBFKINYWqpqkVBhSsV3eukXVIdSbtSAxZNv+4m6QddEcUvG
+2ZLf+yCf2tl+LPGXNL08vwMVbQqcDw8m+nDP4vu0VUixddyoqnnDlWOoQESuQFQ1
+IqYFQhRPs2dFRf5TJzkmbqRUXbaPxsrKGjTtVpPgENbv40nyRGyBbl1CzqpBFEp5
+7w4MPYDIzWKYbRyCnUE5WScRBFmym7242KA3SOfkylzGMb8KGJxohVME+7oMbNf5
+EjLWVgECAwEAAaNmMGQwHwYDVR0jBBgwFoAU9QgGUsWej7LnF0eUJffj2JXJLvkw
+HQYDVR0OBBYEFPUIBlLFno+y5xdHlCX349iVyS75MA4GA1UdDwEB/wQEAwIBBjAS
+BgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4ICAQCDGIeYrtivFt3p
+8k5vXKFUT072C7wMvfrAGYCYgIdUthWCqJoMwnG3Fsg7Ngu70La7ESBzEKpnpPWz
+eIdnREJkNP9iqiKHXnaUV2P/21AS1q6enVKBFOl7dYiVjqOZ+vac3a1UjLWkvm0g
+x4sg/f3PpiEzZM7ecnQYk2wfMSq8Jw0w1Lf0SEeoYZTkf12cqSJVSa/G7gEdL/Cn
+LO3yyBq0KPNdd87eIfvCLJj55UJ5dCr0JXRTUteBvJwflbPXmOqfI8fA05fwlJZS
+o1SBpMI9cEBwaPXQM9CPNKaWLvyOR1KpviRzbCnaKf44Fs2OuZboo3avZrC9eUoU
+HU2HKXRj8UMRlFeCdNugbOdGyK+CpXwMHVtIrtpf0iOUqo0rOekgnUSNi9qyjD1g
+IV3Y/NLVl9fqe8q66IWUn8NYndxigMKWcMCBFUjfP0yMZeqSHFiIv7zk9PuV/62k
+Yele7cK9iHnEUwWBj6VCEs6pZBS1QSmhRw3GWlSDc/gHXd38PG20zH7xg4z2H9Rc
+Op9P1ZW2kjqv5D2+q/qtaePAyHn3B05UZrQYUmx7LaHNO7op6dZgCdoR0sVsR+Fc
+Zyr0AhgiuTWrjtUEOGx2qJVwAsHkpqtlN+DaGT08dT64LvIf0bfGvmtm++/WEDWJ
+HInwg85pGm+sEkYbYFRBD0woPBsL3g==
+-----END CERTIFICATE-----
diff --git a/gnss/47765/config/gps.xml b/gnss/47765/config/gps.xml
new file mode 100644
index 0000000..7bf272d
--- /dev/null
+++ b/gnss/47765/config/gps.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<glgps xmlns="http://www.glpals.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.glpals.com/ glconfig.xsd" >
+  <hal
+       PortName="/dev/ttyBCM"
+       BaudRate="921600"
+       GpioNStdbyPath="/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby"
+       CustGpioDelayMs="250"
+       LogEnabled="false"
+       Log="JAVA"
+       SecondaryConfigPath="/vendor/etc/gnss/gps2.xml"
+       LogDirectory="/sdcard/gps/broadcom/storage/"
+       CtrlPipe="/data/vendor/gps/glgpsctrl"
+       NmeaOutName="/data/vendor/gps/nmea_out"
+
+       acSuplServer="supl.google.com"
+       SuplPort="7275"
+       SuplLogEnable="true"
+       SuplLogFullName="/data/vendor/gps/suplflow.txt"
+       tlsEnable="true"
+
+       SuplSslMethod="SSLv23_NO_TLSv1_2"
+       SuplEnable="true"
+       SuplUseApn="true"
+       SuplTlsCertDirPath="/etc/security/cacerts"
+       SuplTlsCertPath="/vendor/etc/gnss/gps.cer"
+       SuplUT1Seconds="20"
+       SuplUT2Seconds="20"
+       SuplUT3Seconds="20"
+       TcpConnectionTimeout="20"
+       SuplLppCapable="true"
+       SuplEcidCapable="true"
+       SuplVersion="2"
+       SuplMinorVersion="0"
+       SuplOtdoaCapable="true"
+       SuplGlonassCapable = "true"
+       SuplGalileoCapable = "true"
+       SuplBdsCapable = "true"
+       SuplMgpsCapable = "true"
+
+       RtoEnable="true"
+       RtiEnable="true"
+       HttpSyncLto="true"
+       LtoFileName="lto2.dat"
+       LtoDir="/data/vendor/gps/"
+       LtoSyncThresholdDays="1"
+
+       GnssYearOfHardware="2020"
+       CpGuardTimeSec="1"
+       CpLppGuardTimeSec="1"
+       IgnoreInjectedSystemTime="true"
+
+       AttributionAppPkgName="com.google.android.carrierlocation"
+
+       AssertEnabled="false"
+  />
+
+  <gll
+       LogPriMask="LOG_INFO"
+       LogFacMask="LOG_NMEA | LOG_GLLIOS | LOG_GLLAPI"
+       FrqPlan="FRQ_PLAN_26MHZ_2PPM_49_152MHZ_300PPB"
+       MultiCarrRFMode="GL_MULTI_CARR_RF_MODE_L1_L5"
+       MultiCarrLnaMask="L1_EXT_ON|L5_EXT_ON"
+       RfType="GL_RF_4776_BRCM"
+       ExtL5Bias="13.0"
+       EnableFilteringForLTEB13="true"
+
+       WarmStandbyTimeout1Seconds="10"
+       WarmStandbyTimeout2Seconds="15"
+
+       EnableGnssPropagateInStandby="true"
+
+       RfPathLossDb_Ap="3.5"
+       RfPathLossDb_Cp="3.5"
+       RfPathLossDb_Ap_L5="3.5"
+       RfPathLossDb_Cp_L5="3.5"
+       OnChipGpsCarrierType="3,2,3,3,2,3,2,3,3,3,1,2,1,3,2,1,2,3,1,1,1,1,3,3,3,3,3,1,2,3,2,3"
+
+  />
+
+  <gll_features
+       EnableLowPowerPmm="true"
+       EnableNicAutoSwitch="true"
+       EnableNavic="true"
+  />
+
+</glgps>
+
diff --git a/gnss/47765/config/gps.xml.oriole b/gnss/47765/config/gps.xml.oriole
new file mode 100644
index 0000000..b381988
--- /dev/null
+++ b/gnss/47765/config/gps.xml.oriole
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<glgps xmlns="http://www.glpals.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.glpals.com/ glconfig.xsd" >
+  <hal
+       PortName="/dev/ttyBCM"
+       BaudRate="921600"
+       GpioNStdbyPath="/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby"
+       CustGpioDelayMs="250"
+       LogEnabled="false"
+       Log="JAVA"
+       SecondaryConfigPath="/vendor/etc/gnss/gps2.xml"
+       LogDirectory="/sdcard/gps/broadcom/storage/"
+       CtrlPipe="/data/vendor/gps/glgpsctrl"
+       NmeaOutName="/data/vendor/gps/nmea_out"
+
+       acSuplServer="supl.google.com"
+       SuplPort="7275"
+       SuplLogEnable="true"
+       SuplLogFullName="/data/vendor/gps/suplflow.txt"
+       tlsEnable="true"
+
+       SuplSslMethod="SSLv23_NO_TLSv1_2"
+       SuplEnable="true"
+       SuplUseApn="true"
+       SuplTlsCertDirPath="/etc/security/cacerts"
+       SuplTlsCertPath="/vendor/etc/gnss/gps.cer"
+       SuplUT1Seconds="20"
+       SuplUT2Seconds="20"
+       SuplUT3Seconds="20"
+       TcpConnectionTimeout="20"
+       SuplLppCapable="true"
+       SuplEcidCapable="true"
+       SuplVersion="2"
+       SuplMinorVersion="0"
+       SuplOtdoaCapable="true"
+       SuplGlonassCapable = "true"
+       SuplGalileoCapable = "true"
+       SuplBdsCapable = "true"
+       SuplMgpsCapable = "true"
+
+       RtoEnable="true"
+       RtiEnable="true"
+       HttpSyncLto="true"
+       LtoFileName="lto2.dat"
+       LtoDir="/data/vendor/gps/"
+       LtoSyncThresholdDays="1"
+
+       GnssYearOfHardware="2020"
+       CpGuardTimeSec="1"
+       CpLppGuardTimeSec="1"
+       IgnoreInjectedSystemTime="true"
+
+       AttributionAppPkgName="com.google.android.carrierlocation"
+
+       AssertEnabled="false"
+  />
+
+  <gll
+       LogPriMask="LOG_INFO"
+       LogFacMask="LOG_NMEA | LOG_GLLIOS | LOG_GLLAPI"
+       FrqPlan="FRQ_PLAN_26MHZ_2PPM_49_152MHZ_300PPB"
+       MultiCarrRFMode="GL_MULTI_CARR_RF_MODE_L1_L5"
+       MultiCarrLnaMask="L1_EXT_ON|L5_EXT_ON"
+       RfType="GL_RF_4776_BRCM"
+       ExtL5Bias="9.3"
+       EnableFilteringForLTEB13="true"
+
+       WarmStandbyTimeout1Seconds="10"
+       WarmStandbyTimeout2Seconds="15"
+
+       EnableGnssPropagateInStandby="true"
+
+       RfPathLossDb_Ap="4.2"
+       RfPathLossDb_Cp="4.2"
+       RfPathLossDb_Ap_L5="4.1"
+       RfPathLossDb_Cp_L5="4.1"
+       OnChipGpsCarrierType="3,2,3,3,2,3,2,3,3,3,1,2,1,3,2,1,2,3,1,1,1,1,3,3,3,3,3,1,2,3,2,3"
+
+  />
+
+  <gll_features
+       EnableLowPowerPmm="true"
+       EnableNicAutoSwitch="true"
+       EnableNavic="true"
+  />
+
+</glgps>
+
diff --git a/gnss/47765/config/gps.xml.raven b/gnss/47765/config/gps.xml.raven
new file mode 100644
index 0000000..4f1a214
--- /dev/null
+++ b/gnss/47765/config/gps.xml.raven
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<glgps xmlns="http://www.glpals.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.glpals.com/ glconfig.xsd" >
+  <hal
+       PortName="/dev/ttyBCM"
+       BaudRate="921600"
+       GpioNStdbyPath="/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby"
+       CustGpioDelayMs="250"
+       LogEnabled="false"
+       Log="JAVA"
+       SecondaryConfigPath="/vendor/etc/gnss/gps2.xml"
+       LogDirectory="/sdcard/gps/broadcom/storage/"
+       CtrlPipe="/data/vendor/gps/glgpsctrl"
+       NmeaOutName="/data/vendor/gps/nmea_out"
+
+       acSuplServer="supl.google.com"
+       SuplPort="7275"
+       SuplLogEnable="true"
+       SuplLogFullName="/data/vendor/gps/suplflow.txt"
+       tlsEnable="true"
+
+       SuplSslMethod="SSLv23_NO_TLSv1_2"
+       SuplEnable="true"
+       SuplUseApn="true"
+       SuplTlsCertDirPath="/etc/security/cacerts"
+       SuplTlsCertPath="/vendor/etc/gnss/gps.cer"
+       SuplUT1Seconds="20"
+       SuplUT2Seconds="20"
+       SuplUT3Seconds="20"
+       TcpConnectionTimeout="20"
+       SuplLppCapable="true"
+       SuplEcidCapable="true"
+       SuplVersion="2"
+       SuplMinorVersion="0"
+       SuplOtdoaCapable="true"
+       SuplGlonassCapable = "true"
+       SuplGalileoCapable = "true"
+       SuplBdsCapable = "true"
+       SuplMgpsCapable = "true"
+
+       RtoEnable="true"
+       RtiEnable="true"
+       HttpSyncLto="true"
+       LtoFileName="lto2.dat"
+       LtoDir="/data/vendor/gps/"
+       LtoSyncThresholdDays="1"
+
+       GnssYearOfHardware="2020"
+       CpGuardTimeSec="1"
+       CpLppGuardTimeSec="1"
+       IgnoreInjectedSystemTime="true"
+
+       AttributionAppPkgName="com.google.android.carrierlocation"
+
+       AssertEnabled="false"
+  />
+
+  <gll
+       LogPriMask="LOG_INFO"
+       LogFacMask="LOG_NMEA | LOG_GLLIOS | LOG_GLLAPI"
+       FrqPlan="FRQ_PLAN_26MHZ_2PPM_49_152MHZ_300PPB"
+       MultiCarrRFMode="GL_MULTI_CARR_RF_MODE_L1_L5"
+       MultiCarrLnaMask="L1_EXT_ON|L5_EXT_ON"
+       RfType="GL_RF_4776_BRCM"
+       ExtL5Bias="10.6"
+       EnableFilteringForLTEB13="true"
+
+       WarmStandbyTimeout1Seconds="10"
+       WarmStandbyTimeout2Seconds="15"
+
+       EnableGnssPropagateInStandby="true"
+
+       RfPathLossDb_Ap="4.1"
+       RfPathLossDb_Cp="4.1"
+       RfPathLossDb_Ap_L5="4"
+       RfPathLossDb_Cp_L5="4"
+       OnChipGpsCarrierType="3,2,3,3,2,3,2,3,3,3,1,2,1,3,2,1,2,3,1,1,1,1,3,3,3,3,3,1,2,3,2,3"
+
+  />
+
+  <gll_features
+       EnableLowPowerPmm="true"
+       EnableNicAutoSwitch="true"
+       EnableNavic="true"
+  />
+
+</glgps>
+
diff --git a/gnss/47765/config/gps2.xml b/gnss/47765/config/gps2.xml
new file mode 100644
index 0000000..93fb3ed
--- /dev/null
+++ b/gnss/47765/config/gps2.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<glgps xmlns="http://www.glpals.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.glpals.com/ glconfig.xsd" >
+  <hal
+       LogEnabled="true"
+       Log="JAVA"
+       AssertEnabled="true"
+  />
+  <gll
+       EnableOnChipStopNotification="false"
+  />
+</glgps>
+
diff --git a/gnss/47765/config/lhd.conf b/gnss/47765/config/lhd.conf
new file mode 100644
index 0000000..8b7f1c7
--- /dev/null
+++ b/gnss/47765/config/lhd.conf
@@ -0,0 +1,32 @@
+LheName=bbd
+
+LheRsmResetTimeoutMS=10000
+GpioNStdbyPath=/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby
+
+LhePatch=/vendor/firmware/SensorHub.patch
+Lhe477xDebugFlags=RPC:FACILITY=65535-dKP+CUST+LHE:STDOUT_PUTS:STDOUT_LOG
+# LheConsole=/data/vendor/gps/LheConsole
+
+LogEnabled=false
+Log=JAVA
+LogDirectory=/sdcard/gps/broadcom/storage
+
+LheBbdPacket=/dev/ttyBCM
+
+LheBbdControl=/dev/bbd_control
+
+# LheBbdSensor=/dev/bbd_sensor
+
+# LheFailSafe=/data/vendor/gps/esw-crash-dump.txt
+
+NvStorageDir=/data/vendor/gps/
+
+# Enable BBD debugging at these stages:
+# LheDriverDebugFlags=PATCH_BBD:LHE_BBD:FSC_BBD
+
+LheAutoBaudDelayMS=10
+TrafficLogEnabled=false
+SecondaryConfigPath=/vendor/etc/gnss/lhd2.conf
+
+SkipSensorWakeLock=true
+LoggerWakeLockEnable=false
diff --git a/gnss/47765/config/lhd2.conf b/gnss/47765/config/lhd2.conf
new file mode 100644
index 0000000..b9e638c
--- /dev/null
+++ b/gnss/47765/config/lhd2.conf
@@ -0,0 +1,5 @@
+LheConsole=/data/vendor/gps/LheConsole
+LogEnabled=true
+Log=JAVA
+LheFailSafe=/data/vendor/gps/logs/esw-crash-dump.txt
+LogLevel=*:I
diff --git a/gnss/47765/config/scd.conf b/gnss/47765/config/scd.conf
new file mode 100644
index 0000000..b7c9b75
--- /dev/null
+++ b/gnss/47765/config/scd.conf
@@ -0,0 +1,6 @@
+LogEnabled=false
+Log=JAVA
+LogDirectory=/sdcard/gps/broadcom/storage
+NvStorageDir=/data/vendor/gps/
+TcpConnectionTimeout=20
+SecondaryConfigPath=/vendor/etc/gnss/scd2.conf
diff --git a/gnss/47765/config/scd2.conf b/gnss/47765/config/scd2.conf
new file mode 100644
index 0000000..65e6ffb
--- /dev/null
+++ b/gnss/47765/config/scd2.conf
@@ -0,0 +1,2 @@
+LogEnabled=true
+Log=JAVA
diff --git a/gnss/47765/firmware/SensorHub.patch b/gnss/47765/firmware/SensorHub.patch
new file mode 100644
index 0000000..71b41f9
--- /dev/null
+++ b/gnss/47765/firmware/SensorHub.patch
@@ -0,0 +1,6971 @@
+<FormatVersion=0x00010003>
+
+<Crc=55>
+<BlobLength=160033>
+<AsicVersion=0x004776A0>
+<ChangeList=514871>
+<PatchLevel=0>
+<PostPatchLevel=1>
+<CustomerVersion=None>
+<Name=./bin/SensorHub_A0>
+<Type=Application>
+<PatchAddress=0x00800141>
+<Blob=F1940300008000000D890041018000B9010100BF010100
+C5010100CB010100D10101000000000000000000000000
+0000000000B1030200B903020000000000050780001DBB
+0100C9030200190402003D8F0100498F01005D8F010069
+8F0100758F0100818F01008D8F0100998F0100A58F0100
+B18F0100D9030200E1030200CDB68100EDC00100FDC001
+0019C1010079E90100B161010011620100ADE10100591D
+010045FF0000E9030200D9D80100E9D801001D84010071
+B3010075B30100FDDB01005946010069460100E1950100
+F1030200F9C5010019C60100B9B9810000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+000000000072B60D494FF0E020C0F8081D0B4880F30888
+4FF0000080F31488BFF36F8FC046C0462FF4B9F32AF4D9
+F34FF002001BF431F400F005F8000000008000000D8900
+2AF4C9F3002801D000F008F80020C046C04600F097F82A
+F4D5F3000010B5074979441831064C7C44163404E00A68
+081D511888470146A142F8D110BDD44602000047020000
+B587B04FF4B07000904FF4C07102914B48019000F5B071
+039100F5387070210590049168461EF4B7F707B000BD00
+0010B5444C0FF49EF5C4E90201207808B114F44EF7A078
+48B1022019F461F4282011F4AEF3292011F4ABF307E019
+F458F4282011F495F3292011F492F3607810B1052019F4
+2DF5BDE8104012F465B30000314830B1FF30020A120230
+4900201AF43BB1704738B512F453F200240546A80F0328
+08D1002C18BF032C04D10121204600F05EF806E0A4F128
+00022824BF204600F078F8641C322CE9D331BD00B583B0
+18F480F01BF4C2F3FFF7DCFF1C4882B00CC869460CC10C
+C80CC10CBC19491A4826F490F5022000F0F3F8BDE80740
+BFE780B514F447F514F447F5FFF779FFFFF7DDFF1BF41F
+F300F063F9FFF789FF10F45DF70E49884204D0E6210FF2
+380000F0D5F90B490120087000F055FA002002BD38C591
+0070D79100E75102000000800068928900188E89006885
+8900A0764700A1D19100696E69745F6D61696E2E630038
+B50446322C0D4605D3224627210FF2A81000F0B6F96648
+50F8241040F20112114315B921F0020109E041F0020101
+2D0CBF0122002221F0040141EA820140F8241031BD0828
+16BF0B2802210021D7E7584AD2E900017047F8B50446F1
+940390038000322C0D4604D357210FF2501000F080F900
+F074F82A78DFF840C112B1012A07D02CE0DCE9002347F0
+01071043194303E0DCE9002300F05AF8CCE90001687848
+B1022803D01AD247F0060705E0012060F3420701E027F0
+0207A87807280ED8000127F0780100F070000843E97840
+EAC100297920F4C07040EAC11747E00020F2BDF8B50446
+322C0D4604D3A0210FF2CC0000F03EF900F032F8DFF8BC
+C095F800E0DCE90023BEF1000F03D0BEF1010F05D019E0
+47F001071043194301E000F016F8CCE90001687858B102
+2805D00BD247F0060727F4807719E0012060F34207F8E7
+27F00207F5E70020F2BD00007F087F0022EA000023EA01
+0170470000154E56F824700120002122462AF468B246F8
+24700120F2BD2DE9F0438146002400250027DFF8308058
+F82760F00706D5012000213A462AF453F204430D4369F3
+061648F827607F1C322FEDD30348C0E900450120BDE8F0
+8300015040C8CE890070617463685F6770696F2E630000
+000000B585B000F0BAF94FF42041384826F437F3012107
+2011F4BDF00121082011F4B9F001210B2011F4B5F00121
+252011F4B1F0062019F44CF3012019F421F30120049001
+232A200390012201200290012100200190012000904FF4
+A04000F016FA05B05DF804EB00201BF446B210B54FF47A
+7000F449F00FF2A0040FF280017E2322468F2013F476F0
+1A48006801F0FAFC802322460FF2E8018F2013F46BF0BD
+E81040002001F4CFB330B583B0114CFFF7A7FF04F50055
+C8352146284601F040FB2946204602F020FB022002904F
+F40050019004F1C80000905B22074B03A104F1900001F4
+3BF703B030BD00004170700088E7890040938900690580
+0025643A25640953746172742063687070417070546173
+6B0A00000000633A5C77735C626F645F34373736303833
+38325F3531343837315C637573746F6D6572735C676F6F
+676C655C503231466C61677461696C6D63755C64656C69
+766572795C53656E736F724875625F5032315C7372635C
+6875625F636F6E74726F6C6C65722E63000025643A2564
+09456E6420636870704170705461736B0A000000000000
+000000000000000072B600B50FF4E4F45DF804EB4FF000
+0011490FF4EBB472B600B50FF4D9F45DF804EB4FF00100
+0D490FF4E0B472B600B50FF4CEF45DF804EB4FF0020008
+490FF4D5B472B600B50FF4C3F45DF804EB4FF0FF300FF4
+CBB40000A1068000B7068000CD0680004848816861B971
+4611F0100F1CBF08B016E045490A6822F001020A60F194
+03200780001AB00FE0EFF309821EF0100F03D1A2F14002
+82EC108AA2F12802036882E8F84F83685A60FFF7A7DD81
+68B9B14A6892E8F84F036002F128021EF0100F01D1B2EC
+108A82F3098890693149324A884201DB904202DB13F47F
+4F51D070472E482F490968401A80F308884FF08071C161
+2C4981617FF0060E7047FFF74EDF01BC2046DFF8A0E000
+BDFFF7DCDE2748006823490968401A20F0070080F30888
+4FF000011948417081F3118862B600F020F8FEE703680C
+B44FF0000141704FF0000181F311881A491A4A0A60BFF3
+4F8FBFF36F8F4FF0800181F311880CBC03607047134913
+4A0A60BFF34F8FBFF36F8F70470F490F4A0A60BFF34F8F
+BFF36F8F70474FF0000181F31188704760D0910034EF00
+E0D1078000FD078000E00C8900C8E50F00FDBB0100A707
+80000000800004ED00E000000010C0F3C041002914BF4F
+F048614FF0C861C0F34532C004C00C02EB8010B1FBF0F0
+7047000030B585B00121002002F03AFD0121012002F036
+FD0121022002F032FD0121032002F02EFD0121042002F0
+2AFD14F46CF3840F05D0022C09D004D3032C10D016E001
+2004E002208DF80C0015E003208DF80C0000208DF81000
+6920ADF812000BE004218DF80C10FFF7B9FF049004E075
+210FF27400FFF7D8FE4FF0FF300290012001904FF40050
+164D009005F5105338334FF4C05205F6384103A822F493
+F421F499F3022002904FF44060019005F1380000905A22
+0B4B0FF24801284601F490F5032C0AD16946032011F478
+F000208DF8010069460320FFF75FFD05B030BD00005077
+9100A5050300696E69745F686F73745F696E7465726661
+63652E630000005472616E73706F72744C617965720000
+7FB5204C204E606000250120207425606174A274E37408
+981C4D2075099860750A98A0750B98A0612046FBF433F5
+2860E66004F5D2401C30A0600C9802F018FD2B68134883
+4205D3324698210FF27000FFF778FE4FF4006002900394
+4FF4807001904FF4C05304F5C0401C30009004F11C0204
+F5C0504FF490411C3002F034FD7FBD0000C4888A007085
+0600A0F891007185060000B585B00020049001232A2003
+90012201200290012100200190012000904FF4F040FFF7
+A3FF05B000BD00007076745F636F6E74726F6C6C65722E
+6370700000012100F435B100F452B1012101F4D8B401F4
+5EB501F4C0B502F05CBD02F065BD02F06BBD02F082BD02
+F0C2BD10B517F469F502460B464FF47A74A4FB020104FB
+031110BD30B5044683B0E06802900D4601956C23F19403
+B00A8000207ADFF8942B0FF2140100908F2012F4D7F500
+20E060257203B030BD25643A2564094368616E67696E67
+205258207472616E73706F72742073746174652066726F
+6D202568687520746F202568687520616674657220257A
+752062797465730A0000000038B50446002502E0E0606D
+1C491C95423CBFE068022811D2030008D10B78682B0AD0
+087868280CBF01200020ECE7012804BF0B78432BF4D140
+1CE5E7E068022807D1FFF797FFC4E9060101212046FFF7
+9DFF284632BD7CB504460E46E0680828154606D3002300
+22B121DFF8C80AFFF7A3FDE068C0F108018D4288BF0D46
+00192A463146303028F43BF5E06828180828E06033D120
+4600F07FFB30B100F00F01204600F077FC002125E0A08E
+08B9032121E0E26B12B902F031FD03E08118206C02F075
+FD80B9D720DFF8682ADFF8641D01900092D7238B2012F4
+40F50221204600F058FC002106E02064A18EE06B10FA81
+F0E06302212046FFF748FF284676BD70B504460E46E068
+A18E8842154606D300230022F221DFF81C0AFFF74DFDA0
+8EE168401A854288BF0546206C236A2A463146181828F4
+E4F4206AA18E28182062E06828188842E06003D1032120
+46FFF71DFF284670BDF0B5044685B0E06804280E461546
+07D3002300224FF48871DFF8C409FFF721FDE068C0F104
+018D4288BF0D4600192A463146383028F4B9F4E0682818
+0428E06040F0858004F13006707800F0F000302818BF40
+2877D0204600F0AEFADFF8807998B9B0880FF2F0010190
+4FF49473F07800903A468B2012F4C6F4204600F005F901
+21204600F0DBFB5DE07078F27800F0F001102919D100F0
+0F00019000924FF498733A460FF2D8018E2012F4ACF404
+F20C563046FFF7A2FE00222021204600F0B1FE3046FFF7
+98FE3DE094F82935022B08D1B0880FF2D4010092019040
+F239133A4617E020290CD100924FF49F733A460FF2EC01
+8E2012F486F4204600F024F921E0B1886BB90191009240
+F243133A460FF2F4018B2012F476F4204600F0B5F811E0
+049040F24B1330780390B0780290019200913A460FF2FC
+018F2012F463F4204600F01CF900212046FFF774FE2846
+05B0F0BD000025643A25640942616420636865636B7375
+6D2E207365713D25686875206C656E3D2568750A000000
+25643A2564095258205245534554207061636B65742073
+65713D25686875206572723D256868750A000000002564
+3A25640952582064697363617264656420696E20706572
+6D206661696C2E207365713D25686875206C65F1940340
+0E80006E3D2568750A000025643A256409525820524553
+45542D41434B207061636B65742E207365713D25686875
+0A0000000025643A256409525820646973636172646564
+20696E2072657365742E207365713D25686875206C656E
+3D2568750A000025643A256409525820676F6F64207061
+636B65742E206C656E3D2568752C207365713D25686875
+2C2061636B5365713D256868752C20666C6167733D3078
+256868782C20636F64653D3078256868780A000000007C
+B504460025207A002638B1022803D004D3032827D029E0
+A58EE668002D40D0E06BA84207D2002300224FF4BD71DF
+F82407FFF7D1FB206AB04207D20023002240F27B11DFF8
+0C07FFF7C6FBE06B401BE063206AE16B801B2062206C79
+B902F093FB00201CE0A58E2E46D7E70023002240F27311
+DFF8DC06FFF7AEFB11E06A1802F0A5FB60B94FF4C570DF
+F8C826DFF8C4190190009203468B2012F46FF300E02064
+2046BDE87C4000217FE5012180F829150021A0F82A1500
+F5A7605EE510B50446FFF7F3FF04F1310104F110000A78
+42708978491C0170204600F0A7F9216C204601F0A2F820
+4600F01CF92046BDE81040A7E0F0B583B00446FFF74BFD
+DFF85026002304F1100528F4F4F3E86104F13106002730
+786870204600F087F9A08E00281FBFB078297888420527
+02D194F86800C8B13946204600F03CFA052F13D1A08EDF
+F810260FF23401029040F2332328780190B07800908B20
+12F40FF3204603B0BDE8F0404BE7A08E20B1204603B0BD
+E8F04022E003B0F0BD000025643A2564094F7574206F66
+206F72646572205258206469736361726465642E207365
+713D256868756578706563743D25686875206C656E3D25
+68750A000000F0B5044685B0207C401C04F13005207429
+78DFF88465C90710D5C0B2039040F24D23E8680FF26401
+02903246A8880190E87800908F2012F4C3F221E004F20C
+573846FFF7B8FCEA682969206801F0BAFD3846FFF7AEFC
+287E0FF29001049040F25F23207C03903246A8880290E8
+780190E86800908F2012F4A3F2204600F074F8204605B0
+BDE8F0400021B5E125643A2564095258207061636B6574
+20666F7220756E66696E69736865642064617461677261
+6D2E205365713D25686875206C656E3D2568752E204461
+74616772616D206C656E3D257A752E2053656E64696E67
+2041434B3D256868750A000025643A256409417070206C
+617965722070726F63657373656420646174616772616D
+2077697468206C656E3D257A752C20656E64F19403D011
+8000696E67207061636B6574207365713D256868752C20
+6C656E3D2568752E2053656E64696E672041434B3D2568
+6875202870726576696F75736C792073656E743D256868
+75290A000000210162C1630164704730B5044683B00822
+04F13001002002F06EFAA28E236A216C9B1A591802F067
+FA0546A06BA8420DD0A18EDFF8F8230090083102910195
+4FF424730FF214018B2012F405F2A06BA8420CBF012000
+2003B030BD25643A25640952782042414420636865636B
+73756D3A20666F6F7465723D307825782C2063616C633D
+307825782C206C656E3D257A750A0010B584B0818E0024
+40F2F34291420FDB04240291039440F2AA23017CDF4A01
+9190F833000FF2100100908B2012F4CAF1204604B010BD
+000025643A256409426164206865616465722E20736571
+3D25686875206578706563743D25686875206C656E3D25
+6875206572723D256868750A000000002DE9F041044604
+F1320586B0A07C2E780146B1424AD0401CC0B2B042DFF8
+08830AD00196009140F2BE2342460FF284018B2012F48D
+F139E004F14C074FF43273787F04EBC002126F05923A69
+039004924246387F0290019600918F200FF2800112F476
+F1A674386802280BD3401E019040F2CD2368780FF2E801
+009042468C2012F466F100203860797F386900F5806004
+EBC1013861096F884207D300203861F860204600F042F9
+00B9287606B0BDE8F081000025643A2564094F7574206F
+66206F726465722041434B3A206C6173743D2568687520
+72783D256868750A000025643A25640941434B20726563
+656976656420286C61737420726567697374657265643D
+256868752C2072656365697665643D25686875292E2050
+72696F722071756575652064657074683D256868752C20
+66726F6E7420646174616772616D3D2568687520617420
+6C6F633D257A75206F66206C656E3D257A750A00000000
+25643A256409536571202568687541434B207263762764
+20616674657220257A75726574780A000010B5044604F1
+4A0082B001220270417000914FF44073624A0FF214018F
+2012F4D3F004F21450BDE81C400221FFF7D6BA25643A25
+640963687070456E717565756554785061636B65742063
+616C6C65642077697468207061636B657420636F64653D
+3078256868780A000000682101704321417002207047D0
+F8F02011180832C0F8F020F43100F14802D3784B70D378
+03F0F003D370007C8870107008467047F0B583B0044604
+F1580604F1F605707C7168DFF8702704EBF19403601580
+00C00040F23B33006F471A307C0FF2440102900197E878
+00908F2012F479F0B7F5806F86BF01204FF48067002028
+70AF80707C7168AA8804EBC000406F091804F1F00000F0
+9AF97068A98810FA81F0306003B0F0BD25643A25640941
+6464696E67207061796C6F616420746F207365713D2568
+68752C2072656D61696E696E6742797465733D257A7520
+6F662070656E64696E6720646174616772616D733D2568
+68750A0010B5044684B02068821EA11D002002F07DF803
+904FF4587320680FF6B8320190011D0398029100908F20
+DFF8981A12F41DF0042203A9204600F04DF904B010BD40
+420F00D821800030B5054605F1680485B020780FF67C32
+38B940F26E330FF260018B2012F402F027E06178029043
+1E05EBC100039340F27733006F019000918F200FF27401
+11F4F1F7607805EBC000406F01F0F1FF607805EBC00000
+214167607805EBC00001672078401E20706078401C6070
+00F00F006070207805B030BD25643A25640943616E206E
+6F74206465717565756520646174616772616D20626563
+6175736520717565756520697320656D7074790A000025
+643A256409446571756575696E672066726F6E74206461
+74616772616D207769746820696E6465783D256868752C
+206C656E3D257A752E2051756575652064657074683A20
+256868752D3E25640A0038B5044604F14A0502E02046FF
+F778FFA87F0028F9D1287031BD2DE9F043044604F20C58
+04F1490987B04046FFF773F904F14C0699F80110002500
+27307D00294AD0002848D101253575C4F8F07040F20E41
+04F1F407384627F414F73846FFF7B3FED4F8F0104018C4
+F8F0002046FFF7B1FE0746307F40B3A07CF87089F80000
+306805281AD394F82905B8B1042000904FF471730FF6F4
+120FF66C218B2011F441F74046FFF739F9072210212046
+00F048F94046FFF72FF9002508E02046FFF79DFE306840
+1C306001E089F8010004F1F000FFF7F1FE13E0227A0592
+40F2DE3399F800200492A27C0392327F0292019000918C
+200FF694120FF6302111F412F74046FFF70AF92DB3307F
+0FF680120FF69021069040F2E933B888059004F5A865F8
+780490B87803907878029038780190D4F8F00000908F20
+11F4F4F6D4F8F02004F1F401284602F011F801001CBF28
+4600F01EFC204600F039F9050016D0A8780FF628120FF6
+9C21029040F2FA33A8880190287800908B2011F4D4F620
+68294607B0BDE8F043062201F0CEB94FE370B504460E46
+20681546281840F20F41884207D30023F19403F0188000
+002240F20A410FF6E000FEF7E7FE206800192A46314600
+1D27F484F620682818206070BD00F0F000102806D02028
+07D0302808D0402809D00BE00FF6542070470FF6542070
+470FF65C2070470FF66020704702A07047000040228000
+000000002DE9F04788B08046894617461D4600248DB90F
+F674050FF6442140F237432A468B2011F47DF600230022
+4FF487612846FEF7A4FE62E0062D08F1680603D3F02019
+EA000F11D04846FFF7BCFF31780FF63802491CC9B20391
+02950190CDF800904FF488630FF6142114E030780FF618
+020FF64021401CC0B2069040F24743B8880590F8780490
+B8780390787802903878019000958E2011F443F608F20C
+5A5046FFF737F830780146102909DB40F24D430FF2D472
+0FF654218B2011F431F61AE0727851FA82F150FA82F0CA
+1001EB12710911A0EB011080B208EBC000056747673078
+401C3070C0B2012803D149464046FFF732FD01245046FF
+F70DF8204608B0BDE8F08710B50446282104F1080027F4
+B7F504F13C000021002206C0202104F1480027F4ADF588
+2104F1680027F4A8F5FF2084F84900002084F8290510BD
+2DE9F047044604F20C5A884691465046FEF7E0FF256800
+2084F8290594F8600018B104F5A86001F03CFF04F13C06
+306830B100203060706801F0D9FD0020706004F1740610
+2756F8040C20B1306801F0CEFD0020306008367F1EF4D1
+2046FFF7B2FF04F13100017861748078401C20745046FE
+F7B1FF4A464146204600F00BFB2846BDE8F04701F002B9
+2DE9F04F044604F20C5983B04846FEF79CFFFEF7ADFFD4
+F800C00025DCE918239942A84679D301D8904276D34FF0
+FF300146AE4625E0D26A07EB470302EBC30B9BF8102001
+2A10D1DBE90223002B08BF002A0AD08B4208D828BF8242
+05D210461946F2463E464FF001087F1C0CEB8E02BFB292
+6B138E9F42DDD30EF101025FFA82FE9CF834209645B8BF
+0027EEDBB8F1000F0FF22C670FD1DCE91801CDE9000140
+F2DF433A460FF6C0018B2011F454F5206801F02DFF30E0
+B6B25FFA8AFA0196CDF800A040F2E6433A460FF6C4018B
+2011F442F5062001F01FFD05000AD140F2E94301930097
+3A460FF23C618B2011F433F512E00AF11000287006EB46
+0101206870206800EB8A00806BC06A00EBC100407CA870
+0620E870AE804846FEF717FF2846E7E0F8B504000D460F
+F2945606D10023002240F201513046FEF73BFD35B90023
+002240F202513046FEF733FD94F8280570B140F204573B
+4632460FF658018B2011F4F9F40023F19403801C800000
+2239463046FEF721FD40F2065332460FF668018F2011F4
+EBF42046FFF7DAFE04F20C50FEF7DAFE04F21450FEF7E2
+FE04F5A760FEF7DAFE2560012084F8280504F5A860BDE8
+F24001F0A1BDD82180002DE9F04F0D0083B0044616460F
+F2F84806D10023002240F231514046FEF7EEFC34B90023
+002240F232514046FEF7E6FC04F20C50FEF7ADFE207AC8
+B1FEF7BCFED4E90679DFF8B8230023BA1849EB03038B42
+0DD828BF82420AD24FF4A76342460FF2EC718B2011F49B
+F42046FFF7DAF804F20C50FEF78FFE207A0FF2F0710FF6
+0C0A0190009640F23E5342468F2011F487F4FEF791FEDF
+F86423002327F43CF5A0620027606A3018606240F25F59
+40F25E5B14E000905B46424651468B2011F46FF4002300
+2249464046FEF797FC00212046FEF77DFE04F20C50FEF7
+5CFEB74224D204F20C50FEF754FE207A28B1022810D009
+D3032813D0DCE7F21B79192046FEF7A0FEC719E6E7F21B
+79192046FEF7C4FEF7E7F21B79192046FEF713FFF1E7F2
+1B79192046FEF738FFEBE7207A20B9E068401E8041C00F
+00E0002003B0BDE8F08FF0B583B00C4690F8291500264F
+1EBF411546FF0F8DB90FF2AC340FF24C7140F27D532246
+8B2011F41AF40023002240F27E512046FEF741FC18E02F
+B92B4622460021FFF77CFD80B920780FF278320FF23871
+02900195009740F284538B2011F4FEF3204601F001FC00
+E00126304603B0F0BD70B50D46022D82B0044602D00F2D
+07D010E040F293530FF23C320FF2347105E040F297530F
+F22C320FF25C718F2011F4DDF311E00FF21C360FF28871
+009540F29C5332468B2011F4D1F30023002240F29D5130
+46FEF7F8FB05F00F012046BDE87C40FFF7DFBA2DE9F043
+87B00746FEF7C9FD044638680D46D0E9186897F84A0010
+B997F8290598B9D7E91401002902BF0028204629466E4A
+0023871841EB0309C84505D301D8BE4202D3861841EB03
+08371B68EB0509CDE90479CDE90245CDE9006840F2B353
+0FF28C220FF220718F2011F48CF34FF0FF300146884508
+BF864209D0454505D301D8B44202D30020002101E03846
+494607B0BDE8F08338B504460022102100F0CCF840F2C1
+530FF244220FF20C718F2011F469F304F214552046FFF7
+A1FF002908BF002803D12846FEF761FD0EE04FF0FF3291
+4208BF904203D12846FEF759FD04E002460B462846FEF7
+55FD0146204600F003F80028DFD131BDF8B504460D46E8
+070AD540F2D4530FF2E4120FF2CC618F2011F438F30020
+F2BDA80744BF2046FFF7ACFB002DF19403102080004ED1
+FEF739FDD4E91423801A9941002399422C4A01D890420B
+D340F2E1530FF2A8120FF2B4618B2011F41AF32046FFF7
+92FB94F8290598BBFEF71EFD04F5A662D2E90067801BB9
+41002399421E4A01D8904225D3B4F82A050FF26C12401C
+032811DA40F2E9530FF284618B2011F4F8F2B4F82A0540
+1CA4F82A05062210212046FFF7FDFC0CE040F2EE530FF2
+84618B2011F4E6F2022084F829052046FFF74EFB280C00
+0405D0290C090404F5A86001F016FC0120F2BD00005CAA
+810040420F0000B4C40400E1F505002F685938B5012904
+4609D0009140F204630FF2EC020FF254618B2011F4BCF2
+A4F5A86404F20C552846FEF7AEFC5034FEF7BEFCC4E900
+01002020742846BDE83240FEF7A4BC084601F0ACBA2DE9
+F041044604F168000D460178002904BF40780028164610
+D00FF298080FF2206140F271673B4642468B2011F48EF2
+0023002239464046FEF7B6FA0A2001F065FA0746012038
+700020787078804FF4A060B8800120F880202D4FF47A70
+38810FF250000BD1024640F286630FF2F0518F2011F46B
+F22046FEF700FF07E002464FF4D1630FF2F4518F2011F4
+5FF2FEF769FC04F5A6620A23C2E9000105F0F00006F00F
+0101433A462046BDE8F041FFF7BDBB0000633A5C77735C
+626F645F3437373630383338325F3531343837315C6375
+73746F6D6572735C676F6F676C655C503231466C616774
+61696C6D63755C64656C69766572795C53656E736F7248
+75625F5032315C7372635C636870705C7472616E73706F
+72742E63000025643A2564094F4F4D2061742025733A25
+640A0025643A256409526573657474696E672061667465
+7220256420726574726965730A00000025643A25640944
+6F576F726B206E6F7468696E6720746F2073656E642E20
+6861735061636B6574733D25642C206C696E6B42757379
+3D25642C2070656E64696E673D256868752C2052782041
+434B3D256868752C205478207365713D256868752C2052
+582073746174653D256868750A0000000025643A256409
+54582D3E4C696E6B3A206C656E3D257A7520666C616773
+3D30782568687820636F64653D3078256868782061636B
+5365713D25686875207365713D25686875207061796C6F
+61644C656E3D2568752070656E64696E673D256868750A
+000025643A256409526573706F6E73652074696D656F75
+742048232568687520636D643D2568752049443D256868
+750A000028524553455429002852455345542D41434B29
+00284C4F4F502D524551290000F19403A0238000284C4F
+4F502D52455329000025643A256409456E717565756520
+74782077697468206C656E20300A0000000025643A2564
+09456E71756575652054583A20636F64653D3078256868
+782573206C656E3D257A752070656E64696E673D256868
+750A00000025643A256409456E71756575652054583A20
+6C656E3D257A752048232568687520747970653D307825
+6868782049443D25686875206572723D2568687520636D
+643D30782568782070656E64696E673D256868750A0000
+0025643A25640943616E6E6F7420656E71756575652054
+5820646174616772616D0A00000025643A25640954696D
+656F757420617420256C6C7520627574206E6F20636C69
+656E740A0000000025643A256409436C69656E743D2568
+687520636D643D2568752074696D6564206F75740A0000
+000025643A25640943485050207472616E73706F727420
+616C726561647920696E697469616C697A65640A000000
+25643A256409496E697469616C697A696E672043485050
+207472616E73706F72740A000025643A2564095061636B
+65742052582074696D656F75740A0000000025643A2564
+09525820257A752062797465733A2073746174653D2568
+68750A0025643A256409496E76616C6964205258207374
+61746520256868750A0000000025643A256409456E7175
+65756520646174616772616D206C656E20300A00000025
+643A256409526573657474696E673D25642E2044697363
+617264696E6720257A7520627974657320666F72204823
+256868750A0000000025643A256409417070206C617965
+7220656E7175657565696E6720434850505F5452414E53
+504F52545F4552524F525F4F4F4D0A0000000025643A25
+6409417070206C6179657220656E7175657565696E6720
+434850505F5452414E53504F52545F4552524F525F4150
+504C415945520A00000025643A25640941707020656E71
+75657565696E6720696E76616C6964206572723D256868
+750A000025643A2564094E657874446F576F726B3D256C
+6C752063757272656E7454696D653D256C6C752064656C
+74613D256C6C640A000025643A2564094348505020576F
+726B2054687265616420737461727465640A0025643A25
+64094348505020576F726B20546872656164207465726D
+696E617465640A000025643A25640941434B2074696D65
+6F75740A000025643A25640952455345542D41434B2074
+696D656F75743B207265747279696E670A000025643A25
+640952455345542D41434B20F194033027800074696D65
+6F75743B20676976696E672075700A0025643A25640941
+73796E632073656E64206661696C7572653A2025686875
+0A0025643A2564094E6F7420696E697420746F2073656E
+642072657365740A00000025643A25640953656E64696E
+672052455345542D41434B0A0000000025643A25640953
+656E64696E672052455345540A00000000FEF7A79A0121
+FFF72D9EFFF7179F30B50C4683B021780125012904D002
+2906D00F2908D01CE0214601F0A2F906E0214601F04FFA
+02E0214601F0F5FA68B9A0780FF200620FF2CC5102907F
+23A0880190207800908B2010F42FF7284603B030BD0025
+FAE700207047002070470020704770B584B00D78102D14
+464FF0FF3616DA280006D0012D06D0022D18BF0F2D04D0
+05E0012629E0022627E0062625E0009540F20F130FF29C
+520FF2FC511AE0497811F00F0118BF022903D007D30329
+05D009E0294600F068F8066B0EE0294600F078F8466B09
+E0009140F221130FF264520FF2EC518B2010F4E7F6B442
+0ED20296019400954FF495730FF248520FF2F0518B2010
+F4D9F6002004B070BD012004B070BD38B5044612F00F00
+0D4605D002281ED007D3032820D012E0204600F034F880
+6A32BD204600F088F8C07950B94FF4A4730FF200520FF2
+DC518B2010F4B4F6002032BD2946204600F033F8C06932
+BD204600F019F8C06A32BD204600F06DF8C07930B94FF4
+AC730FF2C8420FF2D451E3E72946204600F01CF8006A32
+BD00EB8100C068406A704738B504460D46217AA5F11000
+884207DB002300224FF4C7710FF29040FDF7AEFE04EB85
+0050F8340C32BD38B504460D1994F8341095F858008842
+07D30023002240F29F110FF26440FDF798FE95F8580004
+EB8000806B32BD38B504460D46217AA5F11000884207DB
+002300224FF4D8710FF23840FDF782FE04EB850050F820
+0C32BD38B504460D4694F83410A5F11000884207DB0023
+002240F2C1110FF20C40FDF76CFE281990F8580004EB80
+00C06C32BD12F00F0308BFFFF7CEBF00B5022B83B003D0
+06D3032B04D007E003B05DF804EBC1E703B05DF804EBD2
+E7019100924FF4F0730FF2C4320FF204518B2010F417F6
+002003B000BD70B50D4684B00446687810F00F00164605
+D0022807D00AD303280CD00FE02046FFF7ADFE0AE02046
+FFF7D6FE06E02046FFF7D0FE02E02046FFF7D0FEA0B9A8
+780FF270320FF2D441039002964FF40373687801902878
+00908B2010F4E5F5206804B0BDE87040A6E004B070BD2D
+E9F0430D4687B004466878F19403C02A80002978164600
+F00F0842462046FFF799FF07001ED1A8780FF224370FF2
+C441039002964FF40973687801903A46287800908B2010
+F4BDF520680F21FFF7C3F9384607B0BDE8F04300230022
+40F22721FDF7DDBD297842462046FFF7D7FE030014D1A8
+780FF2D8220FF2B0410390029640F22F23687801902878
+00908B2010F498F5206807B0BDE8F04359E03246294638
+4698475FEA000931D005964FF40F73A8880FF298270FF2
+A84104903A46A87803906878029028780190CDF800908B
+2010F477F5B8F1000F37D10621284601F0E8F950B940F2
+4323019300973A460FF2BC418B2010F465F527E080F803
+900146206807B0BDE8F0430622FFF72BB9B8F1010F1AD1
+07F10C00FFF7F7FD387A0FF22C220FF29C4140F0040038
+724FF415738F2010F446F507F11400FFF7EBFD07F10C00
+07B0BDE8F043E1E507B0BDE8F0830F21FFF740B938B504
+460D46FF220121684626F4E2F4009A2946204600F001F8
+31BD76B504000D460FF2D41606D10023002240F26D2130
+46FDF749FD40F26F2332460FF288418F2010F413F59021
+204626F4BFF49DF8040084F86D0025604FF0FF30C4E918
+00204601F033FB2046BDE8764001F00EB9F0B5160087B0
+04460D460FF27C170FD14FF426733A460FF250418B2010
+F4EEF40023002240F299213846FDF715FD1CE02878062E
+07D20190009640F29E233A460FF23C410EE0A988059140
+F2A523E97804913A46A978039169780291019000960FF2
+50418F2010F4C9F4324629462046FFF7A0FD88B1287828
+B932462946204601F03AFB09E0102832462946204602DA
+FFF7A0FE01E0FFF7D3FE2068294607B0BDE8F040FFF701
+BA2DE9F04383B0044600250FF26C460FF2D00940F2D728
+11E00290009505F11000019043464A4631468F2010F493
+F41FB104EB8500006AB8476D1CEDB2207A854208DA2946
+2046FFF7F0FD00280746E3D00120E1E703B0BDE8F08310
+B590B00C46C17B0FF248420E91817B0D91417B0C91017B
+0B91C17A0A91817A0991417A0891017A0791C179069181
+7905914179049101790391C17802918178019141780091
+25210378204626F4F1F510B010BD000025643A25640948
+232568687520756E6B6E6F776E20726571756573742E20
+636D643D2523782C2049443D256868750A00633A5C7773
+5C626F645F3437373630383338325F3531343837315C63
+7573746F6D6572735C676F6F676C655C503231466C6167
+7461696C6D63755C64656C69766572795C53656E736F72
+4875625F5032315C7372F19403502E8000635C63687070
+5C6170702E630000000025643A256409496E76616C6964
+20707265646566696E65642068616E646C652025686875
+0A00000025643A256409496E76616C6964206D65737361
+676520747970652025640A000025643A25640944617461
+6772616D20746F6F2073686F72743A204823256868752C
+206C656E3D257A75203C20257A750A0000000025643A25
+64095278207365727669636520726573706F6E73652062
+757420636C69656E7420636C6F7365640A000000002564
+3A25640952782073657276696365206E6F746966696361
+74696F6E2062757420636C69656E7420636C6F7365640A
+0000000025643A256409556E6B6E6F776E20747970653D
+3078256868782028482325686875290A0025643A256409
+48232568687520756E646566696E6564206D7367207479
+70653D30782568687820286C656E3D257A752C2049443D
+25686875290A000025643A256409482325686875206D69
+7373696E672063747820286D73673D307825686878206C
+656E3D257A752C2049443D25686875290A0025643A2564
+0948232568687520756E737570706F72746564206D7367
+3D30782568687820286C656E3D257A752C2049443D2568
+6875290A0025643A256409525820646973706174636820
+6572723D30782568782048232568687520747970653D30
+78256868782049443D2568687520636D643D3078256878
+206C656E3D257A750A00000025643A2564094F4F4D2061
+742025733A25640A0025643A25640946696E6973686564
+206469737061746368696E672061207365727669636520
+726573706F6E73652E204E6F74696679696E6720612070
+6F74656E7469616C2073796E6368726F6E6F757320636C
+69656E740A0000000025643A25640941707020496E6974
+0A0025643A25640941707020727820772F206C656E2030
+0A000025643A256409417070206C617965722052582064
+6174616772616D20286C656E3D257A752920666F722048
+23256868750A00000025643A256409417070206C617965
+7220525820646174616772616D20286C656E3D257A7529
+20666F722048232568687520747970653D307825686878
+207472616E73616374696F6E2049443D25686875206572
+723D2568687520636F6D6D616E643D30782568780A0000
+000025643A256409536572766963652023256868752028
+4823256429207265736574206E6F74696669657220666F
+756E643D25640A00253032782530327825303278253032
+782D25303278253032F19403E0318000782D2530327825
+3032782D25303278253032782D25303278253032782530
+3278253032782530327825303278000000005248704752
+490028086812BF40F00100400840000860704770470000
+38B50446FFF7EEFF0025322C0AD2E10800EB810004F007
+01D0F8F0008900C84000F00F05444800781A2C04D01B2C
+08BF0509284632BD00F00F05FAE72DE9F0470446884691
+46FFF7CDFF00F1EC0A00200125322C38D2384801781A2C
+2CD01B2C08D101F00F0141EA0811B8F1010F04BF0025A8
+46314F01702046396888470646796820468847EFF31087
+72B60F213268814008FA00F08A4308401043B9F1000F30
+6003D0E1080AEB81014860002D204605D00EF449F304E0
+68F30301D5E70EF433F387F310880120BDE8F0870122B5
+E7F8B504460D46FFF785FFEC30184900221BE05FEAC67C
+05D54FF00F0C0CFA07FC4CEA03033F1DFFB27608F2D13B
+B100EB82070E687F689E433B4033430B60240A44EA0564
+521C091D2D0A002D08BF002C04D00023E6B20027002EE6
+E7F1BD0000007E4040E40F414068F59100588589000004
+414070B594B004464FF4C0500990002300200890079006
+9005900022012004900021A7200390A069029000200190
+00900AA8D6F404F1DDF4DEF00546DDF4E7F06168C91D40
+19C90800EBC1050AA832F4DCF0064600200490A07D0390
+E07C0290A07C0190607D0090237D627C217CA06901F013
+F880190830441900F00AF808B104F6A844204614B070BD
+0349087070470000014800787047000010CC9100F8E700
+00DDF410B07047000038B5FAF4AFF00FF2BC01294C9720
+10F423F1216E04F16400DDF442F005460FF2BC01972010
+F418F12968096928468847A06704F170012A68926C2846
+90471D491D48C8614FF41662BDE838401B4800F12401FE
+F7C59800003EB5154C04F51B75E9602A606B60A860089B
+079A069904F51170FAF429F209982066F9F481F0E968A8
+68FF2226F44EF16A68296804F13800FEF7A6D800200290
+3222E868084B0FF258010190A86800902046FEF7C9DF37
+BDF4F89100A4F8910051B38100B4BB9100ADC20F004372
+656174652053797374656D204F626A656374730A000043
+72656174652047756C704D654368696E6F6F6B456E6769
+6E650A00466C61677461696C5461736B000000000121FD
+F7D39BFDF7F09B0121FEF7769F10B5044604F10800FFF7
+F2FF2046BDE81040FEF7F39F38B5044604F10800FFF7EA
+FF256910E038B5044606E004F10800FFF7E3FF2046FFF7
+B3D804F10800FFF7F1940370358000DAFF2569002DF1D0
+0020206104F10800FFF7D3FF284632BDF8B506461D464F
+F0FF301446854208BF844203D13046BDE8F240D8E706F1
+0800FFF7BDFF14F4DCF7074620462946144A002326F415
+F1C4190BE006F10800FFF7B0FF29463046FFF7A3D806F1
+0800FFF7A6FF14F4C5F7251A012DB8BF0125306918B914
+F4BDF7A042E7D334690020306106F10800FFF795FF2046
+F2BD0000000040420F0038B504460D4604F10800FFF786
+FF2069284320612046FEF7E7DF04F10800BDE832407CE7
+38B5354C354D2168012225F8312005EBC101488028F454
+F5216805EBC102506035F8312042F0800225F83120491C
+2422B1FBF2F202EBC203A1EB830121606168491C6160A1
+68491CA16032BD38B5224C224D2168022225F8312005EB
+C101486028F489F6206835F8301041F0800125F8301040
+1C2421B0FBF1F101EBC102A0EB820020606068401C6060
+A068401EA06031BD38B5104C114D2268042325F8323005
+EBC202518029F48AF5216805EBC102506035F8312042F0
+800225F83120491C2422B1FBF2F202EBC203A1EB830121
+606168491C616032BD24CF890098878A0030B4C043AAB1
+0FF2300311F8014B84EA000505F00F0553F8255085EA10
+1080EA241404F00F0453F82440521E84EA1010EBD130BC
+C0437047000000006410B71DC8206E3BAC30D9269041DC
+76F4516B6B5861B24D3C7105502083B8ED44930FF0E8A3
+D6D68CB361CBB0C2649BD4D2D38678E20AA01CF2BDBDFF
+F740BF38B50C46A0F5A865200407D00023002240F27F21
+0FF29010FCF792FF05F21450210CBDE834400904E8E738
+B53D4CE06830B90023002297210FF2E010FCF780FFE068
+4FF0FF324FF4807100F65C4001F013F80546012D06DA00
+232A469D210FF2BC10FCF76DFFE06800F65C412A4600F6
+5C50FFF783DCE0684FF48031FFF7C0FFDEE730B5040083
+B006D100230022A5210FF28810FCF754FF224DE8680028
+3FD101202060207101210C200DF42BF701210D200DF427
+F701210E200DF423F701210F200DF41FF7002028704FF4
+481068601120288110206881284600F061FF30B1002300
+22B6210FF23410FCF729FF4FF4006204F5586104F65C50
+FDF7B7DE02200290EC604FF48060019004F65C0000905A
+22054B0FF27C1104F62400FEF7D6DD03B030BD88878A00
+B737800070B50C461546002600E08619AE4210D2294620
+4600F067FF0028F6D510F1040F01D1022070BD10F1020F
+0CBF0320FF2070BD012070BD70B5C90382B0A0F5A86419
+D500F65C552846F1940300398000FDF72EDF060012D000
+20009069462846FDF74ADF761E012804DB024600992046
+FEF7D6F92846FDF7A7DE002EECD173BD70470000633A5C
+77735C626F645F3437373630383338325F353134383731
+5C637573746F6D6572735C676F6F676C655C503231466C
+61677461696C6D63755C64656C69766572795C53656E73
+6F724875625F5032315C7372635C636870705C696E636C
+7564655C636870702F7472616E73706F72742E6800633A
+5C77735C626F645F3437373630383338325F3531343837
+315C637573746F6D6572735C676F6F676C655C50323146
+6C61677461696C6D63755C64656C69766572795C53656E
+736F724875625F5032315C7372635C636870705C706C61
+74666F726D5C62636D5C42434D343737785C6C696E6B2E
+6300004C696E6B20527800F0B583B04FF0FF32C0E91822
+002101E0491CC9B290F8342091421FDA002400EB810504
+E016461F46C0E91867641CAA6B138EA4B29C42EBD2D26A
+04EB440302EBC306327C012AF1D1D6E90223D0E918679F
+42E7D8E8D39642E4D2E5E7D0E91823CDE900230FF27C01
+0FF2100240F21E238F200FF4E9F503B0F0BD0000633A5C
+77735C626F645F3437373630383338325F353134383731
+5C637573746F6D6572735C676F6F676C655C503231466C
+61677461696C6D63755C64656C69766572795C53656E73
+6F724875625F5032315C7372635C636870705C636C6965
+6E74732E630000000025643A2564096E65787452657154
+696D656F75743D256C6C750A0000F0B50446164683B00D
+463046FFF77CFD07000FD125200FF24C020FF234010190
+009225238B200FF48FF520680221FEF795F90AE0324629
+4625F458F501207870324620683946FEF750F9012003B0
+F0BD25643A2564094F4F4D2061742025733A25640A0063
+3A5C77735C626F645F3437373630383338325F35313438
+37315C637573746F6D6572735C676F6F676C655C503231
+466C61677461696C6D63755C64656C69766572795C5365
+6E736F724875625F5032315C7372635C636870705C7365
+7276696365735C6C6F6F706261636B2E63000010B514F4
+AFF402460B464FF47A74A4FB020104FB031110BD70B505
+46084684B00E2100F09FF906000FF28C0412D132200190
+0094322322460FF268018B200FF419F5204604B0BDE870
+40002300223321FCF73EBDFFF7D4FFC6F80600C6F80A10
+3923D6F80600D6F80A10CDE9020122460E2000908F200F
+F2B0010FF4FBF42868314604B0BDE870400E22FEF7C4B8
+10B58B880124F19403903C8000012B02D1FFF7BEFF00E0
+0024204610BD25643A2564094F4F4D2061742025733A25
+640A00633A5C77735C626F645F3437373630383338325F
+3531343837315C637573746F6D6572735C676F6F676C65
+5C503231466C61677461696C6D63755C64656C69766572
+795C53656E736F724875625F5032315C7372635C636870
+705C73657276696365735C74696D6573796E632E630000
+25643A2564096368707054696D6573796E634765745469
+6D652072657475726E696E6720257A7520627974657320
+61742074696D653D256C6C750A002DE9F043044683B008
+46217A01EBC10291008D1D294600F0F3F8060014D13B20
+01903B230FF280040FF26801009422468B200FF46DF420
+4603B0BDE8F043002300223C21FCF792BC0020F0708146
+04F10C08B71D08E058F8041B3846242225F429F409F101
+092437207A8145F3D320682A46314603B0BDE8F043FEF7
+1AB810B58A880124012A02D1FFF7BAFF00E00024204610
+BD25643A2564094F4F4D2061742025733A25640A00633A
+5C77735C626F645F3437373630383338325F3531343837
+315C637573746F6D6572735C676F6F676C655C50323146
+6C61677461696C6D63755C64656C69766572795C53656E
+736F724875625F5032315C7372635C636870705C736572
+76696365735C646973636F766572792E630010B514F471
+F302460B464FF47A74A4FB020104FB031110BD90F86D10
+890748BF00F081BF7047F0B5150093B004460F460FF2CC
+1605D1002300225A213046FCF709FC207A05280ADB0090
+5E2332460FF218218B200FF4D0F3002013B0F0BD04EB80
+0008A9C560207A04EB800007622846FEF745FF207A296B
+07917223698C0691324695F82110059195F82010049100
+9008A9039105F11001029100F1100101918F200FF2EC11
+0FF4A7F3207A411C21721030C0B213B0F0BD10B5044606
+2C06D20023002279210FF23810FCF7C3FB2046FFF772FB
+38B1002101700321417000218170C170818010BD38B50D
+46062D044606D20023002288210FF20410FCF7AAFB2846
+FFF759FB050007D02146062225F445F3012068700020E8
+70284632BD30B5044683B00D46D4E90201002908BF0028
+0FD1D4E90001002908BF002809D0CDE9000197230FF2B8
+020FF2B0118B200FF453F3FFF755FFC4E900010020C4E9
+0200A878607403B030BD2DE97043064686B0D6E90245FF
+F744FFC6E90201D6E90089B9F1000F08BFB8F1000F0FF2
+740206D1CDE90001A3230FF28C118B201AE0002D08BF00
+2C08D0CDE9F19403204080000201CDE90001A7230FF294
+118C200DE0B0EB0804CDE90201CDE9000161EB0905CDE9
+0445AD230FF2AC118F200FF410F306B0BDE8708370B504
+46084615461E46FFF7BEFF3246294620680068BDE87040
+FDF7CFBE00000000633A5C77735C626F645F3437373630
+383338325F3531343837315C637573746F6D6572735C67
+6F6F676C655C503231466C61677461696C6D63755C6465
+6C69766572795C53656E736F724875625F5032315C7372
+635C636870705C73657276696365732E6300000025643A
+2564094D61782073657276696365732072656769737465
+7265643A202320256868750A000025643A256409526567
+6973746572656420736572766963652023202568687520
+6F6E2068616E646C652025642077697468206E616D653D
+25732C20555549443D25732C2076657273696F6E3D2568
+68752E256868752E2568752C206D696E5F6C656E3D257A
+75200A0000000025643A2564094475706C696361746520
+7265717565737420727820617420256C6C75206E730A00
+0025643A256409547820726573706F6E736520772F206E
+6F2072657120743D256C6C750A0025643A256409526573
+656E6420726573706F6E736520743D256C6C7520666F72
+207265717565737420617420743D256C6C750A0025643A
+25640953656E64696E6720696E697469616C2072657370
+6F6E736520617420743D256C6C7520666F722072657175
+65737420617420743D256C6C7520285254543D256C6C75
+290A000010B514F48DF102460B464FF47A74A4FB020104
+FB031110BDF2E70CB410B5ADF5027D04460A4684AB4FF4
+007101A826F4B9F31CB1022C13D009D31AE001A8009038
+230FF264020FF250018B2019E001A800903B230FF25002
+0FF23C018C2010E001A800903E230FF240020FF22C018E
+2007E001A8009042230FF22C020FF218018F200FF4D5F1
+0DF5027D10BC5DF80CFB0FF284014160704725643A2564
+0950414C3A2025730A0000633A5C77735C626F645F3437
+373630383338325F3531343837315C637573746F6D6572
+735C676F6F676C655C503231466C61677461696C6D6375
+5C64656C69766572795C53656E736F724875625F503231
+5C7372635C636870705C706C6174666F726D5C70616C5F
+6170692E6300000000000001594280005B428000313680
+007D368000704700002DE9F04788B08946139E90F87D10
+14461D4609B900203CE000F10C074FF4C471FA6D0FF2E4
+0A302033F434F6B9F1080F804603DB2D215046FCF77AF9
+0F2C03DBF19403B04380002E215046FCF774F9FA6D4FF4
+2071312033F420F6B8606020FA6D10FB04F1322033F418
+F6B8F1000F786011D01499069105960195009023461299
+0491404611990391109902910821BA689FF473F7386038
+6808B0BDE8F08730B50499002409B148F27814069909B1
+04F6481468254FF4B871454341436F3501F27711ED0805
+EBD10145000935ED0801EB450100EB500058256843C01D
+01EBD000C00000F5D56000190BB100F6780012B100F5D8
+50D830059900F5B47011B100F5A850C830079909B100F5
+B15030BD70617463685F676C70656F626A666163742E63
+707000000010B582B0044601208DF80000002100208DF8
+010020460DF4FBF269462046FBF7AFFF13BD80B50021AD
+F800106946FBF7A7FF01BD10B5DFF84C4342F654000059
+0DF472F304F52051BDE8104014318020FCF7FE9C10B5DF
+F82C4304F520511431022005E010B5C74C04F520511431
+0420FCF7EEDC2089BDE810400DF455B338B50446002102
+20FCF77BDD802080F3118800BF00BFBB4DBC4A28890121
+0DF4D2F228890DF411F36CB928890DF49BF2012808D105
+F5205114310220FCF7C9DC28890DF432F3002080F31188
+31BD10B500210420FCF755DD802080F3118800BF00BFA8
+4CAA4A208900210DF4ACF220890DF4EBF220890DF476F2
+40B904F5205114310420FCF7A5DC20890DF40EF3002080
+F3118810BD80B500218020FCF731DD9C480068BDE80240
+0DF4CFB2974A01212DE9F843944C974E20890DF484F220
+8904F520554C350DF4C0F2A868934A00210DF479F215F4
+D7F2002707E0608900210DF457F229681020FCF773DC38
+46FFF787FF64212320FCF704DD00275FEA000807D115F4
+CAF22320FCF7D1DC804615F4BAF25FEA886005D56968BD
+E8F4434020FCF7579C306A00F57A79FFF7B4FF60890121
+0DF42EF25FEA887005D464210220FCF7DFDC0028C9D05F
+EAC87004D400210120FCF7D6DC98B12269E16820784FF0
+FF3310F446F2804620780FF440F42069296880450CBF08
+201020FCF72ADC09E0306AA9EB00018020FCF7BBDC10B1
+6420FDF70BDFA8680DF488F2FFF758FF608900210DF4F6
+F1306AA9EB00010129B8BF00210420FCF7A5DC002897D1
+20890DF474F2012792E700B54F4889B04168029100F114
+0200218DF80610ADF804100692FF218DF80C104FF48051
+ADF81C10ADF8141000F58051143104910D210278012A42
+F6540208BF112111500121009106AB007804AA01A910F4
+90F009B000BD10B584B020B10178012918BF002903D04F
+F0FF30F194034047800004B010BD334C2178042918BF6F
+F0010023D10EC80EC4FFF7BDFF0C3CE8B92089FFF7A8FE
+6089FFF793FE42F654000059FFF7A0FE022002904FF400
+60019004F500501430009004F52050284B0FF2A0015022
+1430FDF760DE002004B010BD38B50C461C490A78012A18
+BF002A02D06FF0060032BD08B1002C02D54FF0FF3032BD
+C8600C6142F64C0216488068505001F5205114310120FC
+F783DB4FF4FA611820FCF716DC050007D1002300224FF4
+CC710FF24C00FBF76AFF28074CBF20466FF0070032BD13
+460A4601460248007810F4A1B10000005D8900E5448000
+F54480005485890060D09100C5448000BB458000436870
+704C696E6B5461736B00000000633A5C77735C626F645F
+3437373630383338325F3531343837315C637573746F6D
+6572735C676F6F676C655C503231466C61677461696C6D
+63755C64656C69766572795C53656E736F724875625F50
+32315C7372635C636870705C706C6174666F726D5C6263
+6D5C42434D343737785C706C6174666F726D5F63687070
+5F6C696E6B2E63000000002DE9F04104460D46AE1DA888
+971F05284DD8DFE800F003141E28344004F110084046FF
+F754FB2946204600F042F8044610B14046FFF770FB2046
+BDE8F08104F128084046FFF743FB2946204600F086F8ED
+E704F140084046FFF739FB2946204600F0C9F8E3E704F1
+58084046FFF72FFB3B4632462946204600F0EFF8D7E704
+F170084046FFF723FB3B4632462946204600F0F7F8CBE7
+04F188084046FFF717FB3B4632462946204600F0FCF8BF
+E70124C2E7F0B5054683B068790FF2A047002404280E46
+0ED1F7233A460FF26C418B200EF46AF600230022F82138
+46FBF792FE012438E02868AA68406852680FF2D4619047
+70B9FE233A460FF2CC418B200EF453F600230022FF2138
+46FBF77BFE0C2421E040F203133A460FF2C8418E200EF4
+43F60420687106213046FFF7B5FA58B940F20B13019300
+973A460FF2C4418B200EF432F6042406E00246062305F1
+10012846FFF71CFB204603B0F0BDF0B5044683B0A0680F
+F2F43780680D4680470026667140F227133A460FF29841
+8E200EF413F606212846FFF787FA60B94FF49770019003
+4600973A460FF264418B200EF403F6042606E002460623
+04F128012046FFF7EDFA304603B0F0BD10B504460FF29C
+326079042808D0BDE8104040F243130FF25C418C200EF4
+E7B540F245130FF27C418E200EF4E0F500206071A06880
+68BDE810400047F0B50446084683B00A21FFF74AFA0025
+0600F19403D04A80000FF250370BD140F25F1301930097
+3A460FF2E4318B200EF4C3F5042516E0A068C0688047C6
+F806000A21019100904FF4B3733A460FF240418F200EF4
+B1F50A23324604F140012046FFF79DFA284603B0F0BD38
+B500250446092B104638BF022509D3A368D0F80520D0F8
+011000781B69984700B9FF25284632BD38B50025052B04
+4638BF022507D3D2F801101078A2689269904700B9FF25
+284632BD7CB504460D4600260BB902261FE0A168107809
+6A884708B9FF2618E006212846FFF7E8F960B90FF29022
+0FF23031009240F2E11301938B200EF464F5042606E002
+46062304F188012046FFF74EFA304676BD1CB50620FFF7
+B5F9A8B940F2F9130FF254240FF2F4210193009422468B
+200EF448F5204602B0BDE81040002300224FF4FD71FBF7
+6CBD814B1979017006220621818001461868006802B0BD
+E81040FDF701B970B504460FF28840784E84B0D0E90023
+CDE9022330798DF808000D4696F869008DF80A00082102
+A8FFF792F980B940F219230FF2E0140FF2802101930094
+22468B200EF40DF50023002240F21A2162E08471C57102
+46082306F1580160E030B583B0044601AA694600F0F5FA
+5F4D48B940F22F230FF29C120FF2FC218B200EF4EFF413
+E00099287908700320009948700020009988700099C870
+0720009988802868019A00990068FDF7ABF8A968496920
+46884703B030BD70B504460FF2D8304A4E84B0D0E90023
+CDE9022330798DF808000D4696F881008DF80A00082102
+A8FFF736F980B940F256230FF228140FF2C81101930094
+22468B200EF4B1F40023002240F2572106E08471C57102
+46082306F1700104E02046FBF7D0FC04B070BD3046FFF7
+90F904B070BD30B583B0044602AA01A900F063FA2C4D60
+B995F881000FF2D0020FF26421009040F26F238B200EF4
+86F415E0019928790870032001994870019995F8810088
+7000200199C8700820019988802868029A01990068FDF7
+40F8A968C9692046884703B030BD38B504464FF0827000
+F0B5FC144DA86078B90FF270040FF24C214FF423732246
+8B200EF456F40023002240F28D2120460EE02C6029460F
+F280222046FFF760F8287150B90023002240F293210FF2
+380001B0BDE83040FBF76ABC31BD0000A092890025643A
+256409474E5353207365727669636520616C7265616479
+206F70656E0A00000000633A5C77735C626F645F343737
+3630383338325F3531343837315C637573746F6D657273
+5C676F6F676C655C503231466C61677461696C6D63755C
+64F19403604E8000656C69766572795C53656E736F7248
+75625F5032315C7372635C636870705C73657276696365
+735C676E73732E63000025643A256409474E5353205041
+4C206F70656E206661696C65640A0025643A256409474E
+53532073657276696365206F70656E65640A000025643A
+2564094F4F4D2061742025733A25640A0025643A256409
+474E5353207365727669636520636C6F7365640A000025
+643A256409474E53532073657276696365207265736574
+20627574207761736E2774206F70656E0A00000025643A
+256409474E535320736572766963652072657365742E20
+436C6F73696E670A000025643A25640963687070476E73
+73536572766963654765744361706162696C6974696573
+2072657475726E696E6720307825782C20257A75206279
+7465730A0025643A25640963687070476E73734C6F6361
+74696F6E4576656E7446726F6D43687265206661696C65
+6420284F4F4D3F290A000025643A25640963687070476E
+7373446174614576656E7446726F6D4368726520666169
+6C656420284F4F4D3F292E205472616E73616374696F6E
+204944203D20256868750A00000025643A256409474E53
+532050414C204150492076657273696F6E206E6F742063
+6F6D70617469626C65207769746820434850502E204361
+6E6E6F7420726567697374657220474E53532073657276
+6963650A00003A6411A2505B4442AFDB418E3A74FAF447
+4E535300000000000000000000000001000000834A8000
+C94880000000000006000000BF4B8000114C80006F4C80
+00C94C80003B4D80000000000003000000000000000400
+0000407880013A307047D0E900230A604B60D0E902238A
+60CB6002690A6142694A6182698A61C269CA61026A0A62
+808C888401F126000021017041707047D0E900230A604B
+60D0E902238A60CB60D0E904230A614B61D0E906238A61
+CB61026A41F8202F426A4A60826A8A60C26ACA60026B0A
+61828E8A82C28ECA82028F0A8300F13A0213788B765278
+CA76C06BC86170472DE9F84304460D4600202870904660
+7868701F460621A81C25F462F405F1080104F10800FFF7
+A8FF089E30888044607880016886318810FA81F0874206
+D2002300225F210FF22010FBF7A0FA688EE0B1318810FA
+81F0874217D30027B94609E0206B41464844FFF7A1FF7F
+1C08F1400809F1400960788742F2D33088698E28863088
+08183080BDE8F18300202886BDE8F183D0E900230A604B
+60002382688A60C268CA6002690A6142694A6182698A61
+F19403F0518000C269CA61028C0A8401F1220213705370
+426A4A62826A8A62C06AC8627047F0B50D0083B0044616
+4606D10023002282210FF28400FBF752FA36B900230022
+83210FF27400FBF74AFA2046FFF739FF0746FEF7F6F928
+6060B13421ADF80410821D01A900913B46811D2046FFF7
+71FF3760012003B0F0BD70B50D000446164606D1002300
+2295210FF23000FBF727FA36B90023002296210FF22000
+FBF71FFA3620FEF7CEF9286030B1811D2046FFF799FF36
+203060012070BD633A5C77735C626F645F343737363038
+3338325F3531343837315C637573746F6D6572735C676F
+6F676C655C503231466C61677461696C6D63755C64656C
+69766572795C53656E736F724875625F5032315C737263
+5C636870705C636F6D6D6F6E5C676E73735F636F6E7665
+72742E63000000002DE9F043044683B060780FF26C480F
+F22841DFF8C863019031230FF20840009042468F200EF4
+96F1716800291CBF607800282FD0C96838208847070005
+D10023002235214046FBF7B3F938222146384624F452F1
+0020386371686078C9688501284688475FEA000905D100
+2300223C214046FBF79DF9216B2A46484624F43CF1C7F8
+3090B16829B10969384603B0BDE8F043084703B0BDE8F0
+8300000FB42DE9F0412DED028B84B00FF2CC389DF87860
+0FF250440FF26041C84D01960094472342468F200EF446
+F16968002963D0F00761D5C96830208847060005D10023
+00224E214046FBF764F9DDE90C0129F4A6F7C6E900019F
+EDBA8B0EA806F10807D0E9062351EC180B23F419F023F4
+5DF138600EA8D0E9082351EC180B23F40FF023F453F178
+600EA8C16A806A25F4E9F1B860DDE90E01AC4AAE4B23F4
+4AF225F4E0F1F8600EA8C168806825F4DAF138610EA8C1
+6B806B25F4D4F1786186231F20388342460020B876F876
+1EA80FF2D431C068F8611EA8006938621EA84069786238
+8B0290019600948F200EF4E4F0A96811B1896830468847
+04B0BDEC028BBDE8F0015DF814FB10B58D4C82B06060A1
+600020F7F400F2A06808B1006880470FF2A4300FF2B422
+0FF2A831009095238F200EF4C1F0012016BD80B50FF2A0
+300FF298220FF28C3100909A238F200EF4B3F000F0BBFC
+00F023FCF7F4E1F1784800214160816001BD00B583B007
+200190A8230FF27C300FF264220FF28C3100908F200EF4
+99F0072003B000BD70B588B0040014BF54204620019003
+920E460FF27C300FF238220FF29431654D00900296B223
+8F200EF480F0B6F57A7F38BF4FF47A76B4B100200290F1
+94038055800000964FF4C8700390019605208DF8100000
+208DF811005E480590002006900790684600F017FC0646
+06E000F06BFC0646287808B9F7F4FAF1AA6852B12EB900
+21601E8041C043C00F01E00121002052689047701E8041
+C00F08B070BD1CB504460FF228300FF2AC120FF23C3100
+900194D3238F200EF43CF03F48416821B12046BDE81C40
+0969084713BD70B50C4686B0B4F57A7F054638BF4FF47A
+7445B13A48049003940020059003A800F055FB01E000F0
+92FB06463048826852B12EB90021681E8041C043C00F01
+E001210020D2689047002D14BF5420462001900294EB23
+0FF2E0200FF22C120FF2FC2100908F200DF4FEF7701E80
+41C00F06B070BD38B504460FF2F8200FF20C120FF20021
+1A4D0090F3238F200DF4EBF7696849B1206B0969884769
+6821B12046BDE834400969084731BD1CB5040014BF5420
+46200190FA230FF2DC200FF2CC020FF2FC2100908F200D
+F4CDF7084804703CB1806800281CBF8068002804D00948
+00E00020F7F45DF1012016BD0000B8888A0000000000D0
+126341B4C876BE1D5380009F1AFF3FB95380001CB50446
+0FF2BC200FF274020FF29C110090019440F217138F200D
+F49FF7200E012814BF00200FF2B02016BD6272636D476E
+73734F6E4D65617344617461000025643A2564095B2573
+5D204D6561737572656D656E742064617461206576656E
+74203A206D6561737572656D656E745F636F756E74203D
+20282564290A000000633A5C77735C626F645F34373736
+30383338325F3531343837315C637573746F6D6572735C
+676F6F676C655C503231466C61677461696C6D63755C64
+656C69766572795C53656E736F724875625F5032315C73
+72635C636870705C706C6174666F726D5C62636D5C4243
+4D343737785C73657276696365735C706C6174666F726D
+5F676E73732E63000000006272636D476E73734F6E506F
+736974696F6E000025643A2564095B25735D20706F7369
+74696F6E56616C696469747928307825303278290A0000
+000025643A2564095B25735D206576656E742830782530
+3878292C203078253034780A000000676E737350616C4F
+70656E0025643A2564095B25735D0A00676E737350616C
+436C6F736500000000676E737350616C47657443617061
+62696C6974696573000025643A2564095B25735D203078
+253038780A0000676E737350616C436F6E74726F6C4C6F
+636174696F6E53657373696F6E00000025643A2564095B
+25735D2025632C2025642C2025640A0000676E7373F194
+031059800050616C52656C656173654C6F636174696F6E
+4576656E740025643A2564095B25735D206576656E7428
+307825303878290A000000676E737350616C436F6E7472
+6F6C4D6561737572656D656E7453657373696F6E000000
+0025643A2564095B25735D2025632C2025640A0000676E
+737350616C52656C656173654D6561737572656D656E74
+446174614576656E740000676E737350616C436F6E6669
+67757265506173736976654C6F636174696F6E4C697374
+656E65720025643A2564095B25735D2025630A00006368
+726550616C476E737347657441706900000000000401C1
+548000F35480002155800045558000DD5580000B568000
+7F568000B556800038B504460D4604F12000F6F4CBF585
+ED000BE06B24F442F7C5E90201A06B24F43DF7C5E90401
+0020C5E9060094ED000B85ED080B94ED020B85ED0A0B20
+6924F42DF7C5E90C01606924F428F7C5E90E01A06924F4
+23F7C5E91001606B00F00101C0F3401030B1206BDFF844
+24904238BF41F0020105F148000170616C4160A16C8160
+E16CC160216D0161616D416131BD2DE9F0410446DFF81C
+04DFF81C54ADF5327D8669300004BF2868002870D0E4B2
+8DED580BADF8684100204FF6807843E001EBC0020DF5B0
+7C537803F00F07062343439C444FF67F0EBCF83CC00EEA
+0C0C4CEAC7170DF5B07C9C440DF5B07EACF83C70864417
+7807F03F0C8EF80AC00DF5B07E17F0C00C674618BF0127
+9E4492F806C0BEF83CE00CF03F0C08EA0E0E4CEA87170D
+F5B07C9C4447EA0E07ACF83C700DF5B07C57889C44401C
+ACF83E7058AF9288DB19A3F84020A042B9D33000DFF86C
+7307D03868569058A984B000F01CF80FBCB0472D682800
+07D03868569058A984B000F011F80FBCA84722460DF532
+7DBDE8F04132230FF2503197200DF468B50DF5327DBDE8
+F08168464FF4B47223F441B500002DE9F0470F00AEB002
+D1562100F0C6F8DFF80893D7ED060A99ED000A97F83400
+DFF8FC82BA4CB8EE400AB4EE600A00F00106F1EE10FA48
+BF002609D4002E1CBF2068002804D0D8F80000401CC8F8
+000016A93846FFF702FF002E14BF542546256069DFF8C0
+A20690DAF800000590D9F80000DFF8A4920490B86924F4
+3DF6CDE902010095DDE916230FF2E02197200DF415F565
+69D9F800002DB9DAF800A05FEA0A0133D029E0216851B1
+A16831B1D8F800209142BF41FF43FF0F02E0012700E000
+272EB99DF8A01001F0FE018DF8A01047B1149016A984B0
+6846602223F4D0F40FBCA847DAF800A05FEA0A00F19403
+A05C80001CBF61698A450BD057B1D9F80000149016A984
+B06846602223F4BCF40FBCD047A06828B1D8F800108142
+28BF00F0DAF82EB0BDE8F087000010B5040088B002D1DC
+2100F035F80ECC7C480EC04FF47A72B1FBF2F1514340F8
+0C1D724802686AB90020029000914FF4C8700390019100
+20ADF8100005900690079009E06B4690EC080B83EC080B
+8A4238BF114601910091012000F0AFF9684600F0C4F969
+46684891EC080B80EC080B002008B010BD00000FF2B410
+FAF7A4BC80B5002000F09AF95E490020086020215D4823
+F431F45548016811B9F7F49EF601E000F0A3F9002002BD
+0000F0B58FB004460D46164668463821524F23F41CF43A
+680FF2CC212B4697200DF465F4386888B17F6838000ED0
+00208DF800008DF8015002A83146282223F438F4414801
+680C946846B8470FB0F0BD000030B5050091B003D14FF4
+9371FFF7B6FF374C0FF2A8120FF2B41195EC080B84EC08
+0BE06923680790A069069060690590607C0490207C0390
+E0680290A06801906068009097200DF429F46069002804
+BFA069002807D02E48F7F4CCF50FF2F81197200DF41BF4
+60684FF47A71B0FBF1F1D8B101B901214FF47A70484360
+6008A894EC080B80EC080B2048006838B11E4821680068
+814238BF08460990089008A800F026F916490020086000
+2011B030BD10B51548006810B9F7F412F602E0134800F0
+16F90A4CE269100003D00A480168002090472021204623
+F490F30FF2941197200DF4DBF3002010BD0000A1252600
+54F8910080F8910078F8910090F6910074F891007CF891
+0088BB910094BB9100B55B80005075626C697368656420
+736174656C6C69746520696E666F2025642F25640A0070
+617463685F676E73735F6F6E636869702E637070000000
+4F6E476E73734669785374617475732054533A25662056
+3A2563204573744572724D3A256620476E73734163634D
+61736B3A256C75206D5F6F6E5F676E73735F706F733A30
+78253038782C206D5F7265715F706172616D732E676E73
+734F6E506F736974696F6E3A3078253038780A00427263
+6D476E7373537461727400000025732072657120706172
+616D73203A20466978496E744D7320256C752C20527074
+496E744D7320256C752C204D6178466978436E7420256C
+752C204163634D61736B4D20256C752C205077724D6F64
+652025642C20526571547970652025642C20506F734362
+20307825702C2053617453746174436220307825702C20
+53746F70436220307825700A0000004F6E476EF1940330
+6080007373466978537461747573207265676973746572
+65640A004F6E476E737346697853746174757320756E72
+6567697374657265640A0000004F6E4D65617344617461
+203A2025642C2075634D6561737572656D656E74436F75
+6E74203A2025640A00000030B583B00446F6F483F0806F
+0168CD6B2CB10021019100910223022204E00021019100
+91022300224FF0FF31A84737BDF0B504469BB020684FF4
+7A71B0FBF1F525B952210FF2E400FAF7E0FA207C002700
+2608B9304E20E00528304902D10E462F4F1AE0022804D0
+012804BF627C002A03D10E4648F208070FE0032804D001
+2804BF627C012A03D10E4644F2083704E0042804BF0E46
+40F60837E0680FF2A401019000963B462A4696200DF497
+F2E068322838BF322004D3B0F5C87F88BF4FF4C870E060
+024617480FF2A80102601148036896200DF482F2324639
+462846F7F44BF1114D287898B9617C0FF2AC0280200129
+08BF4FF4C070009048F6A043642101A823F407F401A8F7
+F4C8F4012028701BB0F0BD608589000800008008FB0080
+0880008090F691008CF6910070617463685F676E73735F
+736572766963652E63707000005374617274476E737352
+65717565737420256C7520256C7520256C752052657141
+63634D61736B20256C752000000000476E73734163634D
+61736B20256C75204D61784E756D4368616E6E656C7320
+256C750A002470676C69726D2C7265715F627265616463
+72756D622C7076744F6E436869702C706572696F645365
+632C25642C62617463684F7074696F6E2C256400000000
+676C70655F6E6176737466696C7465722E6800002DE9F8
+432DED028B04468EB0A1602BF4A1F20546A0690FF25068
+10B9242100F069FA1020A0876FF000413020E08704F586
+791420A4F8400004F582776E20A063A068884200F02182
+04F567760020DFF8501530728D421CBFDFF848158D4210
+D0DFF844158D421CBFDFF840158D4208D0DFF83C158D42
+1CBFDFF838158D4240F0FF81A069DFF83015884208D0DF
+F82C1588422CD0DFF82815884217D03AE0207902280AD1
+4FF0E040DFF81815C4E90801DFF81405DFF8141529E0DF
+F81405DFF82C15C4E90801DFF80C051EE02079032802D0
+D22100F00EFADFF8FC04DFF8FC14C4E90801DFF8F804DF
+F8F8140FE02079032802D0D82100F0FDF9DFF8EC04DFF8
+EC14C4E90801DFF8E804DFF8E814C4E90A0102E0DE2100
+F0EDF901203070294620462DF463F03073294620462DF4
+8AF084F8C5030A2104F26A30017019214170F19403C063
+8000002181701021C1706C20A063A18700202EF446F510
+B93220E0870DE000202EF43FF52FF415F14069E0870020
+2EF438F52FF40EF1807F00B10A20A4F840000025012038
+70002004EBC00191F8441009B1012502E0401C1828F5DB
+04F2EB16307C08B93220E0870820A4F8400038220FF2D8
+41484623F4FEF0DFF83C0438649FEDC98ADFF838047860
+20462168896C8847032812BF0428DFF828047860002078
+64B0EE480A2168D1F8E01120468847DFF81404386587ED
+138A002D04BF3078002800F03B8138220FF2B841484623
+F4D2F03078A8B39FEDB48A97ED100A30EE080A87ED100A
+204697ED010A30EE080A87ED010A2168896C8847032818
+BF042807D120462FF4A7F018B94FF4A57100F052F997ED
+110A30EE080A87ED110A97ED120A30EE080A87ED120A97
+ED130A30EE080A87ED130A97ED140A30EE080A87ED140A
+0DF11100039005AB0DF1160002900DF115020DF1120001
+9004A90DF11300009020462DF475F39DF81000002874D0
+032803DB4FF4AD7100F01DF99DF81000022805D1307830
+B140F25B1100F013F9307800283BD19DF8100097ED100A
+DFED830A9FED831A01280CBF30EE010A30EE200A87ED10
+0A97ED010A0CBF30EE010A30EE200A87ED010A97ED110A
+0CBF30EE010A30EE200A87ED110A97ED120A0CBF30EE01
+0A30EE200A87ED120A97ED130A0CBF30EE010A30EE200A
+87ED130A97ED140A14BF30EE200A30EE010A23E09FEDAE
+0AD7ED100A70EE800AC7ED100AD7ED010A70EE800AC7ED
+010AD7ED110A70EE800AC7ED110AD7ED120A70EE800AC7
+ED120AD7ED130A70EE800AC7ED130AD7ED140A30EE800A
+87ED140A9DF815009FED9B8ADFED9B8A88B1032803DB40
+F2731100F0A1F89DF8150097ED010A01280CBF30EE280A
+30EE080A87ED010A9DF8140088B1032803DB40F2791100
+F08CF89DF8140097ED100A01280CBF30EE280A30EE080A
+87ED100A9FED878A9DF81300DFED868A88B1032803DB40
+F2811100F073F89DF8130097ED120A01280CBF30EE280A
+30EE080A87ED120A9DF8120088B1032803DB40F2871100
+F05EF89DF8120097ED130A01280CBF30EE280A30EE080A
+87ED130A9DF8110088B1032803DB40F28D1100F049F89D
+F8110097ED140A01280CBF30EE280A30EE080A87ED140A
+0020A07421E040F2092100F036F81CE064486449C4E908
+0164486449C4E90A0138221220A087E0870020A4F84000
+012038700FF2482168487860684622F47DF73822694648
+4622F478F7E08F312803DB40F21F2100F0F19403506780
+0011F820462CF432F50EB0BDEC028BBDE8F18300009A99
+954114AE41C37B140BC20AD7CBC14046F9F793BF000038
+B50D46044601212DF4CCF02168896F20468847002842D0
+297809B1212907DB42290EDB512903DB762927DB9A2936
+DA00F098F802282CD000F094F805280FD127E0212901DB
+3429F2DB342927DB0FF2E41000EBC100A0F5D07090ED00
+0B31BD00F080F8012802D19FED310B31BD00F079F80428
+06D19FED300B31BD00F072F8072802D19FED2E0B31BD00
+F06BF8082802D19FED2D0B31BD9FED2D0B31BD9FED2F0B
+31BD110000301100003311000034110000351100003711
+00003880BA8C0100F0490200751903AA969741ABAAAAEA
+8D737F416666663FDDDDDDA9EC51B89744989741E5174B
+CAB0757F418FC2F51645989741BF58F273B1757F410000
+E4411F85ABC00000ACC100001AC2D8A314C17B140B420A
+D7CB41333391418FC2414100FCF8DB1AAC97410030C77C
+15F092413F219BE18F6D4C3F560691E929A261BFFA49C4
+7AF49D47BF133680DA4F965F3FCF68A6D90ED6473FAE47
+19C1000000000000000028462DF445B500007061746368
+5F676C6D657372645F617369635F636F6E6669672E6370
+70000000F628DCBE295C0F3F0AD7233E3D0AB7BF14AE07
+BF295C0F3F8FC2753D48E13ABFC3F5283FB81E05BE8FC2
+753D8FC2753F48E13ABF8FC2753FF628DCBE295C0F3F0A
+D7233E3D0AB7BF14AE07BF295C0F3F8FC2753D48E13ABF
+C3F5283FB81E05BE8FC2753D8FC2753F48E13ABF8FC275
+3F0000304000003040333313400000A03F3333B33E3333
+33BF9A99B9BF1F85EBBF3333F3BFCDCCCCBFCDCC8CBFCD
+CC0CBF3333B33ECDCC0CBFADF3606CD08062BFF365376D
+A55B5FBF8BE4AC01AAB559BFA62103A9AF0F54BF7D40F1
+7A68D34CBFB3BA9DC9738741BF8FDF22CAF3ED28BF9A37
+2BFBDE41243FB6D0DF956E5C403F85D3F46C65A84B3F2A
+EB04222E7A533F0FAEAE7A2820593FF47058D322C65E3F
+2E79711F0F36623F10B532230822DFF8801ADFF8800ADF
+F8804A29F447F322460FF21D01002029F4F6F3DFF8700A
+A7F48DF32246BDE81040DFF8941A29F4EBB332230822DF
+F8581ADFF8480A29F4A6B32DE9F0430D00D1B004469046
+1F4600F0A580291DD9F4E4F600F0AEF8D9F452F700F0B0
+F80FF6882918B12DF419F300F099F8DFF8346A00203070
+707000F09CF800F0FEF89DF8000030B100F09BF818B12D
+F406F300F086F870780028EED0002084F8200000F084F8
+05F14C012046DAF48FF100F0010080F0F19403E06A8000
+01069DF8000030B100F080F818B12DF4EBF200F06BF800
+2EE8D100F06DF841462046DAF4A3F300F071F818B12DF4
+DCF200F05CF800F060F839462046DAF43EF400F064F818
+B12DF4CFF200F04FF800F057F800F05FF800F059F818B1
+2DF4C4F200F044F800F052F8B8B100210020D9F4B3F401
+68896A884700F0D0FD03464FF4A0726946204600F03BFA
+30B100F03EF818B12DF4A9F200F029F895F84800C00713
+D5589FD4F80401391A00F025F82046DAF410F300F02AF8
+18B12DF495F200F015F839462046DAF4BDF502F06FFD00
+F017F8D9F4F3F700F019F818B12DF484F200F004F851B0
+BDE8F08300006B464A46152131F481B100004FF4A0736A
+4670474FF4A0736A46294620467047152031F45FB10000
+2DE9F041054616461F46B8192DED028B401E88B082423A
+BF801A441C00240868079001F5F078D1E90C0121F461F5
+0690D8E902239FED1D8B51EC180B21F4E4F421F456F505
+90D8E9002351EC180B21F4DBF421F44DF50490DFF86C08
+006821F47DF5DFF86828DFF8683821F4FBF3CDE90201DF
+F86008006821F466F5DFF85828DFF8743821F4EEF3CDE9
+00012B460FF6A8022146304632F425F108B03A46BDEC02
+8B31462846BDE8F04185E2000000000000E03F2DE9FF4F
+87B09818401E06900120DFF83818DFF814B8DFF8EC8708
+709BF80000002840F0CE800BF10800A7F46BF2002608EB
+C60004F0BAFA761C322EF8DB00262FE00021BAF1000F02
+D19DF80020AA802C706F7001220FF6B803AA701F680097
+11B100218DF80110761C01981AF80D1042780778F809CC
+1CA040C7F380178C1CA7400743D0094C1CA040C2F38012
+EB88384302FA01F108431843E88002A87DF42DF3089890
+F84C00F6B2864280F08980089800EBC6004E3001904FF0
+000A007800F03F070198407800F00F04C0F30119019880
+7900F03F0100F0C00040288DF8001004D0802808BF4FF0
+020A01E04FF0010A082C05DB40F2A5310FF2F070F9F77B
+FC394603A897F455F42046ADF402F0014603AA02A8ADF4
+FDF103A881F4EAF202A90BF1080004F05DFA002550B3A9
+4606E003A87DF4E2F209F101005FFA80F900F0F6F88145
+2EDA08EBC9000590417804A897F42FF418F83900ACF4DB
+F7014604AA03A8ADF4D6F104A881F4C3F202A903A8E5F4
+C3F40028DBD0059D03A87DF4BDF20FE000F0D4F8054602
+A90BF1080004F014FA08EBC505284604F04FFA4FEA0910
+E8802DB94FF470710FF24070F9F723FC052C08BFBAF101
+0F7FF442AF012143E7069E09980FF2F19403706E80004C
+72B0423ABF301A411C00210998022332F42AF009994418
+00F0A6F8401D062190FBF1F74FF00009FFB27FB1B4423A
+BF301B411C00219BF800000FF22072401C00903B462046
+32F40FF0041901A80FF62C01102222F4B6F39BF8000006
+2110FB01FA0AE001AA09F1010952F82020204631F4FAF7
+04190AF1010A00F075F85FFA8AFA824555D25FFA89F9B9
+F1060F50DA08EBCA05287808B9472317E0012808BF5323
+13D0022808BF52230FD0032808BF51230BD0052808BF42
+2307D0062808BF452303D007280CBF4E237823B4423ABF
+301B411C002168780FF288620090204631F4C2F70419A8
+7870B1B5F90430012B0ADBB4423ABF301B411C00210FF2
+7062204631F4B1F70419EB880020B3F5004FA8BF032007
+DAB3F5006FA8BF022002DA802BA8BF0120B4423ABF311B
+491C002198E7DFF84C15BDF92820002008700999079800
+F0FBF89BF80000401CC0B2B842A6BF0020012100218BF8
+01108BF800000BB0BDE8F08F00000BF10800A7F4F2B02D
+E9F0412DED028B044698469AB00D4616464046E9F46CF4
+07463868002878D00FF2E4510EA891EC0C0B80EC0C0B41
+46684604F0D7F9DDE90001002908BF00282DD0D7E90E21
+101A0021CDE90E01D7E91021DDE90201101A0021CDE910
+01D7E91421DDE90401101A0021CDE91201D7E91621DDE9
+0601101A0021CDE91401D7E91821DDE90801101A0021CD
+E91601D7E91A21DDE90A01101A0021CDE918010EA92046
+00F03BF8386BD7ED078A0C90B0EE408AF86A0B90B86A0A
+90786A0990386A089018EE900A23F401F4CDE906010594
+38EE880A38690490B86803903868029010EE100A23F4F2
+F3CDE9000104230FF248523146284631F4FFF632462946
+204600F064F8404604F073F94046E9F4F2F301201AB0BD
+EC028BBDE8F0812DE9F84FD1E90045002D04BF002C9FED
+240A42D0D1E9068B4FF41666A6FB082306FB0B33D1E908
+8B41F2040600F03AF8D1E90A8B12EB0A027B4142F27476
+00F031F8D1E9048B12EB0A027B4140F2DC5600F028F812
+EB0A02D1E9028B7B416420A0FB086900FB0B99901943EB
+090128F4E1F106460F462046294628F4DBF10022DD4B21
+F46BF102460B463046394621F4AFF323F445F300EE100A
+BDE8F18F000000000000A6FB08A706FB0B777047000050
+18002200F8012D491C02E011F8013B5A400B78002BF9D1
+884224BF2A2301F8013B13061B0F0A2BB4BF3033373388
+4228BF01F8013B02F00F020A2AB4BF30323732884228BF
+01F8012B884224BF0D2201F8012BF19403007280008842
+24BF0A2201F8012B884224BF0020087070472DE9F94F81
+B00C462DED0A8B94B01646BDF9A810C818451E1F992022
+0CA822F4FFF13088ADF81C0007A97088ADF81E00B088AD
+F82000F088ADF822003089ADF824007089ADF82600B089
+ADF82800F089ADF82A0000200B901F98D9F4EBF220980F
+F20442A8423ABF281A411C00211F9800900023209831F4
+25F6209946181F9820220CA922F4CCF1A81B471C94F834
+00002800F0EA8094ED008B51EC180B21F0004141EC190B
+D4E9020121F0004141EC1A0B51EC190B21F40BF203909F
+ED80BB51EC1A0B21F404F206909FED7FCB039821F42AF2
+00F008F953EC1B2B21F4B2F041EC190B21F4F4F1834621
+F41DF200F0FBF853EC1C2B21F4A5F021F4E9F104900698
+21F411F202460B4651EC1A0B21F423F253EC1B2B21F495
+F041EC190B21F4D7F1824621F400F200F0DEF853EC1C2B
+21F488F021F4CCF1814651EC180B0022002321F43FF094
+BF4E205320AE4234BF394600210290CDF800B00498039B
+0FF21C320190304631F4ADF58619D4E902010022002321
+F426F094BF45275727AE423ABFA81B00F1010890462069
+23F484F2CDE904010297CDF80490CDF800A04146069B0F
+F2F0220FF20838304631F48AF58719AF423ABFE81B461C
+0026A06923F46BF2CDE90201606923F466F200F092F8C7
+19AF423ABFE81B461C0026206A23F45BF2CDE90201E069
+23F456F200F082F8C7193846291A4E1C04F13401497869
+B1A84228BF0026A06A23F446F2CDE90201606A23F441F2
+00F06DF806E0A84228BF00262BA2314631F44DF5C61930
+46291A01F1010804F13401897879B1A84228BF4FF00008
+E06A23F427F2CDE900010FF26C224146304631F435F50F
+E0A84228BF4FF000081FA2414606E0AE4234BF39460021
+0FF25422304631F424F5BDF9A82020991F98FFF788FE14
+B0BDEC0A8BBDE8F78F0000E5B2800070CA91000CCC9100
+10E7890029208200B4C991008DEDB5A0F7C6B03EB0C991
+00FCA9F1D208E789000000000000004E40000000008084
+2E412C2C0000A9E80A004D62503F16CC910000408F402C
+00000002460B4651EC190B21F432B1CDE9000142463146
+384631F4E1B400004F4E434849505F4E4D45415B305D5B
+25730000002450474C4F522C31302C5354412C25732C25
+342E33662C25342E33662C2568642C2568752C256C642C
+302C502C442C4C2C302C432C302C532C30303030303030
+302C302C302C522C30303030303030302C747065662C30
+2C256C752C4C432C2C2C44522CF1940390758000302C00
+0070617463685F676C6F6E636869705F6E6D65615F6765
+6E657261746F722E637070000000000B07002450474C4F
+522C25642C5341540000002C25642C256400002C256325
+3032642C00000000253032640000000000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000000000000002450474C4F
+522C25642C5057522C6D412C252E31662C52462C25752C
+4F73632C25752C4D6561732C25752C5554432C25732C47
+4E53536D412C252E31662C4350552C25752C434F502C25
+752C537263682C25752C54726B2C25752C5270632C2575
+0000002450474C4F522C25642C5354542C25732C000000
+2530326C642530326C642E2530366C642C25632C000000
+002530336C642530326C642E2530366C642C25632C252E
+31662C000000252E31662C252E31662C0000252E31662C
+3130302E3000002C2C2C2C2C2C2C2C2C2C2C2C00000000
+9CAA8100A4AA8100ACAA8100B4AA810000F50450583070
+4780B5DFF8200D03F07DFEBDE80840DFF8A42DDFF8A41D
+28F488B5000010B50446DFF8980D2060DFF8980D04F015
+F94DF64200005D10B12046D7F482F34DF2B47000210059
+D1F4ACF604F559403030E0F4B1F604F559400830D7F4A8
+F504F55840A830E1F44DF204F558404830E1F450F204F5
+5740A430E1F451F200F0D1FBE1F453F202F0C7FCE1F461
+F204F5EE40E830E1F46AF204F5EE401830DCF48BF704F5
+EA409030CBF428F304F5CC40F830E1F463F204F5A24098
+30E1F464F201F06CF8E1F466F204F578503830A6F4B5F3
+04F50D50E1F479F204F11000E1F485F2204610BD000038
+B50C464DF2B47115460858D1F478F62A462146BDE83840
+04F00EBE2DE9F843DFF8B08D04460D46C8F80C50002200
+21284640F4A3F43222294604F1100090F45BF604F58046
+1036296830468AF478F641F2984104F55847495D17F8D4
+0F01290DD1401C7970387029462046D2F4CCF338780228
+02D12046D2F4F8F28CE000B978700020387020462168D1
+F8C8108847204600F087F800F051FBDEF457F204F11000
+CDF41DF020B904F557408030E0F4B3F030468DF4EEF430
+46A5F4D9F790B146F62430005D08B900F084FB47F2E170
+005D08B900F0E4FB02F022FC18B1012130468DF4E3F120
+4600F084F84DF278764AF69C29305990ED0C3B90ED0A2B
+90ED081B90ED060B2046D4F47CF72946204600F040F928
+6859F80410884204D204F558414FF0FF300860286849F8
+0400787810B92046D2F49AF2F194032079800001212046
+D5F4D8F1207B58B1E1F4EAF2E2F4F8F0B0F57A7F04D921
+68D1F8E8102046884731592046D6F4BAF759F804102046
+D5F4A7F128B9325929462046D6F4EBF728B122683159D2
+F8DC20204690472046D2F449F22168D1F89C1020468847
+0020C8F80C00BDE8F183000038B5044604F58045103528
+46E1F4B2F1E8B100F0C1FA05F0F5FC0421284607F027F8
+2846E1F4AAF104F50D50ACF47AF40168896888474DF2B4
+7000210059D1F4ABF500F069FF0020DFF8641D487031BD
+2DE9F041064606F55747B4B057F8780F06F50D5880B390
+F84800C0072CD502A8A3F4E6F14046ACF41DF605463868
+DFF8341D90ED060B8DED020B90ED080B8DED040B90ED0A
+0B8DED060B90ED0C0B8DED080B0020CDE90A012846A4F4
+89F004463868006891F4BEF3002000902346012202A928
+46A3F4E8F506F52A44A834204606F58045E1F456F11035
+00284FD12846A5F4F4F600284AD0F86BDBF4D1F4E2F4AD
+F0C00743D42046E2F4CEF30746C8F4A9F50446411E09B2
+3846C8F4BDF501460AA807F017FB002C2ED4CBF421F458
+B30122294616A88CF46BF316A903A889F4F5F6002212A9
+06A897F44AF6024603A9684697F427F0684696F45EF651
+EC100B20F402F601280FDBDFF8641D88420BDA31689DED
+102B896F9DED0E1B9DED0C0B9FED193B304688470AA8CB
+F4B5F3404607F0FAFAE8B940468FF45CF0E2F45EF04006
+16D54021404688F442F688B1012128468DF4B1F001F097
+FD30B12CF4C6F20FF22C02152130F4C9F1DFF8F41B0020
+48704046B1F484F118B1012128468DF49BF034B0BDE8F0
+81000000000070A74053696D756C6174696F6E200A0000
+00002DE9F24F2DED068B04464DF27877ADF5A06D385900
+6818B900F04EFC395908609FEDDA8B385901F019FB00F0
+E1FD0028385919BF50F8481F41F0200150F8481F21F020
+01002501604DF2F9713859095D50F8482F61F3C7120021
+026001710DF59160A6F4C1F20DF58260A6F4BDF2E6A8A6
+F4BAF203460DF5826000900DF5916204F50D51C8A888F4
+33F4BEA82CF486F141F2904A682010FB05FBDDF818055A
+F800000BEB000808F150005CF455F4002800F00C813859
+90F84C1000EBC10000F14E0601A85CF4E8F3024600F067
+F902A990F850008DF8080004F50D5089F426F2814600F0
+5BF9C06C22F422F600F052F920F43AF500F03F00B9F100
+0FB07100F0DD800828C0F2DA809DF8050030709DF80410
+062913D8DFE801F00412060F0A080D00002009E0022007
+E0062005E00521717007E0F19403B07C8000072000E003
+20707009E07178052906D19DF80510891F09293CBF2030
+307001A90DF5916003F0DAFA18B1707840F0100011E001
+A9E6A803F0D1FA18B1707840F0200008E001A90DF58260
+03F0C7FA18B1707840F0300070709DF808008DF80C0008
+F150002FF48CF201466B4603AA2046D7F4C8F381469DF8
+000040281BD100F0F9F8DEF4DDF50146B4A807F0D9FA02
+A9B4A840F493F508B149F0400902F0EEF90146AAA807F0
+CCFA02A9AAA840F486F508B149F080095FEA090007D002
+A9BEA82DF468F4307849EA00003070B0799DF800100843
+B071707800F03F00707002F0F5FA08F150015FF407F378
+B1707840F040007070DFEDD20A98ED120AB4EE600AF1EE
+10FA44BF40F08000707004F5CC40F830E1F42FF0014604
+A8E1F42FF002A989F462F1B0B102A904A884F423F08146
+D9F8080022F462F500F092F820F47AF48046D9F8040022
+F459F500F089F820F471F401E04FF000087080A6F80480
+385990F84C10491C80F84C10385990F84C00322803D101
+A87CF4BDF20DE0322803DB40F26D1100F0E0FF01A87CF4
+B3F26D1CEDB2322DFFF6E4AEBEA83FF475F2395981F84D
+00385900F148010A791AB10A6842F040020A6002AD0068
+20F471F441EC100B04F580406A46294610308CF49CF3DD
+E902239FED9B9B01F092FB41EC1A0BB0EE4A0AF0EE6A0A
+32F43EF32FF46EF4DFF8D44B206020F449F403F0A1F900
+F0E7FD00F02DF801F077FD80B2B0F57A7F02D12068401C
+2060DDE9002351EC180B20F494F301F068FD01212FF41D
+F26060C8A8A6F4E1F4E6A8A6F4DEF40DF58260A6F4DAF4
+0DF59160A6F4D6F40DF5A06DBDEC068BBDE8F18F000000
+000000E03F53EC182B20F472B3DDF818055AF800005844
+704704F52A40A83070472DE9F043044604F50D598DB00D
+464846E0F48EF7002838D000220021284658F491F703F0
+D5F88046687970BB484684F47BF029468AF4D4F54DF6A0
+07385DC8B14846E0F475F7A979E0F476F760B129466846
+3FF4B9F74846E0F46AF76946A2F487F0684679F456F248
+4691F4EFF6294691F49CF301203855B8F1000F05D13046
+A5F454F408B100F003F80DB0BDE8F0832168D1F8C41020
+4608470000F8B504460025072600274DF2B4700059DBF4
+20F23946E0F449F728B16D1C022D01D30020F2BD3E467F
+1CFFB2072FECDB304689F4CFF1020009D004F580409FED
+771B9FED780B002110308BF429F50120F2BD000070B504
+4646F6243186B00120085500F09FFB00B304F50D552846
+8EF4CBF5E1F4CDF510F0F1940340808000480F11D12846
+B3F475F1060009D06946DFF8700403F0B0FF18B1694630
+469FF489F5284607F0CEF9204602F089FF00F00BF82046
+FFF7A8FF4DF2B47004210059D1F420F206B070BD2168D1
+F8CC1020460847000070B505460024A87968B105F11000
+C2F42DF52EF4BDF330B9A868401C0B28A8601AD3012418
+E0A879AC60A8B105F5804610363046A5F4C6F370B13046
+A5F4C8F347F2E4714959401ADFF8501D884203DB002128
+4602F098FE204670BD799488320000000000408F402DE9
+F043814609F5804510359DB02846A5F4A4F3002420B128
+46D9F4A1F4804600E0A04609F52A46A8363046DEF4E2F3
+0146684607F0DEF869460AA82CF48AF50AA82EF471F308
+284846BF4109F5D645D6F4B4F7FF0F283540B12846B4F4
+0AF00078012814BF0120002007433046E0F4B5F61F28B6
+41F643F60F8FBB4DF2787050F8090000281EBF90F84810
+01F0010111EA080F24D0416B006BDFF8A835012220F440
+F11CD247F2E07010F80900B8B9DFF8840CDFF8843CC168
+8068002220F40DF10DD82846BFF495F70078092807D028
+46B3F4CFF7007803281CBF002E012420461DB0BDE8F083
+FCA9F1D24D62503F00000000000000002DE9F041044604
+F5D640ADF5047D2830B3F4B4F704F558450078012818BF
+002015F8D71F002900F0FA80E978002940F0F6804AF690
+21095D014214D0DFF8006C306910B900F0FCF830612046
+D6F43AF718B1012068700020A87047F2E170005D10B901
+20E870E0E000F0EAF83169401A41F289318842F6D301A8
+2BF453F606210BA82BF467F600F0D7F804210BA82BF461
+F600F0D1F8D6E9020104F55747B0370122DFF8A43B20F4
+9DF000F2808066A8A5F45EF748A8A5F45BF72AA8A5F458
+F7024666A8009048AB04F50D510CA888F4D3F00CA8A6F4
+EEF205212AA8A6F480F0B3F44AF088B1052148A8A6F479
+F0B3F443F050B1052166A8A6F472F0B3F43CF000F00100
+80F0010801E04FF0010803212AA8A6F465F0B3F42FF088
+B1032148A8A6F45EF0B3F428F050B1032166A8A6F457F0
+B3F421F000F0010080F0010000E0012050EA080005D002
+210BA82BF402F600F072F84DF6DC00015B10202EF49AF7
+4DF6A4010853D7F4D9F6A8B138680068D0F800C0DCF848
+C0022302220121E04738680068D0F800C0DCF844C00523
+05220121E047012030700120E8702AA8A6F489F248A8A6
+F486F266A8A6F483F27868DBF43AF0A4F482F7014631A8
+2BF4B8F504F55845E0350146284652F42FF701A90BA852
+F401F70BA928462EF4F19403D083800025F731A90BA82F
+F409F304F5EE44E8340EE00BA902F031F96946284640F4
+42F218B169462046E0F457F50BA82FF404F30BA82FF403
+F30028EBD02046E0F450F505E020B9E87810B1204600F0
+0FF80DF5047DBDE8F081000030CF89000BA901A852F408
+B704F11000ABF448B4F8B50646DFF8F049002006F55745
+2061B03506F5584702F0DFFCA4F42BF7014606F55840E0
+3052F4DDF6002007F8D80F3046D6F423F608B100207870
+06F5EE40E830E0F417F5B8884DF6A40188530020B87020
+7888B1286800680668B66C012301220121B04728680068
+05686D6C052303220121A84700202070F1BD0CCC910035
+DC81003CF60000C8C89100F0B583B004460020CDE90000
+04F52A4601F008FE6A46DFF82C1DC2F4EBF52046FFF7D4
+FD8F360746707800284DF2B07538D1307818B12046FFF7
+FCFD00B98FB301207070285900281CBF006800284DD002
+68D2F8B02001219047D7F4F5F5002844D04DF6D700005D
+00283FD14DF640064FF47A71305B90FBF1F22859006807
+68BF6CD3B2D2B20121B847305BB0F5FA6F2CDD28590068
+05686D6C052305220121A84723E0707808B32046D2F455
+F387F0010108421AD0002070702046FFF75AFF28590028
+1CBF006800280FD00268D2F8B02000219047D7F4B7F538
+B1285900680568AD6C012301220121A8472046FFF71DFE
+F7BDB8C991002DE9F0468246BDB00E461446994601F049
+F850B12BF478F531680FF2B002019100944B4615212FF4
+77F430680027451CB9F1040FEDB208D10F2D43DBA5F126
+0009280DD2203D0127EDB25046D5F45AF70AF50D50A6F4
+42F15FEA000A0BD131E0042102A82BF4C2F331689DF808
+0051318842EAD226E09FB119A831468C2220F4F9F7681E
+19904B46224619A901A894F49FF701464FF0FF30009003
+4600220BE04B462246314601A894F492F74FF0FF310091
+0B46002201465046A3F423F501A8ABF418F63DB0BDE8F0
+8600005365744C746F45706820476E7373282575292047
+70735765656B202825752920536174496428257529200A
+0010B52DED088B02F0BDFD86B000F04CF8B0EE41AAF0EE
+61AAB0EE42BAF0EE62BAB0EE438AF0EE638A04D153EC1A
+2B1FF461F622D000F03EF8F8B100F027F8684688F402F3
+51EC180B00F07EFD38BF9FED528B04F52A400322B0EE48
+0AF0EE680A6946A830DEF418F0B0EE483AF0EE683A00F0
+0CF82046D4F45DF006B0BDEC088B10BD00007C92890000
+005940B0EE4B2AF0EE6B2AB0EE4A1AF0EE6A1AB0EE490A
+F0EE690A70470000F194036087800053EC192B00200021
+1FF420B604F580401030A5F471B000002DE9F0470446BC
+B00F4691461846ABF419F307281CBF3968FF2982463FD0
+00264D1C0428EDB208D10F2D38DBA5F12600092810D220
+3D0126EDB204F50D58AEB101A839468C2220F439F7681E
+019024AB4A4601A90DE0042168462BF4EBF239689DF800
+0051318842E7D218E024AB4A463946504691F476F50500
+0CD05146404687F4D4F138B15146404687F4CFF1294602
+681269904747F2E271012008553CB0BDE8F08710B500F5
+804410342046A5F41DF0B0F57A7F0CD22046E0F441F301
+2803D10521204606F0DDF8DFF8641D0020487010BD80F4
+0300000000000000794038B5044600F01EF8A5F400F0B0
+F57A7F17D204F50D55284687F49AF52846ABF41BF528B1
+2846ABF417F50168896888474DF630010020085547F2E4
+71085100F005F831BD04F580401030704704F5EE400021
+00F8E11F4170704700002DE9FE4F2DED068B834686B0DF
+F88C0D02F0B8FD0BF5804042F6E062002110308AF4E8F7
+039000249FED618B9FED629B0C9841F290410858682101
+FB040505F1500A9AF800008DF8080002A85BF4E8F50028
+00F09B800D9A02EB841200200021C2E900018146039818
+B1DFF82C0DDFF8A81DCDE9040104AA2946DFF8200D02F0
+CDFDB0EE40AAF0EE60AA53EC1A2BFFF70FFF05D05146DF
+F8040D02F0D9FE81460D9853EC1A2B00EB841800F027FE
+08F1080626F4E1F4C6E9000105F130074A463869306229
+1D584600F084F8F0852A1D5146584600F0E4F8B0850246
+2946584600F036F9C6E9020101220023CDE90023386821
+F481F700F03BFA26F4BDF4DDE900232EF49BF44FF0FF32
+00232EF456F4C6E9040197ED050AB1EE400A00F024FA00
+F0F0FD21F420F7B061B86921F464F700F0E8FD21F418F7
+F061DFED210A97ED070A2EF495F4DFED200A2EF44BF400
+20B06286ED090A08F1380308F13A025146584600F04BF8
+9AF8040003280CBF0120002088F83B00641C50462BF443
+F501F061FB322CC8F83C00FFF452AF0E9804700C980068
+1FF482F600F018F826F46CF4189AC2E9000106B0BDEC06
+8BBDE8F78F0000004A78DEB1410000000080842E410000
+0000B0C9910000007C4253EC192B1FF4E8B438B5084614
+4681680025CA040AD50125490648BF052508212EF46AF1
+00B90CB945F00205284632BD2DE9F04180460D4682B016
+461C46284662F452F0074628788DF80000394668462BF4
+9AF1411C062F218035D8DFE807F004340620242F310001
+202BE003213170F19403F08A80005D30208008F50D50B2
+F41CF440B39DF80010342905DB422903DA9DF900103B39
+01E06FF0070149B206F09EFDC0B10CE004213170C13008
+E05130C0B2801F0521092831700CD220882030208008E0
+062000E00720307003E040F22E4100F054F9BDE8F38170
+B516460024307A80070D460BD5284659F49EF330B12846
+2EF460F310B94FF4806400E00124B068410748BF44F020
+04000708D5284666F483F7002814BF44F4807444F00204
+307AC0061BD5284661F45BF110B144F0400414E0284666
+F470F710B144F400740DE0284659F471F338B1307A8006
+54BF44F4006444F4805401E044F00404307A800608D528
+4661F43CF1002814BF44F0800444F00804B068C10603D4
+800658BF44F01004204670BD00002DE9F8430E46174600
+F50D5083F422F2012206F150018FF455F000F0FDF84FF0
+9442DFF8943D1FF45FF6D6E906231FF4E3F400F0F5F826
+F477F304460D4606F150002EF4F3F2814606F1500061F4
+8AF7062807F0020800F2B580DFE800F004B31504397704
+00380772D4780706D52046294600F0B5F800F0ADF877E0
+B8F1000F59D02046294644E038060ED520462946DFF828
+2D44F6946320F4A4F5DFF81C2DA2FB006744F6946360E0
+780665D4B8F1000F02D0204629462BE0B8063BD5204629
+46DFF8FC2C00F091F8DFF8F42C72E038073DD4780709D5
+B9F1020F2046294658D000F07DF800F075F83FE0B80508
+D520462946DFF8CC2C00F078F8DFF8C42C59E0B8F1000F
+0BD0B9F1020F2046294615D0DFF8B42C00F069F8DFF8AC
+2C4AE0F80508D520462946DFF8A02C00F05EF8DFF8982C
+3FE0F80748D520462946DFF8902C00F053F8DFF8882C34
+E0380712D520462946DFF87C2CDFF87C3C20F442F5DFF8
+702CDFF8703CA2FB006702FB017703FB007723E0F80408
+D520462946DFF85C2C00F033F8DFF8542C14E0380508D5
+20462946DFF8482C00F028F8DFF8402C09E0780512D520
+462946DFF85C2C00F01DF8DFF8542CA2FB006702FB0177
+A41BBD4103E040F2F24100F014F820462946BDE8F483DF
+F8342CA2FB006701237047DFF8282C012320F4FDB40000
+002320F4F9B400000FF20400F7F750BC70617463685F67
+756C705F6D6963726F5F6E61762E6370700000000010EE
+100A21F444B50022DFF8EC3B1FF415B30000C127090010
+CF89000000364000003B402DE9F84F2DED028BADF6086D
+044604F580400D46103004F55746A4F4FDF4783638B930
+6800F0B8F93068816C21F0200181640AA895ED0A2B95ED
+081B95ED060BF19403808E800087F43EF704F52A4000F1
+A8094846E0F42BF0014640F6A8506844602220F4CAF304
+F5D64000F128084846DFF431F7032834D104F558474837
+3846E0F419F068B300F09AF90078042813D000F095F900
+7805280ED000F090F90078062809D000F08BF900780728
+04D000F086F90078082802D13846E0F400F0D5E90C0100
+F080F90CD205F130000090019505F1280305F1200205F1
+18013846DEF406F70020059004F50D573846AFF499F705
+F5F87100918246D5E90A0121F471F40099009101EE100A
+D5E90801B0EE418A21F467F40099009100EE900AD5E906
+01B0EE481AB0EE608AF0EE418A21F459F400EE100A0DF1
+140B009904F5584053465A46B0EE681AF0EE480AA830DE
+F4EDF700F035F9014604F5594009780830012903D12946
+D6F495F101E0D6F486F129462046D3F44EF12268D2F8E0
+202946204690474DF6A20095ED0C8B005B1FF4C3F30246
+0B4651EC180B1FF425F20FD30022DFF80C3A1FF41FF20D
+D24846E1F48DF0042808DA4846DFF48EF6022803D1A86C
+40F0030002E0A86C80088000A86400F0ECF84FF0000838
+B100F0E7F800F0E9F806A8B2F428F28046022100F0DFF8
+48B1022100F0DBF800F0DCF806A8B2F41BF258FA80F8B8
+F1090F0BD33846ABF4FBF2A2F4C3F428B1384682F4FFF7
+A4F4FFF300E000208DF8080004F11000CAF4B9F12DF4DB
+F3ADF80A0004F110008FF46FF64AF690208DED030A005D
+DFF864798DF8100029684DF804CD0DF540605DF804CBD0
+ED820A4DF804CD90ED810A5DF804CB204602F02CF84DF8
+04CD0DF5406080ED810A48465DF804CBD8F4C3F4014640
+F6E8406844C1F491F1C1F405F140F6E84087ED000A6844
+C1F402F140F6E84087ED010A6844C3F405F0FFF793FEDF
+F8F828DFF81C391FF4ABF121F48BF3B860DFF4FCF640F6
+A8516944009104F5EE43B03302AA2946E0F45DF12268D2
+F8D02029462046904700208DF80500DFF4E6F60DF10501
+0091A31D0022294606F0D2FC9DF80500F0B17068026812
+68294690471AA84FF4486120F437F210A8282120F433F2
+00208DF8040010A8009001ABF9681AAA2046FFF79AFB9D
+F8041010AA1AA8FCF7FCFD04F5EE401830DBF4CBF24DF6
+42010120085529462268D2F8D820204690479DED0A0B85
+ED060B29469DED0C0B85ED080B20469DED0E0B85ED0A0B
+2268D2F8E42090470DF6086D01F093B900000268011D20
+46D0F49BB600000021384686F4DCB4014606A80A68D2F8
+8C2010474046BEF479B700000022DFF8983E1FF40BB100
+0018CF8900F19403109280002DE9F845044604F52A402D
+ED048B00F1890AADF5826D9AF8020000281FBF04F55746
+7836706B00280D4600F0AE814FF4D67299A968465EF4F3
+F0022200215EF4D7F20122012100F0BAF90822032100F0
+B6F9A86CC0F3400100F0BAF9A86CC0F3800100F0B5F995
+F8480000F0010100F0AFF9A86CC0F3C00100F0AAF9A86C
+C0F3401100F0A5F9A86CC0F3001100F0A0F904F5EE4000
+F1C408012298F8100000F0010100F08CF99AF800008007
+05D53068806C0122C0F3801101E00122002100F07EF9A8
+6CC0F3C01100F082F9A86CC0F3402100F07DF9A86CC0F3
+002100F078F9D5E90C011FF4F6F181B20A2200F067F929
+68202200F063F905F5F8779FEDD18B386821F4CBF200F0
+4FF91FF4E3F100F04FF9786821F4C2F200F046F91FF4DA
+F100F046F9B868DFF8B47621F4B7F200F03BF91FF4CFF1
+00F03BF995F84800C00725D5D5E906239FEDC19B00F029
+F91FF4C1F100F037F9D5E9082300F021F91FF4B9F100F0
+2FF9A86CC0F3400078B1D5E90A011FF4AFF100F01BF997
+ED000ABDEEC00A10EE101A102289B200F018F9A86CC0F3
+001090B1D5E90E2300F0F9FA1FF499F100F005F9786821
+F478F200F0FCF81FF490F181B2102200F001F9A86CC0F3
+C00090B1D5E9102300F0E2FA1FF482F100F0EEF8B86821
+F461F200F0E5F81FF479F181B2102200F0EAF8D8F80000
+21F455F200F0D9F81FF46DF100F0D9F8D8F8080021F44B
+F200F0CFF81FF463F100F0CFF8D8F80C0021F441F20022
+DFF87C3C1FF412F01FF456F100F0C2F8D8F8040021F434
+F200F0B8F81FF44CF100F0C2F8A86CC0F3401000283FD0
+2A6804F580410123103110A88AF499F610A90CA888F42F
+F20CA909A896F4DFF00A9FDFF8340C97FBF0F80998C0EB
+C00008EB000409A8A5F468F453EC102BDFF8141CDFF814
+0C00FB187800201EF4D7F700F081FA00F07BFA4FF47A77
+07FB0807DFF8FC0B874203D3DFF8100CC719641C1022A1
+B200F07EF82022394600F07AF8306850F8481FC1F38011
+00293FD09AF8001089073BD50079332803DB4FF4BB61FF
+F77DFC306890F84C1000F062F8306890F84D1000F05DF8
+002423E005EBC40000F14E070822397800F054F8797800
+F050F8B7F902001FF404F100F040F81FF4D4F000F040F8
+B7F904001FF4FAF000F036F81FF4CAF000F036F8B97900
+F039F8641CE4B2306890F84C008442D6DB68465DF497F7
+684660F44CF6C408002506E0082168465EF4FDF02EA968
+546D1CADB2A542F5D3706B03689B6A2EAAA1B298470DF5
+826DBDECF19403A0958000048BBDE8F18500007C928900
+53EC1A2B51EC190B1EF450B753EC182B1EF44CB701B210
+2268465DF4EFB70000082268465EF416B1014620226846
+5DF4E5B70000012268465EF40CB12DE9F041ADF5F66D04
+4656A9DFF8780D0FF2D40807F092FA054600261CE056A8
+382101FB060704F58040396B01AA10308CF454F5D7F46C
+F000F060F83946FDF7F5FD00F01BF830B12AF44AF506AB
+424615212EF44DF4761CAE42E0DB0DF5F66DBDE8F0818D
+EDB5A030CF890000000000000050400000000000006041
+15202EF423B4000080B500210020D6F421F70168896888
+47006800281CBFBDE80240FFF7AFBF01BD00B5E5B001AA
+56A9DFF8D80C07F074FD9DF88C0188B1D7F429F000F01D
+F856A9FDF7B2FDFFF7D8FF38B12AF407F506AB0FF21002
+15212EF409F465B000BD0000F7C6B03E4F4E434849505F
+4E4D45415B305D5B25730000004FF4A071009106AB01AA
+70472DE9F24F04462DED048B4DF2B070F2B0005900281C
+BF0068002892464FF0000800F03F8104F5804000F1100B
+0122594654A88AF433F5DFF8442C002154A888F467F29D
+F8D81181F0010101EA00090122594636A88AF422F536A9
+03A888F4ACF05846A4F481F00025002780B103A895F437
+F2054603A895F435F253EC102B0020DFF83C191EF470F6
+00F016F9074604F50D563046D9F450F606AA08A9A3F4E2
+F222A8A1F41BF33046AAF452F722A9A2F48DF13046AAF4
+4CF702A9A2F4B7F15846A4F452F0002805D03046AAF441
+F7A2F409F100287AD00298B0F5616F76D20AA8D9F4DCF5
+9DED220B8DED0A0B0CAE9DED240B8DED0C0BDDE908239D
+ED260B86ED020B9FED808B9DED280B86ED040B00F0CFF8
+1EF46FF73083DDE9062300F0C8F81EF468F77083B58347
+F288503762005930B3E0F439F207469FED748B386821F4
+3DF0FFF7C1FE1EF455F730859FED719BB86821F433F0FF
+F71BF91EF44BF7B085786821F42BF0FFF7AFFE1EF443F7
+7085F86821F423F0FFF70BF91EF43BF7F08501208DF884
+002CA8A5F4DCF3014658468AF47AF01DA92CA8A5F466F4
+18A958468CF472F6BAF1000F05D004F5D6400AA92030DA
+F46BF604F55740B0300AA94068E0F4F6F12CA8B1F445F5
+0EE09DF8D80158B10AA8D9F462F5014604F55740B0308D
+F884804068E0F4E3F12168D1F8A81020468847002854D0
+68460021002206C05846E0F4DBF120B15846E0F4DBF100
+040190B9F1000F42D003A895F463F100F0E7FB53EC182B
+DFF8A80DDFF8A81D1EF49BF500F045F800F03FF8009040
+B951ECF1940330998000180B0122DFF8903D1EF44EF598
+BF6D1C002154A887F4FEF551EC100B0022DFF87C3D1EF4
+65F534BF4FF480400020AA04019950EA924040F4004008
+4301904DF2B070005904685846A3F474F7014620462468
+9DF8D831D4F8A0406A46A0474FF0010872B04046BDEC04
+8BBDE8F28F000051EC180B1EF458B541EC100B2DF4E6B6
+0022DFF8C43D1EF421B6000078DEB14100004F91809698
+000046C323002D310180841E0040420F00000029F90F26
+02000094357700E1F50500005940B8C9910000C2631A00
+00000065CDCD4100000000000070400000000000009040
+00093D0000BCA06565CDCD41DCA54C402DE9FA472DED06
+8B0446AEB004F52A40ADF5805DA830D8F40BF0014640F6
+F8706844C0F4D9F4C0F4F7F7B0EE408A16A82AF464F240
+F658602F230822DFF8201D684426F431F304F558454FF0
+0008E035CDF80880284651F4DFF338B100F070FBA3F418
+F40146284651F4CCF3DFF8F41C3220486047F2E176305D
+50B100F060FB07F0ACFB28B1DFF8DC1CC1F80480012000
+E000209FEDDD0ADFF8C81CB4EE408AF1EE10FA087040F1
+68820DF580512046D1F8D010D3F43AF10DF58050D0F8D0
+70FEF722FAE0F44EF3A7EB0009DFF8980C814514D200F0
+10FDC6F4BCF378B140F6F8706844C0F49CF751EC100BDF
+F87C2CDFF87C3C1EF462F498BF012700D9002703A8E0F4
+33F30598002F12BF40F0010040084000059003A9059840
+F01800059006A8E0F42DF300F0F3FA2CF46DF6034606A8
+009040F6F871DBB22A4669440DF56460E0F423F3014604
+F5EE40E83007F063FC305D28B900F0F3FA07F03FFB0646
+00E0002604F5EE40E830E0F41BF301463EA8DAF447F60D
+F563600025019054E0DDF8300E482101FB05074AF69020
+07F1280A005D18B19AF80400042844D0002207F1200168
+462DF431F307F120004BF45BF078B1002E37D19DF80000
+8DF81800DFF8A00B007828B100F0BAFA06A907F0DDFA48
+B340F65860684400EBC800011D6A4606A85AF44AF440F6
+58606844DAF8001040F8381016A807F120012BF414F59A
+ED000ADFED820AB4EE600AF1EE10FA08F1010808DB9AF8
+0400012818BF032802D10298401C02906D1C0198B0F908
+008542A5DB40F65860DFF8383B082241466844A0F48BF7
+0198B0F908000B2801DB00F070FA002625E040F6586068
+4400EBC60504F51940291D0830DBF45DF4C0B129790170
+00F1080108308A6842F002028A608A6842F004028A6042
+F008028A6042F010028A6042F040028A6042F080018160
+761CF19403C09C80004645D7D30DF5805004F51941D0F8
+D000E8310DF58052C86104F58041D2F8D0200123103120
+A88AF459F20CA894F4FCF6014620A887F484F400F0F2F9
+12A894F455F5014620A887F4ABF4B0EE409AF0EE609A0C
+A894F45EF700F0FAF99FEDDDAB80ED000B53EC182B51EC
+1A0B1EF494F320F474F500F0D0F9886012A894F428F600
+F0E6F953EC192B80ED040B51EC1A0B1EF482F320F462F5
+00F0BEF90AAB886104F5804108AA10310FA88AF475F50D
+F58050D0F8D0001EF4EBF4DDE908231EF4F5F400220023
+1EF44BF341EC180B23D253EC182BDFF8FC09DFF8FC191E
+F45CF341EC180B20F43AF509EE100A00F0CAF953EC182B
+1EF434F303D200F0A9F980ED029A00F0B9F953EC182B1E
+F429F303D200F09EF980ED069ADFF8C009814511D300F0
+B0F900F05CF900F086F900F074F9886000F0A1F900F053
+F900F07DF900F06BF988610DF580504EF66021D0F8D000
+9FEDAA8B884238BF9FEDAA8B002000909FEDAA9B88E000
+BF0150C3470100A040DDF8300E0099482202FB010604F5
+194006F120010830DBF435F45FEA000970D0D6E9000109
+F1180520F4E0F4E860B0EE481AF0EE681A96ED020B2DF4
+1DF200F043F928610127D6E9040181F00041C5E9000106
+F1200029F4E3F7824604F50D508CF49EF67AB251468DF4
+26F3C0B17AB206F1200106A82DF4BFF10DF580520146D2
+F8D02004F5CC40F83008F0CDFA51EC100B81F0004120F4
+A9F409EB8701C8627F1C032FD5DBD6E9060120F49FF4A8
+6096F82C00042809D1DFF8600DDFF890182861DFF85C0D
+A86001204870B06A20F4D5F453EC192B1EF479F31EF4EB
+F36884706A20F4CBF453EC192B1EF46FF3FFF743FD2884
+96F82C0089F83C000020C9F804000098401C0090019900
+98B1F908108842FFF675AF00F015FF1CBF0168002925D0
+617919BBB8F1000F11D100F0DCF8E0F432F1D8B904F519
+4000210830DBF40DF300F0B1F80020C8614DF2B0700059
+066800F0C9F8DBF46FF33268526F01463046904703E000
+F0C3F800F0D9F800F0F1F910B92046D2F4F1F600F0B9FA
+01460DF57D6005F09CF916A83DF4BDF106460DF57D603D
+F4B8F1864201D200F0A8F800F096F804AA06A9A2F4BCF6
+06468FF44DF178B300F0D4FD0DF580514FF47A72D1F8D0
+10B1FBF2F10818B0F5617F08D800F07EF800219DED041B
+9DED060BA2F431F600F075F8A2F471F6014600F0AAFE1C
+BF006800280DD042F21072914209DA03689DED041BD3F8
+9C309DED060B00223146984700F060F868B100F04FF8C5
+F4F1940350A0800045F240B10DF5805116AAD1F8D01020
+46D4F438F00CE0029800900DF5805140F65863D1F8D010
+6B444246204600F0EAFD2046D5F43BF02EB00DF5805DBD
+EC068BBDE8F3878DEDB5A0F7C6B03E0000794041EC110B
+9FEDB30B2DF444B10000904000408F4080510100005C26
+0548AFBC9AF2D77A3E95D626E80B2E113E000000000000
+E03F00A4D9FA04F51941E8317047B0EE408AF0EE608A70
+47000004F5D6402830C0F437B7000051EC100B20F48EB3
+04F50D50D9F490B104F50D50AEF4A6B604F51940E83070
+4704F519400830704704F5EE40E830DEF4C3B6000004F5
+2A40A830DFF4D5B5000004F51940E830806920F4B4B304
+F51940E830806820F4AEB304F5194001210830DBF418B2
+04F55740B0304068D9F45AB12DE9F84F2DED028B0446B8
+B08846914600F000F9014607A805F0B6F807A83DF4D7F0
+00260A2847F2E077B2EE0E8A80F2828007A911A82DF425
+F4DFF8DC5522E09DF81000022808BF0E220AD00020ADF8
+080002AA03A900F048FA00B15646BDF80820694601A8D7
+F45DF4014640463EF4A3F1694648462BF431F204A87AF4
+DEF011A82DF40DF411A82DF40CF4002840F0B28011A900
+F025FA00F0B8FC01466A4604A8A3F4F9F011A901A82DF4
+F1F3002201A903A82DF404F068464AF42FF52978084210
+D068680B28D7D211A901A82DF4DFF3012201A906A82CF4
+F2F7024603A905A85AF425F10023002203A904F110008E
+F484F30E21ADF80A10017B890704D490ED130A00F04CF9
+B7D4694648463EF4F9F20028B1D1385D761C002806F101
+0A8ED00DF10A0203A900F0DFF900B15646BDF80A2095E7
+B2464DF6A40501E00AF1010A3A98824556D2449800EBCA
+00011D684640F40DF30E21ADF80A100146FFF727FFDBF4
+F3F18346694607A83EF4CEF20028E4D19BF83C000428E0
+D0449800EBCA0000F00BF9DAD400F048F81F28D6D26946
+48463EF4B6F20028D0D1694648462BF49CF1761C385D06
+F1010B60B10DF10A0200F099F900B15E46285BB04228BF
+BDF80A200CD216E0ADF8080002AA00F08BF900B15E4628
+5BB0420CD3BDF80820694601A8D7F49EF3014640463EF4
+E4F0285B8642A3D338B03046BDEC028BBDE8F28F000060
+B31E0030D98900FA7E6ABC7493883F04F110008EF4F6B6
+04F52A40A830DEF4A5B500002DE9F24F2DED028BA8B004
+46349F2A99009790469946FFF7DFFE4DF6A4058346285B
+834556D200F0B3F8014668462AF4D7F3022114A829F4B3
+F501460AA850F4FDF60AAA69461EA83CF49CF700F0A0F8
+F19403E0A380000146022268462AF4F1F304210AA829F4
+9FF50246694614A83CF48CF7DFF88063B07898B94DF6D7
+00005D88B914A83CF493F700281FBF04F5EE40E0304078
+002806D01EA83CF488F70D2801DB012000E00020B07000
+F06EF8C5F41AF738B9FDF771FDDEF445F541F289318842
+02D3B2EE048A01E09FEDC78A4FF0000A01E00AF1010ACA
+4549D20E20ADF8040007EBCA00011D684640F430F20146
+40463EF4F6F10028ECD1B07840B168464AF403F420B107
+EBCA0000F036F8E1D4307830B168464AF4F0F310B17068
+0B28D8D2694640462BF4C8F047F2E0700BF1010B005D18
+B968465FF4CBF410B10020ADF8040001AA00F0BEF808B1
+0BF1010B285B58450CD3BDF80420694602A8D7F4D0F201
+462A983EF416F0285B8345B1D328B0BDEC028BBDE8F18F
+90ED000AB4EE480AF1EE10FA7047000004F5D6402830C0
+F4A7B4000004F11000C0F4ECB22DE9F0410446CAB00D46
+04F50D58164641462CA886F404F004F55841E03106A82D
+F450F28C4F0EE0D8F464F704A906F027FE10B178680B28
+3BD303A879F41EF706A82DF44DF206A82DF44CF2002860
+D106A904A82DF43CF20E20ADF8080006A900F05FF80022
+694601A82CF449F64046A3F468F1014601AA03A8A2F42D
+F703A8A3F464F128B103A92CA800F06BFE0028D3D104A8
+4AF462F358B14DF2B470397800590029C0D1D8F425F706
+F011FE0028C3D147F2E070005D30B102AA01A900F034F8
+BDF8082010E09DF80C00022808BFBDF8082009D00020AD
+F80A000DF10A0201A900F022F8BDF80A2001A96846D7F4
+39F2014628463DF47FF701A930462BF40DF02846D7F432
+F2002896D003A879F4B5F62CA8A4F434F14AB0BDE8F081
+000019A968462DF4D4B16946204600E00000F8B50F4604
+4638788DF8000015464DF2B47000260059D8F4D5F66946
+06F098FDF8B12046D4F41CF520B1288840F48060288001
+26384660F46BF2042809D13A4841680A2905D22A8842F4
+00722A80491C41604DF6D900005D18B9288840F0010028
+803046F2BD00000BEF349377BDBB40FE7422410000F03F
+F0B505464AF68F20DDB0405D002400280E4644D14DF2B4
+704059D8F497F60621DEF4C0F300283AD02148407805F5
+EE47E037002804BFB878002808D10621684629F41AF469
+46304650F494F501243EA8A3F420F520A8A3F41DF50346
+002000903EAA05F50D5102A885F498F602A8A4F4B3F006
+2120A8A3F445F6B0F40FF640B106213EA8A3F43EF6B0F4
+08F608B10120387020A8A4F4A0F03EA8A4F49DF02046F1
+940370A780005DB0F0BD000034420000E03F39B70F007C
+928900C0D401009B99999999992B4065B10F00FCA9F1D2
+4D6250BFC12709002DE9F04F044604F52A40ADF5257DA8
+30DFF412F58DF8060000262046D4F418F18DF805000027
+B9468DF80490FFF7D6FD01469AA804F08CFD04F52A408F
+30B846407800284DF6A40014BF05250825005B18280EDB
+04F55840E0303CF49DF5212807DB04F52A408F30407800
+2814BF08250C257CA8A3F4A6F45EA8A3F4A3F440A8A3F4
+A0F400F0AEF902BF4DF63000005D002832D07CA800905E
+AB40AA04F50D511AA885F413F61AA8A4F42EF000F086FB
+E8B100F09DF9B0F5E16F13D8B0F5167F15D902217CA8A3
+F4B5F5B0F401F68246022140A8A3F4AEF5B0F4FAF550FA
+8AF0102804D24DF63001012601F8049000F075F9407808
+B1782001E04FF4167002909AA919A82DF4A2F013E04FF0
+010A5BEA0A0001BF7F1C08F101089DF80000022808BF09
+F10109684679F46CF519A82DF49BF019A82DF49AF00028
+43D1FFF7B4FE00F042F900F046F900F032F96846A2F4C1
+F74FF0000A0028D346D6D000F02EF902998842D3D26946
+04F50D5004F03AFE00284FF0010BCAD169467CA800F0B6
+FCB8B969465EA800F0B1FC90B900F016FB78B99DF80000
+0628B9D0694640A800F0A5FC00281FBF04F5EE40E03040
+780028ADD04DF63001684601F804A079F422F5012683E0
+002EFCD104F55841E03119A82DF43CF024E019A904A82D
+F43DF004A99AA83DF473F7C0B9FFF75EFE00F0ECF800F0
+F0F800F0DCF86846A2F46BF748B16846A2F467F720B100
+F0D8F80299884200D37F1C684679F4F5F419A82DF424F0
+19A82DF423F008B9AF42D4D3A8453EBFAF4201208DF804
+0000F0D4F802BF4DF63000005D002841D07CA8A3F4EBF3
+07465EA8A3F4E7F350FA87F740A8A3F4E2F357FA80F707
+2F02D3FFF77EFBE0B9182F0BD200210FA829F497F204F5
+58400FA9E03062F4DFF6002846D100F097FA58B1002727
+E0022F23D100F0A0F8807808B37F1CFFB2072FF5DB00F0
+98F8407868B1D5F45EF350B1FDF789FE38B17CA8A3F4B1
+F318B904F5EE41E0314870FDF716FF88F44CF730BB5FEA
+090024D0012022E0062FDDD0394605A829F45EF204F558
+4005A9E030DFF49EF30028D1D100F06EF8394680780028
+14BF5EA87CA8A3F492F4B0F45CF40028C3D04DF6300100
+2008550126C1E700209DF8042040EA06011143C9B291B1
+C0B200281FBF04F5EE40E0304078002823D12046D3F4E0
+F4F8B99DF80410204600F092F919E0FDF7CFFED6F4F194
+0300AB8000ADF7A0B14AF68F209DF80610005D81F00101
+08409DF80510084208D0FDF7BEFE88F4B2F600F0010080
+F0010000E0012047F2E071085540A8A3F4B6F65EA8A3F4
+B3F67CA8A3F4B0F60DF5257DBDE8F08F014603AA6846A2
+F453B400000122694604F50D5085F4CAB50022694603A8
+2CF45BB3000004F50D50A2F478B604F5EE40E030704704
+F5EE40E03040780028704704F58040103088F4BFB70000
+2DE9F84305464AF6A62005F52A47405BA8370B280E4638
+4604DBDEF4ABF0022806DB03E0DEF4A6F0032801D10124
+00E0002447F2E1794DF6300819F80500002804BF18F805
+00002806D13846DEF476F11F28A441E443E40F0C2E07D2
+4DF6A400405B8642BF41FF43FF0F00E0012719F8050000
+2804BF18F80500002809D005F50D50AEF41DF108B1052E
+01D2380000D0012005F52A41774B11F88F2F5B781A433A
+40104306BF487800282046BDE8F28395BFD633FAED6B3A
+2DE9F043ADF53D7D04460F4690461E4624AA982101A83C
+F4CFF305A829F452F119A829F44FF101A8DFF4B0F20297
+204604F5EE45FFF78AFDE0354DF6A4096878002802BF4D
+F63000005D00280BD1DFF88005006887423EBFC49839F8
+041088423CBF0120287041462046FFF76DFF20B3009643
+4605AA01A92046FFF75FFB01A8DFF488F2404506D301A8
+DFF483F239F80410884201DB012700E0002719A92046FF
+F7ECFC87F0010108420BD019AB05AA01A92046D2F444F4
+04E005AA01A92046FFF708FC2EB304F52A4750373A4605
+A90FA8DFF463F20FA83CF404F3002804BF287800284DF6
+D90601D1305D88B905A9384650F46BF200F013F81CBF00
+68002807D0207928B901A9204600F00FF80120305501A8
+54F4C8F70DF53D7DBDE8F0834DF2B07000590028704700
+00F8B5064606F557450C4655F8B00F00281CBF00680028
+3AD006F52A40A830DDF4B7F7070018BF012700F034F805
+21DEF461F0384204D1052120463DF4F7F303E021463046
+D3F4BAF000F024F8012200218CF48AF310B920463DF4C4
+F30C48007840B900F017F806F007FA18B1042120463DF4
+DCF301220E2120463DF425F3286800680268126F2146BD
+E8F8401047F1BD7C9289006868D8F401B300002DE9F843
+044604F580402DED068B00F11008C0B04046A2F417F547
+F2E47604F52A473159451AA8373846DDF463F70328ACBF
+47F2305041F28830A84202DB3059002877D14DF2B47547
+F2E3792859CEF45FF30528B4BF0120002009F8040000F0
+6FF838B13846DDF445F718B1002009F804005FE0F19403
+90AE800019F8040000285BD02859CEF447F3411C2859C9
+B2CEF43EF3D5F432F100284FD1684693F419F601224146
+04A889F466F1694604A886F49CF3FFF70AF90122414622
+A889F45BF142F6E062002122A804F5D64586F48DF62035
+9FEDBF9B98B14046A2F4B8F48146684693F46CF600F032
+F80746FEF753FB1DF403F402464B46B9B22846D9F4D7F2
+684693F45CF600F022F8074600F0E7F8DFF800331DF4DF
+F41DF4EFF38146FEF73AFB1DF4EAF302464B46B9B22846
+D9F4E0F24046A2F48BF4305140B0BDEC068BBDE8F18300
+004DF63000005D7047B0EE40AAF0EE60AA684693F42FB6
+0000084611461A46FAF703BF00002DE9F84304462DED02
+8B04F55745BAB055F8AC0F00283AD000F0B0F8002836D0
+22A8D8F4F3F12A68014610461268926B904724AFB88B1D
+F4CBF300229E4B1DF44BF28046386A89461DF4C2F38D4A
+8E4B1DF442F242464B461DF410F341EC180B0122314604
+A889F4D1F004A9684686F45BF4684693F42AF651EC100B
+53EC182B1DF4B4F341EC180B9DF8E40000286BD000F070
+F800231DF4DFF165D87B4B1DF4FFF161D2A868D8F4F9F1
+DEF4D5F500F00106A868D8F4F2F1DEF4CEF5000900F001
+05B86B6FF00041884214D000F052F86F4B1DF4E5F104D2
+2268D26E35A92046904751EC180B00F0C9F804D2226812
+6C30A9204690478EB900F03CF8654B1DF4CFF10BD22168
+97ED043B896F97ED022B9DED241B9DED220B2046884725
+BBB7F91A0008B31DF44AF305460E4653EC182B00205949
+1DF4D0F12A4633461DF49EF20122564B1DF488F141EC18
+0B98BF9FED578B51EC180B1DF405F32368B7F91810DB6F
+02B2204698473AB0BDEC028BBDE8F183000051EC180B00
+22704704F5804610363046A2F4A8B32DE9F8432DED048B
+F0EE408A82B08046B0EE608A0C46B0EE080A2CF45DF108
+F5D6462836B0EE409A3046B1F41DF00078012805D03046
+B1F417F00078072801D1002700E00127344E706808B900
+2507E0201A364988428041C043C00F80F0010501208DF8
+0400022201A968462CF458F008F50D59484680F46BF700
+2269468CF49FF530782843384370EE289A1DD1B5EE408A
+F1EE10FA18DDB4EE498AF1EE10FA13D508F52A4000F1A8
+052846DDF490F63D280AD3484680F44BF7B0EE680A07F0
+65FE7460284607F075FE02B0B0EE690ABDEC048BBDE8F1
+830F490870704700000000000000408F4002460B4651EC
+1A0B1DF4B8B200220E4B1DF40EB1FCA9F1D24D62503F40
+1277410075524100A40F410000E03F00D07240F1940320
+B28000A8C991007892890000408F400000000000D07240
+E1930400007522410446B0EE409AF0EE609A704700F580
+40103003F0BBBB0000082101700021417081808170C180
+704738B500F02BF840B92846A2F401F320B91D210FF258
+00F5F711FA00F019F8BDE83440A8F4D9B7000038B500F0
+17F840B92846A2F4EDF220B927210FF23000F5F7FDF900
+F005F8BDE83440B0F421B10000206F2A78697800EB0210
+70470446024800780D467047000016CC91007061746368
+5F676C676E73732E637070000000000821017000214170
+81708180C180704738B504460D466068B5F90610401860
+60B5F90810A0684018A060B5F90410206840182060B5F9
+0A10E0684018E060B5F90E102069401820612868A061B5
+F90C10206A40182062B5F91410606A40186062B5F91610
+A06A4018A062298BE06A10FA81F0E062698B206B10FA81
+F02063606920B92868B5F90E10401A606140F2DC512868
+884203D2302121481EF427F1206960B1B5F90E1000EE10
+1A00EE900AB8EEC00AF8EE600A80EE200A01E0B7EE000A
+D5ED040A60EE200AB7EE001A31EE400A94ED071A40EE01
+0AC4ED070A31BD00000F4991EC0C0B80EC0C0B7047D0E9
+0E230B49C1E90023D0E91023C1E90223D0E91423C1E904
+23D0E91623C1E90623D0E91823C1E90823D0E91A23C1E9
+0A237047D8E6890038B504463220009004F5547504F519
+632022294620462DF421F532232022AA49284624F44BF6
+204632BD000062F428B270B5F2B004460D465FA82CF4E5
+F2002641F290406821405901FB060000F150015FA82CF4
+E7F2761C322EF1D34DA82CF4D3F2214601A862F4F1F107
+E001A968465EF424F569464DA82CF4D4F201A85EF41BF5
+0028F2D15FA929A8C6F4DDF429AA4DA93BA8C5F4C8F53B
+A903A82CF490F20AE003A968462CF491F26946204662F4
+F3F103A82CF480F203A82CF47BF20028EFD072B070BD00
+002DE9F84F0E462DED068B06F1500982B0804693464946
+FFF7A5FF050012D14946404662F4BDF14946404662F4C5
+F1050004D136210FF20820F5F7CAF815B1284607F0D8FC
+2C6804B10124D6E90E23D6F810A0664900201CF497F7DB
+E9002341EC180BF768002000211CF438F71ABF780800F0
+01060026F80443BFB80900F0010080F001070027E4B23C
+B3494605F11C0007F0C6FCE8B948462BF466F600F0B4F8
+1DF4EEF0CDE90001A8691DF4E9F053EC192B1DF4B3F1DD
+E900231DF437F0CDE9000150461DF4DCF0DDE900231CF4
+40F703D22946404600F0A7F83E4208BF9FEDF19403B0B5
+8000440B7DD0D5E9040153EC182B1DF4D6F041EC190B28
+6800283BD1484628F4A8F7DBE9000153EC102B1DF488F1
+41EC190B484628F49DF7B0EE40AAF0EE60AAB0EE490AF0
+EE690A2BF44FF7064651EC180B53EC1A2B1DF472F141EC
+100B2BF444F7301A1DF493F006460F46484628F480F751
+EC100B32463B461CF416F7C5E90201C5F800A04A4605F1
+1C01684658F42CF718E051EC190B01221F4B1CF4C5F604
+D8D5E9022300201D4908E081F000411CF4BBF607D8D5E9
+022300201A491CF4C6F7C5E9020185ED048B2946404600
+F032F8B0EE408AF0EE608A48462BF4D5F500F023F8AAEB
+00001DF45BF053EC192B1CF4DBF61DF435F0A861B0EE48
+0AF0EE680A02B0BDEC068BBDE8F18F00000000F0BF0000
+0000000000000000104100002041C52E8100000020C128
+68B0EE409AF0EE609A704780B5D1E90223D1E904011CF4
+85F741EC100B01BD00291CBF084607F0E1BB704780B5FF
+F795FE806902BD000070617463685F676C70655F616472
+5F73746174652E6370700000000038B5044600F038F868
+B12078A2F4C8F40146684692F48CF76946601C07F0E2FB
+012538B900E000251E210FF67830F4F7A1FF15B168467C
+F41BF62078062819D8DFE800F0150415080C15150000F0
+14F877300AE000F010F8403806E06078801F092804D200
+F008F82030C0B232BD00F003F832BD002032BD601CA2F4
+55B0000000F1580107220A729FED670B00224A72028080
+ED020B4FF0FF32428080ED060B0022026180ED080B80ED
+0A0B80ED0C0B80ED0E0B80ED100B80ED120B80ED140B0A
+804FF0FF328A700022CA707047000038B50C462DED068B
+0546207828809FED5C9B607868809FED5C8B60681CF49A
+F74FF0FF32DFF82C3A1CF418F6C5E902019FED7CABA068
+2861E0681CF481F700F0B1FB00F0ABFBC5E9060120691C
+F478F753EC1A2B1CF402F600F0A0FBC5E9080160691CF4
+77F700224FF07B531CF4F6F5C5E90A01A0691CF463F700
+F093FB00F08DFBC5E90C01E0691CF45AF700F08AFB00F0
+84FBC5E90E01206A1CF451F700F081FB00F07BFBC5E910
+01606A1CF448F700F078FBC5E91201A06A1CF441F753EC
+1A2B1CF4CBF5C5E9140105F15800A178018094F82C1081
+70E178C1702846BDEC068B32BD30B587B004460D461146
+684693F4FEF028691CF42DF741EC100BB5F8581003A893
+F4F6F0024608236946204693F4C6F107B030BD38B5DFF8
+3C59044607231022294624F4CFF307231022294604F170
+0024F4C8F3DFF8200938B1DFF8200920B9F1940340B980
+00D5210FF68C10F4F7ABFE204600F006F8204632BD0000
+00000000000070B50446002504EB05163046A8F444F406
+F17000A8F440F46D1C072DF3DB70BD000000000000003E
+112D4454FB210940F8B50546002428780026062823D8DF
+E800F00422090E13181D00DFF8BC48DFF8BC0817E0DFF8
+B848DFF8B80812E0DFF8B848DFF8B8080DE0DFF8B448DF
+F8B40808E0DFF8B448DFF8B40803E0DFF8B048DFF8B008
+0668DCB10021684692F438F66946681CE8F45AF0074668
+467CF4D0F477B92846FFF794FE002100E0491CB14206DA
+30224A43135D8342F7D11019F2BD0020F2BDFEFFFFFFFF
+FF3F3DF0B583B00C4615461E46294601A892F411F60246
+21466846A8F4BCF301A87CF4A9F46846FFF79EFF070019
+D097F92C00022803D1DFF80008007888B92146384607F0
+5AFA60B139463046FFF7C3FE06F1600004704570684678
+F490F40120FEBD684678F48BF40020FEBD00002DE9F043
+C7B004464E9E0D46904699462CA8FFF781FE00F03BF802
+4629782CAB2046FFF7B7FF002770B34046A1F4CAF650B3
+00234A4641460EA888F465F30EA906A885F4E7F606AA2C
+A903A8FFF7FEFE002203A90AA893F437F6024606A96846
+93F414F0684692F44BF6002332462CA9204600F011F807
+0006D0287804EB0010691C7030A8F42EF3384647B0BDE8
+F083681CA1F495B60000F8B52DED108B0C462DED020B98
+B094F86000012816460ED0DBB263B9DDE9180121F00041
+0122DFF840371CF43FF498BF002040F2C28104F108079F
+EDE2AB97ED040B2EF4F5F4B0EE40DAF0EE60DA97ED040B
+2EF4C3F4B0EE408AF0EE608A97ED0C0B2EF4E5F48DED10
+0B97ED0C0B2EF4B5F4B0EE40FAF0EE60FA97ED080B00F0
+EFF941EC190B00F0F5F900F0F3F902460B4600F0B3F900
+F0C7F900F09DF900F0DDF900F0B5F900F0E5F9DFF8C026
+DFF8C0361CF43BF400F0B7F953EC102B00F09DF9CDE90E
+0153EC1B2B00F0B1F9D7E90E231CF4FDF4CDE90C0106AA
+39460CA88EF430F29DED060B2EF4A2F400F074F99DED06
+0B2EF472F400F074F900F0AEF900F086F900F090F9D7E9
+0023B0EE40EAF0EE60EA51EC1C0B1CF492F541EC110BB0
+EE41CAF0EE61CA00F092F941EC100BB0EE4C1AF0EE6C1A
+2EF448F4D7E90C0100F050F953EC1C2B1CF4C2F441EC1B
+0B00F04EF997ED00EB00F044F953EC1E2B51EC1E0B1CF4
+E2F300F052F900F086F900F014FB02460B46204629461C
+F420F600F078F941EC1C0BB0EE4B0AF0EE6B0A2EF44EF4
+B0EE409AF0EE609AB0EE4B0AF0EE6B0AF19403D0BC8000
+2EF41AF4B0EE40AAF0EE60AA00F048F9CDE90A0100F03E
+F9CDE90801D7E90623DFF8AC05DFF8AC151CF480F4CDE9
+0401DDE9042300F02AF9D7E90A231CF476F40446B8680D
+461CF41BF5DFF88425DFF888351CF499F300F003F941EC
+1C0BB0EE4C0AF0EE6C0A2EF411F400F0E3F800F0EDF8DD
+E9082300F0E3F851EC180B1CF483F3DDE9082341EC1E0B
+51EC1D0B1CF47BF3DDE90A2341EC120B8DED002B00F007
+F900F019F922462B461CF43FF4DDE90A2341EC110B9DED
+002B8DED001B8DED022B51EC1C0B1CF45FF304460D4600
+F0EDF800F0C5F841EC100B9DED022B9DED001B12A883F4
+B6F30146304683F40CF4DDE9100197ED00EB53EC1E2B1C
+F444F353EC192B1CF412F4DDE90E231CF43CF381F00041
+41EC190B53EC1E2B51EC1F0B1CF432F300F068FADDE90E
+231CF42CF300F0CAF881F0004141EC1A0B314608A883F4
+CEF300F070F808AA014602A8A8F435F200F09FF804460D
+4653EC1B2B00F0A1F822462B461CF4E1F300F085F80146
+02AA68469EF48EF7694606F118009EF483F7314608A883
+F4A9F300F04DF8014608AA02A8A8F412F253EC1B2B00F0
+7CF804460D4600F07CF800F05AF800F064F8014602AA68
+46A8F4EBF1694606F120009EF462F753EC1A2B51EC1D0B
+1CF4DCF253EC182B1CF422F581F0004141EC100B68469E
+F447F7014606F128009EF44CF7D7E9122300F04AF8D7E9
+102306F130041CF494F3C4E9000197ED120B84ED020B04
+20207401201AB0BDEC108BF2BD0000000000000000F03F
+9DED040B0EA8A8F4C1B10000B0EE40BAF0EE60BA704700
+00B0EE40CAF0EE60CA70470000B0EE4C0AF0EE6C0A2EF4
+F0B2DB48DC491CF4DEB402460B46204629461CF418B402
+460B4651EC1A0B1CF412B441EC100B0AA89EF4F9B60000
+41EC100B2EF404B3DDE918011CF47AB253EC1C2B51EC19
+0B1CF474B253EC1C2B51EC1A0B1CF46EB253EC1E2B51EC
+1B0B1CF468B297ED000B53EC102B51EC100B1CF460B253
+EC182B1CF45CB253EC192B1CF458B204460D4653EC1E2B
+51EC1C0B1CF450B230B5A94883B000780C4608B100203E
+BDF822182120461DF4B5F30125E9B201A892F440F30246
+02216846A8F4EBF001A87CF4D8F16846FFF7CDFC20B1C1
+780078001900F8011C684678F4D0F16D1C192DE4DB0120
+3EBD000070B504460D46A4B01646FFF783FD0146287804
+EB0010AFF465F238B30AA8FFF7BDFBFFF777FD02462978
+0AAB2046FFF7F3FCD8B132460AA903A8FFF749FC002203
+A906A893F482F302463146684692F4F1940360C080005F
+F5684692F496F351EC100B1CF43AF32BF47EF18D498842
+8041C00F24B070BDF8B52DED068BC4B0164604460D461B
+2100F012F9002800F0D6802A68926B2946684690472846
+A8F441F001466A4601A8A8F484F068467CF471F19DF804
+00022803D001A8FFF762FC070000F0B980314605A885F4
+E9F305AA01A92046FFF798FF002840F0AD800123324629
+4626A88DF4AFF700233246294608A88DF4A9F708A926A8
+85F4D7F1B0EE408AF0EE608A26A902A885F4C9F301A8FF
+F708FB3870032100F0CAF878700F2100F0C6F8786002A8
+92F450F52BF422F3B860162100F0C0F8F860192100F0BC
+F83861112100F0B4F87861142100F0B4F8B861182100F0
+B0F8F8610D2100F0ACF83862092128468DF405F7B0EE40
+9AF0EE609A51EC190B6FF001024B4B1CF4B2F341EC100B
+2BF4F6F2B8620A2128468DF4F1F6B0EE40AAF0EE60AA53
+EC192B51EC180B1CF455F100F08BF800223F4B1CF44FF1
+41EC100B2BF4DDF2786202A892F403F5B8700DF1050103
+2087F82C009DF8040004EB0010A7F4CBF715202BF464F6
+50B30DF10500A1F431F304469DF8040008B9472517E001
+2808BF532513D0022808BF52250FD0032808BF51250BD0
+042808BF422507D0052808BF452503D006280CBF4E2578
+2527F44BF700942B460FF2B00215212BF44CF601A878F4
+AFF044B0BDEC068BF1BD0000FFFFDF3D29E10A00E75102
+00581A00001ACC91004C6382004C698200C85E82004863
+8200046B8200546C8200005282000058820004588200C4
+5E820050698200006B820020FE6D4100505B9366A8F642
+5B8DCBD7A71D13BFA71D133F803A0900FFFF3F3D0000E0
+412A68126D284610472A68926D2846104753EC1A2B1CF4
+96B170617463685F676C70655F616C6D6D67722E637070
+00000045706832416C6D2025632C2025640A0070B500F5
+9854A83482B000212046A2F449F002212046A2F445F000
+250FF2BC0600F07EF8032100F077F800F04DFB00F04FFB
+6D1C042DF3D30FF2A406002500F06FF8042100F068F800
+F03EFB00F040FB6D1C212DF3D305212046A2F423F00025
+0FF2A00600F05CF8052100F055F86946A7F4FAF600F02C
+FB6D1C0C2DF2D30FF29006002500F04CF8062100F045F8
+00F01BFB00F01DFB6D1C082DF3D3F7F73AF8D0B1DFF8C8
+4D606810B13F2100F038FD4FF44860F7F730F860602820
+F7F72CF8A0604FF4486160681DF406F1A06828211DF402
+F10020207073BD0000010203070102030405060708090A
+0B0C0D0E10131415161718191A1BF19403F0C380001C1D
+1E202122232425000000060A10111416171C1D20222301
+020304050607092046A1F4DFB70000A95D684692F41EB1
+10B50B8848F29014A34202D100F014F80CE048F29114A3
+4202D100F099FE05E048F28F14A34203D100F06CFF0120
+10BDBDE81040D5F47CB670B504460D4600260EE000F0D5
+FC50B100F0D2FC582101FB06510368CA6DD3F888300831
+9847761CE8888642EDDB70BD2DE9F04F884608F14805A3
+B00446288C092802DB6D2100F0BBFC08F108094FF0000A
+B9F81C00C0B2A7F484F4064601AF11E0CDF411F060B100
+F0A6FCD0F800C0B9F81C30BBF80C20DCF884C0DBB26946
+E0470AF1010A288C824564DAA82000FB0A8000F1BC0100
+F59E7B0A68521E00924A680192002A8B687B60CB68BB60
+0B69FB604B693B618B697B61CB69BB610B6AFB614B6A3B
+628B6A7B62CB6ABB620B6BFB624B6B3B638B6B7B63CB6B
+BB630B6CFB634B6C3B648B6C7B64CB6CBB640B6DFB644B
+6D3B658B6D7B65CB6DBB650B6EFB654B6E3B668B6E7B66
+CB6EBB660B6FFB664B6F3B678B6F7B67C96FB96721A9DB
+F80000F867DBF804002190DBF808004860206895D0CCF4
+A7F70028A1D000F03BFCD0F800C0BBF80C20DCF83CC033
+466946E04795E798F80600C0071ED502A83EF4ACF11022
+08F114011DF427F000F023FC98B100F020FCB8F8061009
+06490E01F00101019102A9009131460668D9F80830D9F8
+0420D6F838C0E04708F12806707DC00721D5707B8DF80D
+0070680190B0680290308AADF81000708AADF812003078
+8DF80000B07B8DF80E00307B8DF80C007088ADF8020000
+F0EEFB28B100F0EBFB69460268126C9047A879F0B1F069
+0190B0690090A8788DF80A0068798DF80D0028798DF80C
+0028788DF80800E8788DF80B0068788DF8090000F0CDFB
+28B100F0CAFB69460268D26E9047287EE8B1B5F91A00AD
+F80000A88BADF80200A87F8DF80400E87F8DF8050000F0
+B5FB68B100F0B2FB0746DDE900010A46014638463F68D9
+F80030D7F844C0E047A87D58B3F0690390B0690290A878
+8DF8120068798DF8150028798DF8140028788DF81000E8
+788DF8130068788DF8110000F08CFB90B100F089FB0646
+D9F80000019002A883B00CC869460CC10CC80CC1304636
+68D6F84CC00EBCE04708F19006307A80B16846D5F405F4
+30690290F0680190708900F068FB28B100F067FB694602
+68926D904708F17A07B87840B36846AEF458F7B7F804A0
+388AADF80A00F889ADF80800B889ADF806007889ADF804
+003889ADF80200F88800F046FBF1940380C7800080B100
+F045FB8346694603A8D5F4C6F3DBF800C0D9F80030DCF8
+48C0024651465846E04708F1750B9BF8030050B36846AE
+F422F7B7F800A0A86A0190686A009095F82C008DF80800
+9BF802008DF80B009BF801008DF80A009BF800008DF809
+0000F016FB70B100F013FB0546694603A8DFF4D8F60246
+28462D68D9F800302D6D5146A847B87C80B16846DFF4D9
+F67068029030680190B88A00F0F8FA28B100F0F7FA6946
+0268526D904708F1B005287880B16846DFF4CAF6A86802
+9068680190688800F0E3FA28B100F0E2FA69460268D26D
+9047307D80B16846DFF4BDF6F0690290B0690190F08A00
+F0D0FA28B100F0CFFA69460268126E904723B0BDE8F08F
+2DE9F04F87B0CA8801EB42020023138101F10806CA8851
+18C91D00F59850019100F1A8080DF1080907E0761C3078
+3B281CBF01988642F8D1761C019886427AD200273846A1
+F470F61DF408F0C4B23846A1F46AF62246314623F4A1F5
+002804BFA05D3A2855D102A814211CF471F6A119002049
+1C04E011F8012B00F80920401C0A783B2A18BF002A02D0
+C0B21428F2D339464046A1F45EF5A7F46CF402A81CF4DD
+F70024451E21E0A0F14101062934D237385FFA80FA4FF0
+000B4AFA0BF0C0070ED50BEB8500411CC9B2684691F486
+F639464046A1F43EF500F032F800F034F80BF1010BBBF1
+040FE7DB6D1E6DB2002D13D4E4B214F80900641CA0F130
+010A2938BF3038D5D3A0F161010629CCD25738CFE77F1C
+FFB2072F93DB0322314607A023F43DF5002805D1F01C06
+F0D2FADFF8381908607AE707B0BDE8F08F574E3A006946
+A7F4D9B3000068467BF4E7B400002DE9F0430D46C1B004
+46A868410911F0010114BFDFF804294FF0FF32A3689343
+1040184304F59856A060A23609B9E889308000F005FA00
+2800F067817EF4C8F4DDF4DCF0806818B94FF4CF7100F0
+FCF9288A40B17EF4BCF4DDF4D0F08168288A2AF41AF404
+E07EF4B3F4DDF4C7F08068708000F0E5F93188D2F4F4F3
+00F0E0F97188D2F4F7F300F0DBF90268217AD2F8942001
+F001019047207A00F0810081280CBF0126002600F0CBF9
+3146D1F4D4F600F0C6F90268A168D2F8A020890801F001
+01904700F0BCF90268A168D2F8A420490801F001019047
+00F0B2F90268A168D2F8B020490A01F00101904700F0A8
+F90268A168D2F8AC20C90801F00101904700F09EF90268
+A168D2F8B820890A01F00101904700F094F9A989D0F453
+F000F08FF9A168CA09CB064CBF02230023CE034CBF1026
+0026490302F001024CBF2021F1940310CB800000211A43
+324311430268D2F89020904700F076F90268A168D2F8BC
+20090A01F00101904700F06CF9A168DFF453F5A0684000
+04D500F064F90121DFF451F5A068002804D500F05CF901
+21D4F493F707A827F4DAF120680FF60409CCF4B9F4DFF4
+43F506460020002159F821201043491C0729F9D3A16810
+EA010808BF4FF49018002759F8270018EA000F51D004F5
+98503946A830A1F416F401461BA8A0F446F615E08DF800
+0001A87BF4F0F39DF80000512801DB562807DB684657F4
+83F418B1694607A828F436F51BA8A0F435F61BA8A0F434
+F660BB1BA8A0F432F6C1B202A891F434F50246394601A8
+A7F4DFF2024631466846A0F4C8F301A877F4CBF302A87B
+F4C4F3684657F45DF40028CED11BA8A0F416F6C1B201A8
+91F418F5A0F412F69BF48CF2C11D0E2934BF3B300020B8
+E77F1C072FA5D3002603A82AF477F1324607A911A827F4
+A2F111A91BA82AF4C6F612E01BA901A82AF4C7F6314668
+4627F485F09DF804009DF80010411A03A829F4E3F71BA8
+2AF4C0F61BA82AF4BFF60028E7D0761C072ED7DB00F0B4
+F807A98AF475F200F0B5F8D2F4D7F200F0B1F8FBF78BF9
+00F0ADF8D2F4B1F2A06880010CD500F0A0F8D6F4AEF306
+4600F09BF846F004010268D2F888209047A068010504D5
+DCF410F141F288311AE0C10404D5DCF409F14FF47A6113
+E0810404D5DCF402F140F6B8310CE0410404D5DCF4FBF0
+4FF4FA6105E0000405D5DCF4F4F04FF47A71DCF40CF700
+F074F850B1A079297B00F0010001F00101884218BF4FF0
+010801D14FF0000800F064F848B1A079297B00F0040001
+F00401884218BF012700D1002700F056F850B1A079297B
+00F0020001F00201884218BF4FF0010901D14FF0000900
+F046F848B1A079297B00F0100001F01001884218BF0126
+00D10026A889E08000F030F828B100F02DF80268E18852
+6E9047B8F1000F03D000F02AF8CEF436F31FB100F025F8
+FBF729FDB9F1000F03D000F01EF8FBF740FD1EB100F019
+F8CEF44FF300F015F848B1DFF8FC542868012804DB00F0
+0DF82968FEF726FA41B0BDE8F08300002068D6F409B300
+00ADF800002068CCF465B300000FF22C50F3F740BC0268
+0A60406848607047000038B5846842F02005AC43114021
+4300F59852816022F8A23F049951800021BDE83440D5F4
+D9B70000F8B505462DED068B28680E46CCF43EF300287A
+D02868D6F4D7F2DCF4B3F6C00706F1440456D42868CCF4
+30F3074606F12C00DFF40BF4B0EE40AAF0EE60AA06F120
+00DFF403F4B0EE409AF0EEF19403A0CE8000609A06F114
+00DFF4FBF3B0EE408AF0EE608A06F10800DFF4F3F33968
+896FB0EE4A3AF0EE6A3AB0EE492AF0EE692AB0EE481AF0
+EE681A384688472868CCF400F3618901EE101ADFEDA00A
+B8EE411AE18861EE201A01EE101A218902EE101AB8EE42
+2AA18862EE200A9FED980AB8EE411A02EE101A016821EE
+001AB8EE422AD1F8801022EE000A88472868D6F477F2DC
+F453F6C00613D4B4F90200B0F5FA6F0EDA2868CCF4CDF2
+BDEC068B0368B4F90220B4F90010DB6F01B0BDE8F04018
+47BDEC068BF1BDF0B5ADF5037D04460D4602A8D3F466F3
+05F10806F06E00F44040B0F5804F03D040F28721FFF746
+FF3068029008AFB088ADF80C0003A8F188418031898180
+7189C180B1890181F1894181318A8181718AC181716901
+6105F12000DFF46FF38DED080B05F12C00DFF469F387ED
+020B05F13800DFF463F387ED040B05F14400DFF45DF300
+F08BF97E9005F15000DFF456F387ED060B05F15C00DFF4
+50F387ED080B05F16800DFF44AF314A8002187ED0A0B01
+6096F86C0000F001003863F16E490801F0010140EA4100
+3863F16E890801F0010140EA81003863F16EC90801F001
+0140EA01103863F16E090901F0010140EA41103863F16E
+490901F0010140EA8110386305F17800DFF419F300F047
+F99F49086005F18400DFF411F300F03FF99C49086005F1
+9000DFF409F300F037F99949086095F89C003228A8BF32
+208DF85400002014E005EBC00202A99E3201EBC0014E31
+53784B70401C13780B70C0B2B2F902304B80B2F904308B
+8092798A719DF854108842B8BF3228E4DB0020ADF80400
+DBF40EF701A900910DF10503012202A902F0FAFC9DF804
+0020B9DBF401F703F033F848B32068164DCCF4E8F10028
+20680ED0CCF4E3F102A9D1F494F46868D8B1FFF774FEAB
+682A786968FDF721FF13E0CCF4DEF180B12068CCF4DAF1
+02A9026812689047686838B12068CCF4D1F1AA68297868
+68F8F714FE0DF5037DF0BD000064CA91000000803A0000
+803B2DE9F843614D68680028894600F0B28009F1480631
+7AC90739D54FF448611CF41FF2A86828211CF41BF20020
+287009F10800A968FFF73CFEA86800F1080109F11000FF
+F735FE09F11800DFF471F200F09FF8A968086109F12400
+DFF469F200F097F8A968486109F13000DFF461F200F08F
+F8A968886109F13C00DFF459F2AF6800F086F8F8613068
+3862B088B88400276AE0702111FB0798696801EB801108
+F15800FFF705FE00F077F800F1080108F16000FFF7FDFD
+00F06FF800F1100108F1F1940330D280006800FFF7F5FD
+00F067F800F1180108F17000FFF7EDFD08F17800DFF429
+F200F061F820627F1C08F18400DFF421F200F059F86062
+FFB208F19000DFF419F200F051F8A06208F19C00DFF412
+F200F04AF8E06208F1A800DFF40BF200F03DF800F13004
+00F035F8206008F1B4000188A1804188E1808188218181
+79A1722A786968C07901EB821181F83B0008F1BC00DFF4
+EFF195F80080686800EB881400F018F8E06308F1010028
+70707A8742BCBF287832288EDBBDE8F1839C928900F707
+FFFFB8C99100BCC99100C0C9910064CA910051EC100B1D
+F48AB26868297800EB8110704700006868297800EB8114
+51EC100B1DF47CB200B583B0002001900090DBF4E9F56A
+4601A902F021FFDBF4E3F5009A019902F021FF07BD7061
+7463685F676C70655F6F6E636869705F7065785F646563
+6F6465722E637070000000000002000000000000001000
+00000001000040000000080000008000DFF8380C05F0E6
+BD38B5044642F2E0710020085104F51C5500F008F900F0
+6AFB04F13000C2F48EF7002084F8340142F6394184ED42
+0A01200855E83504F530503C303DF4A5F604F530500021
+3830E0F467F32846E1F4D4F2E0F480F360688BF43BF028
+46E1F458F70021E1F459F704F51455B0359FED6A0B42F2
+D85185ED040B85ED060B85ED080B00200855DFF8B04B20
+604FF4C87029F4D3F700EE100AB8EEC00A84ED010A04F1
+080002F0E7FF05F0ABFD01462A6804F10800BDE8384006
+F065B800002DE9F0472DED048B04468CB06068A6F437F4
+814604F59C7A5046BDF4E9F2B0EE409AF0EE609A5046BD
+F404F300F0ACFD41EC180B6846E1F4D7F604F5145757F8
+B40F89F49FF3E1F4D9F6050018BF01257868BEF48BF280
+467868BAF423F6007809280CBF0126002648EA05003043
+80F001005DB17868BAF415F60078012818BF002048EA00
+00304380F001000299C0B2002812BF41F0010048084000
+02907868ADF4A8F300780299002814BF21F0020041F002
+0002907868ADF49CF300780299012814BF21F0040041F0
+0400029004F13000BDF48DF251EC100BDFF8742ADFF874
+3A1AF453F702988CBF20F0100040F0100002903868ABF4
+8BF40028029814BF40F0400020F0400002905046C2F4B8
+F6DFED140AB4EE600A0298F1EE10FA54BF20F4007040F4
+0070029000F01DF8024600F076FAF0EE690A4B46694604
+A8E1F461F67868BDF46CF4626804A905F0C2FF0CB0BDEC
+048BBDE8F087000000000000000000000000484204F130
+00BBF488B0FEB50446F19403C0D58000FFF744FF6846E1
+F461F642F6B04004F514560059B036810EC00E00F00100
+80F0010501F00101B06881F00107BEF4E4F10028029814
+BF40F0800020F0800002907068ABF42BF40028029814BF
+40F0080020F008000290002F029814BF40F4804020F480
+400290002D029814BF40F4005020F400500290694604F5
+9C7007F05CFF2046D8F46FF53068A0F406F110B1204600
+F0C4FCF7BD00002DE9F84F044604F51C502DED048B00F1
+E809DCB04846E1F48BF1C5F491F682464846E1F485F1E1
+F415F642F2D95700253855002814BF4FF005084FF00408
+04F530568436706870B96068BDF42DF2014652A827F461
+F252A839F442F618B16068A6F408F370602046D9F408F0
+94F834010028DFEDE49A00F0B1816068BDF414F2014648
+A827F448F248A839F429F64045C0F0A48104F51450B430
+4068BDF436F4024604F1F00104F5F550C3F4ABF209A8E1
+F4DEF5395D0B98002912BF40F00100400840000B9042F2
+B4500059ABF49AF300280B9814BF40F0020020F002000B
+900B9840F004000B903CA88AF4F5F36068A6F4C0F27168
+A0EB010B04F13000BAF40DF500F053FE04F13000C2F4B3
+F5B0EE409AFFF723FF014616A8ADF4C3F504F50C5101F1
+E80842F210710391CDF808B042F2E0310246095D01913C
+AB09A9009100F068F9514640460AF04EFA04F5305000F1
+380A4046C2F48DF5B4EE690AF1EE10FA40F11B814046E1
+F48CF500F006FC41EC190B4846E1F467F5E1F487F540B1
+51EC190BDFF8C02BDFF8C03B1AF4F8F561D88DF81E5040
+46E1F47AF529F416F0ADF820004846E1F409F58DF81D00
+4046E1F46EF5014614A85CF4C2F304F1F0010EA8ADF46F
+F54846E1F464F5E1F464F5483039F485F50428ACBF4FF0
+010BAB464046E1F45DF500F0E1FD4046BAF442F70C9040
+46E1F458F58DF81C004846E1F423F5BDF820100C9ACDF8
+00B049B20691B0EE481A9DF81D100591F0EE681A012104
+91B0EE490A14A90391F0EE690A0DF11E0102910EA90191
+94F834319DF81C10E1F46CF5002800F0BA804846E1F4FC
+F40121E1F4FDF44046BAF40CF700F0E2F84046C2F407F5
+012084F8340184ED420A4046BDF4AFF005464846E1F40F
+F6014601232A460CA886F45DF40CA9684683F4DFF76946
+04F5947091F40CF1385D68B14046E1F4FDF443F489F329
+F4C9F505464846E1F43DF02946E0F4F6F041460CA8BCF4
+6CF5014604F13000BCF4B5F54046E1F4E8F5DFEDB20A00
+F072FDACBF01250025385DB0B14046E1F4D2F428F46EF7
+0728B4BF01200020F1940350D9800028430BD004F13000
+BDF46CF0DFEDA70A29F4E0F48DED000A00F07AF84046C2
+F4ADF4DFEDA30A00F04FFD2CD5002D04BF385D002827D1
+2046DCF4BCF3052822DB04F130010CA8BCF42DF5DFF80C
+1A009104F59C756946BDF489F20CA9284606F0F7F80321
+5046E0F477F004F51450B4304068BDF453F2C4F443F728
+46DFF42CF0BDF462F003E002215046E0F465F004F13000
+BDF423F0306042F639410020085501252CE05046E1F4EF
+F301280FD06068BDF47EF001460CA827F4B2F00CA839F4
+93F407281BDB2046D8F40EF417E0307A401C3072C0B205
+2811DB2046D8F404F435720CE004F13000BCF4FCF7B4EE
+690AF1EE10FA03D5CDED009A00F009F85CB02846BDEC04
+8BBDE8F28F00000000C843694604F13000BDF41DB20000
+B0EE481AF0EE681AB0EE490A70470000014604F1F00081
+F4D9B40000F8B504462DED028B04F514568CB056F8B40F
+0D46ABF4DEF120B104F5F05038300AF0E0FD7068AEF45F
+F30078022805D07068AEF459F30078032801D1012600E0
+0026D5E90C010022DFF8D8381AF480F440F28A8004F530
+5717F88D0F00281EBFA86CC0F3001000280DD0D5E90E01
+00F04BFA08D87878401C7870C0B2042802DB0020387078
+7029462046D9F4DBF1A86CC00800F001008DF80400B0EE
+408AD5E91001F0EE608A1CF475F6039003AB01AA00F064
+F8D9F43CF204F13000BCF4D0F329F44AF48DED020A3346
+02AA00F056F8D9F43AF395ED060B8DED060B42F6B04095
+ED080B8DED040B005D40060BD42046DBF4AEF1332806D3
+009604AB06AA2946204600F043F89DF80400A96C60F3C3
+01A96403981CF486F6CDE90A010020DFF80818CDE90801
+022208A90AA881F4F8F285ED100B04F530509DED060B85
+ED060B38309DED040B85ED080BE1F401F303280AD12046
+DBF47CF130B104F5E850E830BEF4CAF185ED0A0B0CB0BD
+EC028BF1BD0100A040000048430000C842B0EE480AF0EE
+680A29462046704700002DE9FE4F2DED088B0C468EB082
+4694ED0A2B94ED081B94ED060B08A883F466F0A06CC0F3
+001020B100F08AF938BF012600D300260AF5F05000F138
+084046E1F4C5F446EA000700F07BF934BF012100214046
+E1F4BFF442F2B850002550F80A00BAF43CF242F68D4900
+78012808BF0125229880F00100054207EA050605D119F8
+0A0020B100F066F901D2012500E000252EB919F80A0028
+B100F05CF902D20126002705E04046E1F457F4384080F0
+01070AF59C70E1F492F400F082F90022DFF8E0361AF491
+F41AF419F58346F19403E0DC800086F00100384360D140
+46E1F487F42168081AB0F5FA6F00D865B908A94046E1F4
+7FF401214046E1F47FF421684046E1F47FF452E04046E1
+F47DF421684046E1F477F419F80A0030B94046E1F479F4
+0BFB00F01F283DD300F023F9014602A8ADF4DDF2DDE902
+2305469FED969B00F01CF9CDE90001D4E906239FED948B
+00F0F2F800F0F4F8CDE90201DDE9042300F00CF9CDE900
+01D4E9082300F0E4F800F0E6F8CDE90401DDE9062300F0
+FEF8CDE90001D4E90A2300F0D6F800F0D8F8CDE9060129
+464046E1F42CF407E000214046E1F42BF408A94046E1F4
+23F437B108A94046E1F432F400F0B8F8B1E000F0D5F807
+4600F0D6F8394680F40BF5F0EE609AD4E90C01F2EE040A
+B0EE409AB0EE608A1CF415F500EE100AF0EE480A29F44D
+F2B1EE048AF0EE480A29F48DF2B0EE40BA5EB14046E1F4
+05F40BFB00F0B0F5967F34BFB0EE48BAB2EE00BA42F2E0
+7757F80A003C2828BFB42851D3D4E90E0100F0A8F89FED
+5CAB98BF9FED5DAB002E46D100F093F8054600F094F8D4
+E910230646DFF85805DFF858151AF4F7F22A4641EC130B
+35461646B0EE438AF0EE638A00F0A6F800F0BCFA324641
+EC120BB0EE483AF0EE683A2E46B0EE428AF0EE628A1546
+B0EE43AAF0EE63AA00F091F841EC110BB0EE4A3AF0EE6A
+3A2A463146B0EE482AF0EE682AB0EE490AF0EE690A4046
+E1F448F351EC100B1CF4A2F40BEE100A00F076F853EC19
+2B1AF49CF203D357F80A00012807D100F045F801464046
+E1F495F300F01BF84046E1F494F351EC100B00F02EF80D
+D200F031F8179990ED000B81ED000B00F02AF890ED020B
+189880ED000B0EB0BDEC088BBDE8F78F94ED0C0B4046E1
+F47BB3000051EC180B1AF486B2DDE900231AF454B3D4E9
+0E0121F00041DFF86024DFF860341AF45CB2D4E90C0100
+22DFF858341AF455B200004046E1F4C7B200004046E1F4
+5DB3000051EC190B1AF464B2DFF83824DFF838341AF41E
+B20100008014AE1A400000808C5EF2EF3F00000000E742
+5B3F0000000000001040000000000000144030D9890028
+D989001BEE100A1CF46CB410EE100A1CF468B42DE9F84F
+2DED068BADF5487D04469FEDE70A29F4F7F1B0EE408A04
+F59C70E1F4F9F2DFF8D453D5ED010A04F5145748EE000A
+B037C5ED010AB868AEF4ABF00078012840F0AD812046DA
+F458F70F28C0F0A7816068DFF8A493BCF464F50146B6A8
+5BF4ACF7012089F80000FA6A616884A8C4F4C0F0B6A95E
+A829F4B8F40026E3E05EA906A829F4B8F44CA829F4D3F4
+06A85BF444F6F1940370E08000002806D0606800230022
+06A98AF472F4002800F0CC8090F85410012940F0C78000
+F13008DFEDC00A98ED070A00F0BCF907DB6068002206A9
+8AF4CAF4B0F9F0001F28C0F2B48006A94CA829F4B7F4D8
+F800001CF4F3F34FF09442C44B1AF4C4F11CF4A4F309EE
+100A2046DAF41FF6C5F45BF1804600F094F9BAF444F000
+F08AF900F08EF9BAF4EAF2014608A8ADF4FEF003460020
+0590CDF8008001200490B0EE480A0020039002900190F0
+EE680A4CAA84A90EA8B9F416F2B0EE490A29F458F1B0EE
+408A00F06CF9C2F4C8F029F450F1F0EE408A00F064F9BC
+F4CAF029F448F1B0EE409A00F05CF9BCF4CEF078EE280A
+30EE898A29F43CF138EE008A95ED010A78EE000AC0EE20
+8A01210EA882F4AAF5761C416800681CF449F309EE100A
+01210EA882F49FF595ED010A804630EE080A2CF4E2F1FF
+F716FF02460B46D8E900011AF49CF341EC100B29F4ECF0
+51EC100B1CF42CF300EE100AF0EE000A00F024F925D518
+EE900A1CF469F302460B4600207F491AF4C3F241EC1A0B
+28681CF45EF300F004F9824628EE890A8B46FFF7EAFE52
+465B461AF4FAF11CF408F3286068681CF44CF300F0F2F8
+1CF400F368605EA829F4CEF35EA829F4C9F300283FF416
+AF0020002E89F8000000F0A080684656F4E9F002465620
+8DF8040001A9786882F42BF79DF80010386802AA85F4A5
+F361486149CDE90401002204A902A880F49CF728688DED
+020B1CF419F300F087F8DDE902231AF4BBF141EC180B95
+ED010A2CF46BF1DFED420A00F0BFF86CD553EC182B0020
+52491AF4D8F041EC180B3868042185F496F351EC100B4D
+4A4E4B1AF48CF036D83968012210A885F460F710A90CA8
+83F412F304A8A3F4F9F202208DF81C008DED088B0C98AD
+F816000CA890F4B6F629F444F20690386889F4BAF328B1
+022809D004D3032804D007E0022006E0032004E0042002
+E0012000E000208DF8140004A9386800F09CFA04A8ADF4
+75F120E095ED010A2CF418F17868B0EE409A7DF489F689
+F495F3044619EE100A1CF4AEF200F01CF80022284B1AF4
+7EF041EC110B3868B0EE480AF0EE680A0422214685F47B
+F300202860684676F414F00DF5487DBDEC068BBDE8F18F
+CDCCCC3D4FF09442124B1AF4ABB200000100C841FFDD3F
+40B7F3FDD4414C02410000164400007940008076400000
+E03F349D52A246DF913F14B233E5F03AE13F00004940CD
+26C0B0FC19FF3F28D9890014CC910078DEB1410000F03F
+FCA9F1D24D62503F0000F0BF01000040E17A843F80842E
+4153EC1A2BF1940300E480001AF42AB0B0EE408AF0EE60
+8A704700002046D3F41BB30000B4EE600AF1EE10FA7047
+00002DE9F0412DED048B0546D4B00E4617462969321D01
+A89EF4E1F79DF80400012818BF042875D006289FED3A8B
+76D105F50C6431462046A5F47DF02046A5F482F110B128
+4687F446F12046A5F4C5F110B1284687F43DF2002F5BD0
+05F618173879002856D10AAA0BA92046A5F4CDF100284F
+D000F0DDF9009800F57A7000900A981AF454F141EC100B
+0B9902A890F486F638688AF483F6B06BB0EE409AF0EE60
+9A8AF47CF651EC190B53EC102B1AF44CF1DDE908231AF4
+90F053EC182B19F4BAF7CDE90C010CA902A890F494F600
+2202A90EA891F443F1044600981AF427F141EC110B3868
+B0EE418AF0EE618A1AF41EF141EC100BB0EE481AF0EE68
+1A2246052118A882F49BF60146331D0422284685F499F3
+5CE1FCA9F1D24D62503F010018BF032804D084210FF66C
+30F2F7A7F80DF105009FF47DF102469DF80410A8680023
+9FF4F4F40028E4D006F1100108684A680B691043CA6889
+681A437379C00FD20F012B03BF4B0B03F0010383F00103
+012301F04041491E80F0010082F0010289411040184010
+EAD17FC3D005F54A68404688F460F0002840F0F3807079
+012806BFB069040D0024F0681AF4C0F041EC100B214605
+A890F48AF200275CB30022311D684628F41FF628688AF4
+C0F5694658F4D9F6F8B128680023002269468AF4B0F104
+0017D0207B800614D52868A5F45CF31AF49CF041EC190B
+94ED060B05A902A890F41EF302A905A890F46EF2012700
+F0F5F806D1B06B002805D01AF487F041EC190B00F0EBF8
+00F0D28000F001F91FB9009800F57A7000904FF4FA6000
+9928F459F60090DDE9082351EC180B19F4F2F6CDE90C01
+0CA905A890F474F2404688F42BF058B905A890F4A3F2B0
+EE401AF0EE601A009900F0B4F888F4FCF07079012809D1
+404687F4F0F728B9009A05A900F0A7F888F453F02846A5
+F408F3B0EE408AF0EE608A36A882F49FF5404687F4DCF7
+B0B14046A5F4FEF290B900F097F887F4D5F700F0A1F807
+4617981AF42FF000F0A5F800F09FF8404687F4EAF70527
+49E0404687F4E9F7002826D04046A5F4E6F210BB28469F
+F49EF0F0B1012200F038F9294618A800F0A8F818A902A8
+83F4BAF002AA00F06BF887F4D5F700F075F8074617981A
+F403F000F079F800F073F8404687F4FEF706271DE07079
+012820D128469FF478F0E0B9002205A90EA890F4F4F704
+46009819F4EAF741EC110B22460021B0EE490AF0EE690A
+18A882F4F1940390E7800067F500F051F80427331D3A46
+36A9284685F462F205A890F49FF128469FF454F04FF000
+0878B1B26B0123294618A885F4EDF418A902A891F423F1
+02A905A890F49DF10DF114084246314605F11800A0F475
+F605F11800A0F4A3F710B1284686F453F701A875F4D6F5
+54B0BDEC048BBDE8F0810000B0EE490AF0EE690A404670
+47B0EE480AF0EE680A414612A87047000053EC192B0020
+002119F4C0B5002214A90EA890F493B70000014636A882
+F488B541EC110B3A4600219DED120B18A882F407B50000
+6B4608AA311D284685F402B210B5044604F5FB60A3F466
+F220B12046BDE8104087F43EB010BD0000F8B50D462DED
+048B05F5156784B00446B0EE408AF0EE608A1646394682
+F4D4F43846A0F46DF39FED549BB0B984ED069B51EC180B
+0022DFF89C371AF419F041EC100B2BF42BF653EC102B00
+20DFF8841719F4C4F541EC100B01E000F05DF8204683F4
+74F1F6B2002E52D02046A0F448F300284DD005F6D81630
+4683F44FF5002846D0D4E90601D6E9002319F431F7DFF8
+4827DFF8483719F4A1F58DED029B8DED009B41EC180BE8
+686A4602A99EF414F2DDE9020153EC182B19F490F5D6E9
+022319F45EF641EC100B204682F4A9F551EC180B21F000
+4141EC100B53EC102B0020DFF8FC1619F47AF5DDE90023
+05460F46DFF8F006DFF8101719F442F62A463B4619F46C
+F5D6E9042319F43AF6C4E9080104B0BDEC048BF1BDB0EE
+480AF0EE680A70470000B1F5806F0EDA90F9980C10F101
+0F06D16629ACBF01F5006101F5406102E080B201EB8021
+88B2704710B5A2B004469FED090B684690F48CF001469F
+ED061B9FED050B04A882F44EF40146204686F470F022B0
+10BD000000000000000070B59EB00D46044604F5116620
+6882F441F338B1012D18BF052D03D1707808B1B07820B3
+2946204688F46AF0012D0CBF01210021204685F483F74F
+F0FF3084F8980C012D18BF052D0BD0684682F4E0F30146
+04F5216082F47DF46FF07F0084F8880A307818B1012120
+4687F4F3F11EB070BD00002DE9F74F2DED068BD8B08346
+3AA882F4C5F309A890F430F006A890F441F1684690F44C
+F203A890F48FF358469EF4DCF60026C8B1012259461CA8
+85F46FF31CA93AA882F44DF409A93AA882F4A1F506A93A
+A882F401F669463AA882F42DF603A93AA882F485F60126
+584684F4D5F6824600209FEDB79A9FEDB78B0CAC0DF170
+0808EBC00181ED008B04EB8001401C0F2881ED009AF4DB
+DFEDB19AC4ED059A0BF17000A2F409F39FEDAEAA38B10B
+F17000F1940320EB8000A2F4FAF288ED0A0B84ED05AABA
+F1000F0BF50C690BF5FB670BF508655FD0C4ED019AC4ED
+0A9AC4ED099AC4ED0B9A36B9C4ED029AC4ED039AC4ED04
+9A94E009A90BF11800A0F494F740B109A90BF11800A0F4
+9CF788ED020B84ED01AA2846A5F437F170B106A92846A4
+F4BCF000F08AFAC8E9120106A92846A4F418F100F07EFA
+60623846A3F418F370B169463846A3F417F300F077FAC8
+E9140169463846A3F43BF300F06BFAA0624846A5F41BF1
+30B9C4ED029A2846A5F405F1C8B927E003A94846A4F48D
+F600F05DFAC8E9160103A94846A4F4EFF600F051FAE062
+E8E7002EC4ED029AE6D1C4ED039AC4ED049A9FE006A928
+46A4F412F000F044FAC8E9040106A92846A4F45CF000F0
+38FAA060C4ED039A3846A3F4AAF170B169463846A3F4AD
+F100F02FFAC8E9060169463846A3F4CFF100F023FAE060
+C4ED049A4846A5F4CBF070B103A94846A4F4E6F500F01A
+FAC8E9080103A94846A4F430F600F00EFA2061BAF1000F
+63D0CDED0C9AC4ED069AC4ED079A0BF17000A2F468F200
+283AD00BF17000A2F44CF200F0FCF9CDE91C01DDE91C23
+D8E904018DED0CAA19F456F5C8E90C0194ED020AD8E906
+01DDE91C2330EE0A0A84ED060A19F448F5C8E90E0194ED
+030AD8E90801DDE91C2370EE0A9AC4ED079A19F43AF594
+ED040A30EE0A0A84ED080A9FEDD70AC8E91001F4EE409A
+F1EE10FA1CDB3846A3F48EF1C0B169463846A3F4C7F100
+F0B9F909EE900A94ED070AF4EE409AF1EE10FA09D56946
+3846A3F47EF100F0AEF9C8E90E01C4ED079AD8E90601D8
+E9042319F408F5C8E9180194ED020AD4ED030A30EE200A
+84ED0C0A3846A3F4C3F170B169463846A3F4C2F100F090
+F9C8E9180169463846A3F4FCF100F084F920630020B349
+D1ED009A0BEB8001D1F8082B00EE102A00F071F90BEBC0
+020FD008EBC00102F529621EE000BF0024F44900000000
+000000000000FA436F12833AD1F8301C00EE101A00F058
+F914D004EB8001D1ED000AB4EE600AF1EE10FA0BD508EB
+C00102F6B83292ED001B81ED001B04EB800181ED000ADB
+F8B41BC140C9070DD5BAF1000F0AD104EB800191ED000A
+B4EE490AF1EE10FA48BF81ED009A401C0F28B2DB9BF960
+0910F1010F7AD000277E1CC7F10B00354607FB00FA0EE0
+51EC110B53EC102B19F487F408EBC902C2E9000104EB89
+0080ED009A6D1C062D5EDA9BF96009874218BF8542F6D0
+022F18BF022DF2D00AEBDA714910CA1BA918491EC9B254
+F8213000F0F7F8E6D0C0B2C0F10B034343874202DA8218
+521EF19403B0EE800005E003EBD37207EB6202521E121A
+D2B254F822C000EE90CAF4EE690AF1EE10FACDD0A84205
+DA03EBD3735B101B1AEB1807E0C5F10B036B4303EBD373
+5B105B1BC3185B1E5FFA83F954F8293030EE209A00F0C4
+F804D0B4EE409AF1EE10FAAEDA08EBC101874291ED001B
+08EBC20191ED000BA2BF51EC100B81F0004141EC100B8F
+E73746062F85DB5846A0F44BF019F4FDF341EC190BD8E9
+020153EC192B19F40DF4C8E9020153EC192BDDE91C0119
+F405F4CDE91C01D8E906239FED40AB51EC1A0B19F443F3
+C8E9060153EC192B51EC1A0B19F43BF341EC1A0BD8E90E
+0153EC1A2B19F433F3C8E90E01D8E90C2300F087F8C8E9
+0C01D8E9102300F081F8C8E9100153EC1A2BD8E9140119
+F41FF3C8E91401D8E9122300F073F8C8E91201D8E91623
+00F06DF8C8E9160100259DF97C014FFA85FB8345FFF7D5
+FC22D0024693459FED200B594603DA9FED200B58461146
+C0F10B02424302EBD272C0EB620040FA81F0471E08EBC7
+0053EC102B4168006819F41AF241EC100B54F8270001EE
+100A01E09FED151A6098594682F4DDF06D1C062DCBDB58
+B0BDEC068BBDE8F78F000000006940FCA9F1D24D62503F
+80842E413A8C30E20BD7A33B984A09000000000000002C
+C0000000000000F03F000000000000F0BF8E79353E0000
+000000EE103AB4EE690AF1EE10FA7047000051EC100B1B
+F4BCB351EC100B81F000417047000051EC190B19F4A2B2
+70617463685F676C70655F74696D656D67722E63707000
+0038B504460A4820600D4605F1080104F10800ACF40BF1
+05F1200104F120008FF4FDF495F82C0084F82C00204632
+BD00BF44C9000090F8B0097047000080B525F42FF10146
+0020002918BF032903D0062918BF0B2900D1012002BD00
+0019B102291BD00DD31CE0022804D0042805D0062813D0
+15E09FED360B70479FED370B7047002818BF032802D005
+2803D008E09FED340B70479FED340B70479FED350B7047
+9FED350B7047000010B50C4690F9011011B1012908D018
+E00078762815DB9A2813DA9FED2F0B10BD24F45AF620B1
+032804D0042806D008E00CB106E02CB99FED2A0B10BD9F
+ED2A0B10BD9FED2B0B10BD90F9011011B1012908D00FE0
+007876280CDB9A280ADABBEE080A70470078512804DB76
+2802DABBEE040A7047BBEE0E0A7047000090F901100129
+02D0022908D00AE00078762807DB9A2805DA9FED180B70
+479FED190B70479FED190B704700000000002025DFD741
+000000C41D43D74100000020EC4AD241000000A8DFFCD1
+41F1940340F28000000000F4CC87D14100000018C079D7
+41FCA9F1D24D62703F000000000000F83F7B14AE47E17A
+843FFCA9F1D24D62503F1CD8C6816D1CA8BF99968D69D9
+9896BF000000000000000070B5A8B004460D46164628F4
+97F340BB214602A828F494F309E00020864203D101A928
+4626F4CAF102A828F485F302A828F480F3A8B902A96846
+28F487F3684627F4B2F704009DF800008DF8040006D068
+465AF40DF50028DFD0012CDDD10120DCE728B070BD0000
+38B504460D4624F40FF621462846BDE838400122C0E700
+0038B504460D4624F403F621462846BDE838400022B4E7
+0000C948FCF7F7BA00002DE9F0412DED048B9EB0044688
+4616461F4604A855F46AF002464146204681F4AFF69FED
+BE9A80B30020CDE9080006908DED059A06AB206808AA41
+4684F420F4384689F429F7DDE9082351EC100B19F4F9F1
+41EC180B0CA881F4CAF4DDE908230746A568AF48B04919
+F462F000973346CDE90A012E6876690AAAB0EE480AF0EE
+680A04A92846B04728B904A874F4F6F7B0EE490A1DE0A0
+68299B289A05A9039100210291019100910CA90668B66A
+B0479DED050AB5EE400AF1EE10FA04D5A0680268D26941
+46904704A874F4D7F79DED050A1EB0BDEC048BBDE8F081
+2DE9F0410446E8B020689EF423F200283ED0216801224A
+A884F4B6F60025894E2946204680F4BCF307002ED03A68
+D2F88C20394602A8904702A924A89EF4FCF10EE04AA906
+A881F4FBF6024641463046FCF714FE684678F49FF724A8
+9EF4F2F124A89EF4F1F180B924A89EF4EFF1C1B268468F
+F4F1F03B681B6B01460122384698475FEA0008DCD1E4E7
+6D1C072DC7DB68B0BDE8F081000070B582B00C4615461E
+467CF4D5F5024600962B4621466548FCF7EEFA76BD0000
+F0B5A5B004460D4616461F4612A881F425F45D48049002
+A890F474F5684690F471F506A890F46EF5014602AB6A46
+0CA880F43CF006A890F457F512AB324629462046FFF7CD
+FFA0B139460CA880F466F02A9906A87FF492F7A06804A9
+039106AB00210291019100910CAA0468A46A12A9A0479D
+ED040A25B0F0BD000010B50446D4F8BC0208B197F467F3
+012018E0000010B50446A068016889688847D4F8BC0208
+B197F463F3012084F8B30910BD000010B50446D4F8BC02
+08B197F45BF3002084F8B10910BD0000F8B52DED028B0E
+46A0B0054630780024052850D10E2101A88FF45EF00146
+701CE4F480F270B9122168468FF455F06946701CE4F477
+F2070018BF0127684678F4EBF600E0012701A878F4E6F6
+F19403D0F580009FB33178284680F4FFF270B303681B6B
+0122711C9847060027D03168C96B8847032822D1296801
+2202A884F4C7F53168C96A3046884733681B6A05460122
+02A930469847B0EE408AF0EE608A680819F497F000220B
+4B18F4E9F753EC182B23F0004318F4D1F698BF012420B0
+2046BDEC028BF2BD0000B4C2C8C89100FCA9F1D24D6250
+3F00005EC02DE9F24F0446C81D0E28BEB004D317210FF2
+5C40F1F718F820687CF4EFF49EF4F5F080469DF9F800C0
+1D8DF812000C219DF8120011FB004000F5CA7694F85104
+002824D104F558794146484698F4BEF378B14846A9F4B4
+F305462168484698F4BFF335B94846A9F4ABF310B12046
+98F46DF3B07A3268717A00281BBF707A01280120002042
+4504D1002901D0002866D1A3E1C6F8008049B1D24B7268
+53F82110A8EB02028A4258D30020707204F58567002538
+68CC49884205D0A8EB0000CB4A90424ED33960B07A0028
+E1D1C6F804804846A9F47DF30028DAD025B900F090F900
+2084F83C029DF81000002804BF9DF811000028CCD02068
+A9F46EF30690002504A82F5C002F73D0394668468EF47A
+F70146069803681B6B012298475FEA000A63D0DAF80010
+C96B884701285DD14846A9F456F3014650468AF442F400
+2854D137725046DAF80010C96C884700281DBF01200021
+B172022039E00028A6D0307A3CE100F04DF984F83C5201
+259DF8100004F22C4A80B1F8689DF81010C840C0070AD5
+9DF8110020B10146504627F4C8F210B19DF8100012E09D
+F81100002892D0F968C140C8078ED59DF8100028B10146
+504627F4B5F2002885D09DF811000028FAD00321717230
+72C6F8048006E100F023F9707A20B1B17A002918BF0128
+01D06846E9E0347A6846EBE0684678F4AAF56D1CEDB202
+2D83DB4846A9F4F3F2002800F0EB804846A9F4EFF24FF4
+96720421B0FBF2F027F4FCF40FF27021C0B20025405609
+9004A8285C0790002800F0D080014605A88EF4E6F62CA8
+81F441F2069803681B6B012205A9984700275FEA000A3B
+D04846A9F4C4F2014650468AF4B0F398BB5046A4F43AF4
+01280ED1DAF80020926D04215046904710F1080F05D19D
+F9F820069805A997F4ADF14846A9F4A8F2DAF800305B6B
+01462CAA9FED550B50469847DAF80010C96B8346504688
+47012818BF022806D1DAF80010C96C5046884700B10127
+BBF1000F32D1206887F454F1DAF456F110F0480F77D112
+A8FBF73AFF05A89DF48BF7024612AB02214248FCF76FF8
+002869D0484608F090FE8246524612A90AA8FBF7C0FFF1
+940360F9800000220AA90DA88FF4F9F60246514668468F
+F4D6F068468EF40DF700232CAA12A93348FCF7D3F88346
+BBF1000F49D0314808902068A4F48CF482464846A9F452
+F283464846A9F450F208A9039102460021029101910091
+5B46DAF800C0DCF828C02CA95046E04709A8DDED080A90
+F9000000EE100AB8EEC00AB4EE600AF1EE10FA1FD50798
+307247B14846A9F429F20A2803D200210120B17200E003
+2000F038F8707A20B1B17A002918BF012803D005A878F4
+C4F40DE0347A05A878F4BFF4204608E005A878F4BAF46D
+1CEDB2022DFFF625AF00203FB0BDE8F08F0000E0810A00
+FF2292FF40771B000000000000000000C8C891000000B4
+C2012084F83C020DF111039DF9F81004AA204698F435B0
+0000707241469DF81220204698F431B1000038B50C2312
+FB0305004C01E0FF2292FFC5F8E84113FB0103C3F83442
+BDE8384070B504460D4694F83804164628B9F822182104
+F2394019F441F6012084F83804281980F8386470BD7061
+7463685F676C70655F676C6F66636E6F736E6D67722E63
+70700000050A0F2D0000002DE9FC4F83B08046D0F40CF3
+002840F0CF8000F0F9F901904FF47A70009000200E9901
+2608704FF47A731C2101FB008101F214610A783AB18988
+D8F88C2659438A42894106EAD176401C0328EDD30198DF
+F8C89600F5FA700127029008F5C66408F26A6524E0022F
+20D199F80000E16A0028029814BF95F800A04FF0000A88
+426BEB0B0B6FEA0B004FEAD07B287848BBD9F8080030B3
+00F0B7F9D9F80810D8F88C26511881428041C00F1CE001
+2F38D1E06810B92878002106E002992269002091428941
+C943C90F22780843024228D00198E0604FF47A720198A1
+8802FB010020611EE00020217FD9B14AEA0B0181F00101
+314303D0A6B12978084311D00198A0624FF47A72019821
+8C02FB0100E06201200E990870BAF1000F1CBF002089F8
+00007F1C032F9ED39DF80C1008F5C260A9BB08F2BC6671
+7839B13178022902BFA97C012941F2883006D0A97C0129
+1CBF0078002801D07068009008F28C610098C96A88420A
+D008F28C60806802680099D2689047009808F28C61C862
+A87C012804D13078012818BF012000D100200499087040
+4605B0BDE8F04F0022E8E10079002804BF207F002802D1
+0E990120087005B0BDE8F08F000000F214610A78097F90
+F84C0642EA410141EA8000C0B270472DE9F0474FF6FD74
+8046A14282B008F27465DFF83C650FF23C593BD100F0CC
+F80FF25C5276690FF2DC540E21B0472E6A00F002F9F194
+03F0FC800003463046D8F8C4160FF26C5200910E213668
+7669B04798F869060FF28052002814BF54214621286A00
+910E210668D8F800307669B04700260DE0182101FB0681
+286A097F009133460768D7F814C022460E21E047761CD8
+F800008642EDD38EE04FF6FF7C614508F21464DFF8AC74
+2AD1162028F4A5F00FF2885A40B124F4ACF1CDF8009033
+465246162128F4ADF000F079F8766952460E21B0474046
+FFF78AFFF8701C21012088F8BE06E068E86320461AF43E
+F61C2108F5C6601AF439F6002088F869065BE04FF6FE76
+B14227D1207850B9E06068602860286A01680969884700
+20B8800120B870F87868B14046FFF761FF0321084207D0
+00F084F80546D0F483F42946D1F496F4404600F0D7F900
+2088F8BE0602B04046BDE8F0476EE04FF6FC76B14204D1
+BDE8FC470121D9F406B5180507D501202077E183208463
+840020E0621CE018061AD4012020706180A280E3800A98
+00B9032020810B9860810D9E0EB9002002E000F04DF830
+182061002E0CBFE86B0020E06066610E98A061BDE8F387
+0000286ACDF800903346066870472DE9F041804682B00F
+461446162028F40FF058B124F418F10FF27431DFF86C33
+0FF268420091162128F416F008F24C65DFF854635FB101
+202870AC8000F01AF80746D0F419F43946D1F42CF403E0
+00202870A880F0800020286101203070404600F064F940
+4602B0BDE8F04100220121B6E000004046D9F43DB50000
+2DE9F0478046894627F466F04846D9F433F509F2146582
+46E86809F5CD6630B9B17821B169694C1EA441E40F00E0
+0024002804BF6869002807D0306D29695044A0F5FA7088
+4228BF0124B078AF4F58B9B86848B14846D9F40FF5B968
+726A511881428041C00F00E00020A979890703D5B97809
+B1B1780C43012100224FF47A734FF01C0C0CFB029C0CF2
+146E9EF800C0BCF1000F0AD0BEF804E0D6F824C003FB0E
+FEF4456CEB0C0C01EADC71521C032AE6D32A7802B384F0
+01020A4303D0D9B1B178084318D0C5F80CA0A88803FB00
+A028614046B5F9021026F438F63069401C3061B07820B1
+F068401CF060002000E00120B87000206861287F00281C
+BF3078002806D0B5F91E104046BDE8F04726F41DB6BDE8
+F08700002DE9F843804608F26A650C46687F794F84F001
+0630430ED14046FFF739FE38B9FFF75EFF8146D0F45DF3
+4946D1F470F3FFF756FFB8606C7714B900202870B86032
+464046BDE8F8435FF000012DE9F84F82460AF2BC640027
+A0786FF0504800281646C1464ED10AF27C6531B9F19403
+800081002078012818BF022801D0607870B92F70002150
+46D9F48CF483465046D9F46AF45844C345A06006D10127
+09E028780128EED10121EDE7286958453CBF0127D94628
+7B48B31EB13FBBA869012118E0E87A88B157B1A8690268
+9268002190470120A8720020C145686008D1A869016849
+68BDE8F44F084747B1C145F6D0A8694946BDE8F84F0268
+12681047A86902689268BDE8F84F01211047BDE8F18F4F
+F47A725143C0F88C16704770B5044604F5D3660D463560
+23F4C8F73AF43CF4706085B94FF4C161204619F443F22F
+4800218180C180816001700121817000214170C1600161
+70BD284841707047000026484078704700002448C16002
+6170472248C3680B600069106070471FB5029103920021
+0020D0F491F10168896B884708230468A46902AA48F2A3
+11A0471FBD70B500F24C6400F2146521782878134EE8B1
+C1B1A188A88827F460F0A988B1804FF47A73A288F28043
+43226C9A4214D291FBF0F111FB00F1A980F18891FBF0F1
+11FB00F008E0B08838B1A88070BD00291CBFF088002800
+D0A08070BD8492890037DB07002F2F6465706F742F636C
+69656E742F636F72652F72656C2F476F6F676C652F5032
+312F4652432F2E2E2E00007E24247E5056542044756D70
+203A20474C4C207665722E20256C7520666C6167746169
+6C3A25730A000000007E24247E5056542044756D70203A
+2054203D20256C752C204E54203D20256C750A0000007E
+24247E5056542044756D70203A2047656F66656E636520
+3A206E756D203D2025642C20496E646F6F72203D202563
+0A000000007E24247E5056542044756D70203A2047656F
+66656E6365203A206964203D2025642C20737461747573
+203D2025640A00474C4C207665722E20256C7520666C61
+677461696C3A2025730A0000474C4C207665722E20256C
+7520666C61677461696C3A25730A00000070B52DED068B
+06469AF402F4022804D130469AF4F9F3022802D0112100
+F0EAFB0122022100F0FCFC00F0F2FC00F0F7FCB0EE409A
+F0EE609A00F0F0FCB0EE40AAF0EE60AA53EC182B51EC19
+0B18F470F004460D460222022100F0E2FC51EC100B00F0
+D2FC02460B462046294618F4AAF20122DFF83C3C18F41B
+F025D9022200F0CEFCB0EE408AF0EE608A0122022100F0
+C7FC51EC180B53EC102B18F4D3F121F00041DFF8102CDF
+F8143C18F401F00BD900F0B4FC00F00CF806D302220221
+00F0AFFC00F005F801D2002000E0012045E251EC100B00
+22002318F40EB038B5044604F10C0500202872F1940310
+0481006872A872204608F02FF900202860686004F55560
+DFF8B81B016000220021416004F69450002300252EC004
+F65850BDE83440382119F4C4B02DE9F84F2DED0E8B0C46
+ECB0206BDFF8881B8842154600F0678105F110009AF467
+F3A0B904F14C004EC84EC5606B1AF419F2CDE90801103D
+00F072F900F06EF900F066F900F076F900F06EF922E105
+F19800B7EE000A90ED019AD0ED029AD0ED060A216BD4ED
+0EBA94ED0D8AD5ED26AA94ED0FCA94ED1ABA94ED1BAAC0
+EE20CAD0ED070A006A80EE20DA401A00EE100AB8EE400A
+DFED970A60EE20DA2BEE89EAB0EE4E0A08EE2A0A00F02E
+F9CDE92C0128EE090A0BEEA90A00F026F9CDE92A012BEE
+AA0A9FED8C8B0CEE090A8DED288B8DED268B00F018F9CD
+E924010CEE29EA1EEE100A1AF4BEF1CDE922016DEE8BBA
+2BEEAA0A8DED208B8DED1E8B00F004F9CDE91C012BEE89
+0A00F0FEF8CDE91A012BEE2C0A00F0F8F8CDE918016DEE
+8AAA2AEE890A8DED168B00F0EEF8CDE914012AEEA90A00
+F0E8F8CDE912012AEE0D0A8DED108B00F0E0F8CDE90E01
+28AB0EA80C902AAA10A80B902CA912A80A90002614A809
+9016A8089018A807901AA806901CA805901EA8049020A8
+039022A8029024A8019026A800904AA87BF4CDF606F101
+0B012200F0B4F88146022200F0B0F88046032200F0ACF8
+8246042200F0A8F8074604EB8600C06C1AF454F1CDE900
+0128681AF44FF102460B46D9E9000117F41FF7DDE90023
+17F4EDF7CDE9000168681AF440F102460B46D8E9000117
+F410F7DDE9002317F4DEF78046A86889461AF431F1DAE9
+002317F403F742464B4617F4D1F78046E86889461AF424
+F1D7E9002317F4F6F642464B4617F4C4F71AF4D2F002A9
+41F826005E46042EA8DB02A84EC84EC5022202214AA808
+F042F8103D05F1A40106A808F05CF806A905F110007CF4
+5BF028A87BF4ACF505F110024AA97BF45BF74AAB012228
+A905F110007BF498F704F1340106A808F043F806A905F1
+10007CF410F005F11000FFF722FE70B9606B1AF4E0F0CD
+E9080100F03AF800F036F800F02EF800F03EF800F036F8
+206B05F19801086204F1400105F1A40008F042F805F198
+00216E8161616EC16104F1400005F1980108F03CF86CB0
+BDEC0E8BBDE8F18F00006F12833A000000000000000059
+464AA880F4D2B210EE100A1AF4AAB0CDE90401E06B1AF4
+A5B00000CDE90601A06B1AF49FB000000146842205F110
+0018F45CB7CDE9020104AB02A8009006AA08A90AA87BF4
+8AB570B50C462DED068BD4E9060115461E46F19403A007
+81001AF43CF008EE100AD4E908011AF436F008EE900A7D
+B195ED020AD4ED150A30EE600A30EE088A95ED030AD4ED
+160A30EE600A70EE288A28EE080A08EEA80A06F11C0529
+F4C1F685ED000A94ED1A9AD4ED1B9A39EE290A29F4B7F6
+F0EE000A85ED010A60EE200AB6EE000A26F48BF5D5ED00
+0A00F083F84CBF012000206876687E58B3F0EE480AB0EE
+680A29F467F6B5EE400AF1EE10FA44BFDFED5E0A30EE20
+0A9FED5DAA20EE0A0A85ED020A29EEA80A20EE280A69EE
+080A00EE880A29F484F6D5ED000A60EEA00A80EE200A60
+EE0A0A9FEDD80A26F410F502E0A8609FEDD60A85ED030A
+BDEC068B70BD00002DE9F043154687B006466869DFF844
+970C461AF405F041EC120B95ED021B95ED000B684606F6
+385880F424F206F5556605F13407316849450DD1002070
+600020B87069467068E862346040467EF4AEF507B0BDE8
+F0833978B9B195ED070ADFEDBC0A00F015F810DB014640
+467DF47AF700F00AF900EE100AD6ED010A30EE200A86ED
+010A30684845D9D03878D8E70000B4EE600AF1EE10FA70
+47000030B5044604F68C50CFB000210170007E002839D0
+204607F053FFA8B31EA807F057FF02A807F064FF1D2529
+46204607F093FF014602A807F0ABFF1EAA02A92046FFF7
+6EFD6D1E6DB2002DEED522A89AF4DFF000281EBF0E98DF
+F85C16884213D004F658552B461EAA02A92046FFF7FCFE
+009522AB1EAA02A9204600F01DF90E992A462046FFF76E
+FF4FB030BDDB0FC940E12E65422DE9F0412DED088B0446
+8AB094F8A40D00280D46B0EE409A164600F09480002E00
+F08E8000F0B0F900F096F809EE900A022200F0AAF900F0
+8FF80AEE100AB1EE691AF0EE4A0AB0EE690A684607F084
+FF0322032100F07DF80646032200F078F80746012200F0
+74F88046D6E9000119F4F7F601EE100AD7E90001B0EE41
+8A19F4EFF600EE900AD8E9000100F0F7FA00F017FB06A8
+07F060FF0246694603A807F063FF01466A46204607F064
+FF0222022100F04FF80C3400F0E9FA08EE100A04220221
+00F046F800F0E1FA0AEE900A0422042100F03EF800F0D9
+FA08EE900A00F0C9FAB0EE40BA00F0C1FAF0EE000A6AEE
+A00A60EE890A60EE8A0A60EEA9AA68EE0B0A68EE80BA30
+EEEABAB0EE4A0A26F489F40BEE80BA84ED00BAB0EE4A0A
+26F481F4B0EE40AA00F0A1FA48EE0AAA28EE808A00F09F
+FA48EE00AAC4ED01AA02E0FE2100F00DF80AB0BDEC088B
+BDE8F081012128469AF406B051EC100B19F480B60FF248
+60EFF7BEBD2DE9F0438046CFB098F8A40DF19403300B81
+00894618B1404607F03BFF20B14046FFF761FC002042E0
+1EA807F056FE02A807F063FE404607F034FF471E00267C
+B22FE02146404607F08CFE014602A807F0A4FE1EAA02A9
+4046FFF767FC22A899F4DCF700281EBF0E98DFF8581488
+4217D0382000FB0490A0F138052B46324602A94046FFF7
+F6FD009522AB324602A9404600F017F80E992A464046FF
+F768FE1EAE641E012CCDDA4046FFF71DFCB8B24FB0BDE8
+F08300000000344300000000CECCCC3DF8B52DED068B9E
+B004460D4617461E4668468FF4D7F1002F30D09FED432B
+286D00F02CFA9FED42AB00F092F800F0F6F9E86C00F029
+FA00F08BF800F07DF818A87DF452F2024629460CA87EF4
+6FF1786819F43CF641EC110B386800F009FA00F06BF812
+A87DF440F202460CA906A87EF45DF106A968467EF4EFF3
+02E029467EF4EBF300F06FF800F067F8022100F06CF853
+EC182B51EC100B17F4C0F419F4CEF504F6385400EE100A
+29F46EF42A9E286BD3493063B0EE408A012086F83400A0
+6988421CD096ED070ADFEDCA0AFFF736FE15D569462046
+7DF46DF551EC100B0022C94B17F4ADF30AD294ED000B86
+ED000B94ED020B86ED020BD4E9040109E09DED000B86ED
+000B9DED020B86ED020BDDE9040119F493F5706186ED04
+8AE86DB0611EB0BDEC068BF1BD00000000000000000000
+00000000F0BF41EC100BB0EE492AF0EE692AB0EE481AF0
+EE681A7047000053EC1A2B17F490B3B0EE408AF0EE608A
+0222704701220121304699F4F9B600002DE9F84F2DED0C
+8BB8B004464F9F894690469B461FB94FF4A671FFF7D7FE
+04F69455287C002820D0DFF864A2D14503D1684607F049
+FD1CE1204607F011FEA8B9204607F015FE461E00E0761E
+36B2002E0CD43146204607F06BFD006B5045F4D04845F2
+D32046FFF725FB06E19FED8B2B686800F04BF900F019F9
+286800F04CF900F01CF901463A4616A87EF45BF29FED83
+1BA86800F034F900F010F901463A4610A87EF44FF2DDE9
+160119F40FF5099009ADDDE9180119F409F56860DDE910
+0119F404F5A860DDE9120119F4FFF4E860012201213846
+99F48BF6FFF773FE09EE100A02220121384699F482F6FF
+F76AFE09EE900AB1EE491AF0EE690AB0EE490A06A807F0
+5FFD4E9F0322032100F0CBF80646032200F0C6F8054601
+2200F0C2F88246D6E9000119F4D1F401EE100AD5E90001
+B0EE418A19F4C9F400EE900ADAE9000100F0D1F800F0F1
+F80DA807F03AFD024606A9684607F03DFD014606AA03A8
+07F038FD0222022100F09DF800F0C4F8F19403C00E8100
+08EE100A0422022100F095F800F0BCF80BEE900A042204
+2100F08DF800F0B4F808EE900A9BED000B9BED02AB53EC
+102B51EC100B17F4B0F205460E4653EC1A2B51EC1A0B17
+F4A8F22A46334617F476F319F484F400EE100A29F426F3
+F0EE40DA00F082F8B0EE40AAB0EE6D0A26F458F2F0EE40
+AA00F07CF8B0EE40BA00F078F8B0EE40CAB0EE6D0A26F4
+4AF2F0EE40CA00F06AF8B0EE40DA0522052100F04BF809
+A90291B0EE000A03A9009101942BEE800A4168006820EE
+2D0A20EE290A20EE099A19F44BF4F0EE490A48EE0C0A28
+EEAC0A40EE0D0A04F10C0728EE0A0A02EE100A30EE490A
+68EEAA2AD7ED011A97ED001A02EE8B0A5B46424649461C
+A807F001FD0146204600F0A3F838B0BDEC0C8BBDE8F18F
+CDCCCC3D0000F03F8EEDB5A0FF2292FFF7C6B03E000059
+4000000000000000000121384699F492B541EC110BB0EE
+482AF0EE682A7047000041EC100BB0EE492AF0EE692AB0
+EE481AF0EE681A684699F4FFB50000B0EE490A26F4D8B1
+B0EE690A26F4D4B1B0EE481AB0EE608AF0EE418A19F4EA
+B34168006819F4E6B3B0EE418AF0EE618A19F428B4B0EE
+428AF0EE628A19F422B4B0EE418AF0EE618AB0EE429AF0
+EE629A19F418B400EE100AB0EE681AF0EE480A70470000
+70B500F694550C46287C002831D0012100F034F8064628
+6819F402F400F02AF819F4B6F32860032100F028F80646
+686819F4F6F300F01EF819F4AAF36860022100F01CF806
+46A86819F4EAF300F012F819F49EF3A860042100F010F8
+0446E86819F4DEF3D4E9002317F482F219F490F3E86070
+BDD6E9002317F47AB220467FF4CBB5000070B504460E46
+94F8A40DB8B1204607F063FB04F11405002895F9010031
+4606D000F014F800F00CF86878287070BD00F00DF800F0
+05F8A878401CA87070BD000004F11501204607F075BC00
+00702210FB0240183007F0A8BB70617463685F676C7065
+5F6E6176737466696C7465722E637070000070B504460D
+461646284604F65851382218F44EF2296BD4F8900D3246
+BDE8704084F48EB730B58BB004460D4668460FF2580128
+2218F43CF2284622F447F630B1032812D0042809D00528
+0ED00FE02878001990F8030E032809D106E02978684608
+1810F8510C032801D1012000E000200BB030BD80B5A2F4
+73F6042816BF03280120002002BD000002020202020303
+0303030303030302020203030303030303030303030303
+0303030303030300000010B5044604F5995049F4FCF741
+F21C310020085510BD000040684968F194035012810040
+1A0128ACBF4FF0FF30C00F704700002DE9F04FADF2844D
+044689461546984600264FF00C0B6CA80BFB060007F0EA
+FB761C3C2EF7DB05A825F446F7079840F04A0007904FF0
+000A4EA89CF463F730A89CF460F703464EA80090002221
+6808A87FF4DCF008A89DF4F7F2002708AEF9B230A89DF4
+87F0AAF451F050B1F9B24EA89DF480F0AAF44AF000F001
+0080F0010000E00120B8557F1C072FE8DB206885F46FF4
+D8F471F410F0480018BF01208DF80C0049460AA826F471
+F3DDF8A89411E06CA90BFB0A119DF810200A7048600F72
+0AF101005FFA80FA02A873F43BF00AA826F46AF30AA826
+F469F3002847D1BAF13C0F44DA0AA904A826F456F32068
+9CF48DF2014604AA02A89CF452F020680DF1090302AA04
+A98DF45DF10028DCD020689CF48AF29DF809209DF80810
+00239CF4E7F50028D0D0CDF8048000954B46206805AA04
+A9FDF7C8FF26F4C2F19DF808109DF80C20895D00271143
+08BF10F15A0F0AD1CDF800802B4620684A4602A9FEF77D
+F826F4ADF101270528A1DAACE7BAF1020F06DBDFF80835
+0C2251466CA899F4CBF390342046FFF725FF002508E06C
+A80BFB0501087A10B92046D3F4E7F46D1C5545F4DB0025
+08E06CA80BFB0501087A10B12046D3F4DAF46D1C5545F4
+DB30A89DF442F24EA89DF43FF20DF2844DBDE8F08F0000
+2DE9F84F2DED0E8BCAB00446ADF5805D20680D467AF404
+F69CF40AF204F50451064610310020088104F504501030
+4660287D00F001072868B7F42CF12868B8F445F700F04B
+FA4FF09442DFF8383417F433F241EC180B29462046D3F4
+4DF501202074287DC00627D42868B9F4C9F2DFED0A0A00
+F01FFA00D40FB1012020742868B9F4BEF2DFED050A00F0
+14FA08DB3FB900202074EEE100BF010048420100C84320
+7C0028F6D051EC180BDFF8DC23DFF8DC3316F477F7EDD9
+2868B9F4C7F200F00DFA41EC100B29F405F000F0FFF900
+F0F7F941EC1D0B2868B9F4B8F200F0FEF941EC100B29F4
+20F000F0F0F900F0E8F941EC1C0B2868B8F4E9F600F0EF
+F941EC180B2868B8F4D6F625F450F7B0EE409A53EC182B
+51EC180B16F484F70746894619EE100A19F4A8F13A464B
+4617F44CF041EC100B28F4FCF753EC102BD448D54916F4
+70F741EC1B0B287D80074CBF9FEDD29B9FEDD39B0027FC
+A8482101FB0700DBF446F17F1C2F2FF6DB2868B8F49EF6
+00F0B4F941EC180B2868B9F441F2002700F0ACF90022C8
+4B16F430F741EC1A0B12D253EC1A2B00204FF0804116F4
+42F741EC110BB0EE480AF0EE680AF19403E015810025F4
+62F6B0EE408AF0EE608A0AA879F4ABF62868B7F46AF001
+460AA87DF41CF70AA968467CF468F5694610A87DF4E4F7
+2868B9F40BF281462868B6F4ABF52868B0EE40EAF0EE60
+EAB7F44EF08046A6EB090000EE100AB8EE400ADFEDAA0A
+80EE200A00F065F902460B46D8E9000116F403F753EC1E
+2B16F4D1F7CDE9160120687AF4F8F4014608AB06AA6846
+83F4F4F09DED060B25F410F717F460F041EC100B26F48E
+F18DED180B0097002321680022DEA87EF4EBF604F11802
+DEA9C0A89CF42BF6C0AADEA9A2A89CF4F4F5DEA904F118
+009CF4A5F5A2A89CF494F500B96082608A401E608200B2
+012808DA3C20608200960AAB696810AA2046FFF7C1FDA0
+680FF2342AD7F49EF3804604F59851B0317CA826F47BF1
+04F1900912E05846DBF4E9F058B9594634A8DBF4EAF0FC
+A8482234A917FB0200D3F441F07F1C7CA826F473F17CA8
+26F472F1002840F096807CA903A826F461F16AA87FF4EE
+F2002102910AAB69690090C90801F0010101913246A068
+03A979F4AEF2C8B120689CF486F0014603AA68469BF44B
+F620686AAB32466946FDF793FE38B903A94846D3F4FAF2
+684672F40FF6C9E7684672F40BF603A94846D3F4CDF25F
+EA000B04D140F20F115046EEF77DFF03A940467FF475F4
+58B103A940467AF436F3816805914068049004A8029005
+A800E002900190B0EE495A6AA80090F0EE695A2168B0EE
+4B4AF0EE6B4AB0EE483AF0EE683AB0EE4A2AF0EE6A2AB0
+EE4C1AF0EE6C1AB0EE4D0AF0EE6D0A0AAB32465846D3F4
+5EF0594658A8DBF466F09DED620AFEEE000A00F064F816
+D4594646A8DBF45BF09DED460BD3F4F7F200287FF462AF
+594622A8DBF450F09DF8B400012803D1206803A97EF4E6
+F503A94846D3F48EF260E73FB217B90020608218E02868
+B9F4E9F004F5045010300025078104F504501030466042
+F2101248206843FCA9125941188018D2F486F76D1C2F2D
+F2DBA2A89DF406F0C0A89DF403F0DEA89DF400F04AB00D
+F5805DBDEC0E8BBDE8F18F000078DEB141010000E08E79
+453EE6ABFF8564AF0A4000000000000059400000000000
+002440000079404D12810000007A44B4EE600AF1EE10FA
+7047000051EC100B53EC182B16F4ACB52868B0EE408AF0
+EE608AB9F497B0000010EE100A18F4CAB770617463685F
+676C70655F6E61766169642E63707000000010B5044624
+F454F6DFF84C0D007818B1A06820F48050A060204610BD
+2DE9FE4F2DED108B0446ADF53A7D206F40689DF8301307
+903022CA9812FB010808F12C00F1940370198100049020
+A87FF4D0F1E16E096A0090CA0902F00102029201F00101
+019104F10803D8F814200499204679F48CF1002840F0DF
+8498A87AF430F476A87AF42DF40020069005909FEDD59B
+206F4169002914BF012700270169002914BF01250025E1
+6E0A7D002A16BF012A4FF001094FF000098068002814BF
+4FF0010A4FF0000A9DF85803B0EE49AAF0EE69AA04F582
+6670B191F8200080060AD5306807687F6A002304F12002
+20A9B84700F0BEFE92E0012A07D0F0687FF434F300F001
+0080F0010B01E04FF0000BE06E0721183025F49CF100EA
+0B0B049904F5BC707FF425F3E8B1BAF1000F14BF76A900
+21B9F1000F14BF98AA0022306801910023039302930092
+00F0EAFC049900F08FFE04F5BC707AF4D1F18168069140
+6805902EE05BEA05004BEA070714BF05A90021002F14BF
+06AA0022BAF1000F14BF76AB0023B9F1000F14BF98AF00
+273068009703910292019300F0C2FCBBF1000F00F066FE
+0DD09DED050AB5EE400AF1EE10FA06DD0499DDED060A04
+F5BC707AF463F1E06E007D002818BF012826D126A87FF4
+D2F200F086FCCDE9000128A87FF4CBF200F07FFCCDE902
+012AA87FF4C4F200F078FCCDE9080108AB02AA694654A8
+7AF4A4F3014698AB012232A87AF4DAF5012201217FF4DA
+F090ED00AB206F016931B194F8742001EB8201059A41F8
+042C416931B194F8742001EB8201069A41F8042C806948
+B194F87430882717FB0300842276A9883817F449F503A8
+52F446F40246049970687FF48BF250B1E06E016AC9040A
+D52368027D04991B6A2046984718B900F081FD0220D6E3
+9DF80C10B06808AA81F4F5F6DFF8600DDFF8601DCDE900
+010022694608A87DF4EAF2DDE92C239FED4ECB8DED080B
+51EC1C0B16F438F441EC1B0B98F82E0050B90499002220
+4600F0D4FD51EC100B00F052FD41EC1B0B049858F4ADF7
+032830D100200090706884F4DAF7694685F423F438B39D
+ED000AB1EE400A00F038FDDFF8F42CDFF8F43C16F40EF4
+CDE9080170687AF407F285F413F7012812D170687AF400
+F281F45AF660B170687AF4FAF181F492F6DDE9080153EC
+102B16F47EF5CDE90801DDE9082351EC1C0B16F4ECF341
+EC1C0B04993069002286F41DF000F007FD41EC1D0B08F1
+2C0025F4C9F2012806DB98F82E0018B1B0EE49DAF0EE69
+DA00F092FB0746D4E90E0153EC182B16F49DF453EC1C2B
+16F499F453EC1B2B16F44DF553EC1D2B16F491F4C7E900
+019DF85803002849D0E06E90F82000012740062FD59DF8
+0C0052F4C3F30546082D0DD1F19403001D8100ED210FF6
+2C40EEF7CBFC0BE000000000000000000000004A78DEB1
+41002D18BF032D05D004980078562803DB762801DA1427
+0EE0062D08BF04270AD0022D08BF0A2706D0012D03D051
+2802DB562800DA02270499F068002286F48AF60546CA98
+9DF8301301903A460798009094F87430CB987AF471F0C5
+F8D8000521E06E183024F4FAF7002800F0E8828DED109B
+B0EE498AE06E017D0129F0EE698A00F07AFC00F09E8000
+6AC00540F19A8012A887F49DF0029004F1080305A80190
+03A906A800902046D8F8142078F4BEF7694612A887F4A6
+F020B1DDE900239DED008B1CE00EA912A887F4A6F020B1
+DDE90E239DED0E8B12E00AA912A887F4A6F020B1DDE90A
+239DED0A8B08E00CA912A887F4A6F048B1DDE90C239DED
+0C8B0020002116F4EDF341EC1B0B9DF80C00022810D104
+9BDFF8FC2C93F900303B3B5BB202EBC30251EC1B0BD36B
+926B16F406F341EC1B0B00F0D4FA02280BD000F0D0FA05
+2807D000F0CCFA0C2803D000F0C8FA082804D153EC1B2B
+DFF8F40C16E0049825F4D8F1012817D1049858F46FF620
+B953EC1B2BDFF8D00C08E0049858F466F6042809D053EC
+1B2BDFF8C00C4168006816F4D4F241EC1B0B08F12C0025
+F4BAF1012804DB98F82E0008B100F0E5FB10A912A887F4
+4FF028B1DDE9100100F0E6FB41EC1B0B049AD8F814109D
+ED100BB0EE481AF0EE681A204679F4CCF0206F94F87410
+00687EF4E8F60746D8F81C0016F417F4DFF8242CDFF824
+3C16F49FF2D8E9002316F46DF3C7E9000100F057FA0746
+51EC1B0BD7E9002316F462F3C7E900019FEDD1DB206F87
+68002F5DD0E06E007D03281AD100F062FA00F072FA00F0
+64FA0546022200F06EFA072200F05EFA052200F028FA07
+46032200F064FA4168006881F00041C7E900013EE00028
+1AD100F045FA00F055FA00F047FA0546022200F051FA05
+2200F041FA072200F00BFA0546032200F047FA41680068
+81F00041C5E9000119E001281FD100F028FA0546012200
+F01AFA022200F028FA0546022200F013FA00F021FA0546
+032200F00DFA042200F01BFA80ED00DB082294F8741038
+467EF462F680ED00AB206FD0F80C90B9F1000F00F0A481
+E06E007D012809D100F0E3F9044698ED020B53EC102B51
+EC100B91E1F0680023002208F12C0186F494F40546E06E
+006AC106B0EE49AAF0EE69AA00F022FB9FEDD5FB9FEDD6
+CB9FEDD18B2FD59FEDD6BB000548BFF0EE68BA059818F4
+1EF453EC1B2B16F4D4F141EC1E0B1CD251EC1B0B53EC1E
+2B16F471F341EC120BB0EEF194039020810042DAF0EE62
+DA53EC1B2B51EC1C0B16F4ADF241EC110BB0EE4D2AF0EE
+6D2A9FEDAF0B86F467F775E0F0EE6DBA76E0010741BF9D
+ED050ADFEDAB0AB4EE600AF1EE10FA2ED5F1EE040AB4EE
+600AF1EE10FA48BF9FEDA5AB61D4059818F4DFF341EC1E
+0B53EC1E2B51EC1C0B16F47FF20022DFF8383A16F4A8F1
+02460B460020DFF8381A16F42BF341EC100B53EC102B16
+F49BF10022DFF8183A16F496F141EC1A0B3CE000043AD5
+F7EE000A9DED050A25F4F1F08DED050A9FED8E0B28F407
+F20598B0EE40CAF0EE60CA18F4A8F353EC1F2B16F47AF1
+41EC100B28F4F8F10020DFF8D41953EC102B16F4B9F341
+EC110BB0EE41BAF0EE61BA0020DFF8B81953EC1C2B16F4
+ACF341EC100BB0EE4B1AF0EE6B1A25F482F0B0EE40BAF0
+EE60BA2668D8F814200499F66800232046B047B0EE40CA
+08F12C0057F498F518B1B2EE040A3CEE00CA0026002D73
+D000F0FAF802280BD000F0F6F8052807D000F0F2F80428
+03D000F0EEF8082801D1012700E000279DED051ADFED61
+1AB4EE611A9FED63DBF0EE6D0AF1EE10FAB0EE4D0AA8BF
+F0EE690A1ADADFED5A1AB4EE611AF1EE10FA13DB059818
+F43BF353EC1F2B16F40DF141EC100B28F493F153EC102B
+0020DFF8F81816F44CF341EC100B95F85400032818BF00
+289FED4B9B11D19FED4B1B25F41CF0E06E006A000517D5
+B0EE4D0AF0EE6D0A12E000BF000000000000F03F022817
+D19FED431B25F408F0E06E006A000544BFB0EE480AF0EE
+680A2FB153EC102B00F05FFB41EC100B00F09BF816F413
+F2064600F090F8074698ED020B00F091F805462CEE0C0A
+8B4600F0E3F92A465B4616F48DF105468B46304616F428
+F22A465B4616F484F10022002316F480F1C7E90001E06E
+006AC1061DD4010709D500F06AF8044651EC1A0BD4E900
+2316F46FF11AE041050DD500F05EF8054600F05BF89FED
+D71B90ED000B24F4B7F785ED000B0CE000040AD500F04E
+F8044651EC1B0BD4E9002316F481F0C4E9000100F0A9F9
+00200DF53A7DBDEC108BBDE8FE8F000000000000000001
+007041000000000088A34061732D3852C1D03F0100AA42
+010020429A9999999999B93F0000000000004E40000000
+0000003E40349D52A246DF913F00000000000014C00000
+00000000344080ED00DB384694F874107EF47BB4000005
+F1500021F4CCB794F8741007987EF479B4000094F87410
+48467EF473B4000053EC102B51EC100B16F42EB0049821
+F4B7B70000012198A87EF474B451EC100B81F000417047
+000094F8741001223846F19403202481007EF450B40322
+4168006881F00041C5E9000194F8741038467EF444B405
+460122012176A87EF456B404F108030768BF6A04F12002
+20A938472DE9F04104462DED088B04F58267C2B0164638
+690D46012285F42AF400F014F941EC180B30A87EF44BF4
+0021029100900121019104F1080332462946204678F40D
+F410B100F0A8FAE9E00590049004F5BC78294640467EF4
+F3F540B12946404679F4B4F4816805914068049011E038
+6804A9039104F1080305A9029104F12002002101910091
+30A9D0F800C0DCF828C0E0479FED659B8DED069B1EA87E
+F414F600F034FA7EF44EF78046786879F4A6F51EAA4146
+FCF7B0FA00211EA87EF466F6DFF80404DFF804148DED06
+0BCDE900010022694606A87CF43BF68DED060BDDE90623
+4FF09440DFF80C1615F489F741EC1A0B8DED0E9B03A851
+F460F70246786829467EF4A5F500F099F820B900F0A4F8
+9FED450B83E010A886F4BCF4029004F1080304A8019032
+4605A8009003A9204678F4DEF38DED0C9B8DED0A9B8DED
+089B8DED009B694610A886F4BEF410B1DDE9002316E00C
+A910A886F4C0F410B1DDE90C230EE008A910A886F4C2F4
+10B1DDE9082306E00AA910A886F4C4F438B1DDE90A2300
+20002116F40DF041EC1B0B00F0B9F90128284610D158F4
+BAF220B953EC1B2BDFF8680510E000F0B0F9042812D053
+EC1B2BDFF8580507E024F40DF6022809D153EC1B2BDFF8
+4C054168006815F417F741EC1B0B0EA910A886F49DF428
+B1DDE90E0100F034F841EC1B0B00222946204600F0ABF8
+B0EE409AF0EE609A00F02BF853EC182B51EC1A0B15F4CB
+F700F01FF853EC192B16F47DF041EC100B42B0BDEC088B
+BDE8F081000000000000000014CC910000000000000059
+40B0EE49BAF0EE69BA7047000010EE100A18F402B153EC
+1B2B15F4A6B703A871F477B600002DE9F8432DED028B89
+468AB000F068F890461E460446484642F4D8F2002504F5
+826760B10122494605A824F4A1F5F86886F442F505A954
+F45BF600B101252A46494601A824F494F5F86886F435F5
+01A986F434F578BBF868002201A986F494F1054686F437
+F530B3284686F43BF510B3D5F8D80098ED0C2B95ED081B
+06AA08A900F05AF979F43CF402A824F4E9F4049840F002
+000490397D11B940F04000049002AB38689DED060B0096
+08AA07683F694946B84708B902200DE0324600F03CF949
+4604F17C0079F469F2D4F88400401CC4F8840000200AB0
+BDEC028BBDE8F283B0EE408AF0EE608A7047000070B504
+460D4616462DED068BF19403B027810000F0CCF89FED8C
+9BC0B900F0D3F8A8B900F0CCF890B92EB14FF46C710FF2
+6010EDF766FF00F0BEF800F0DAF818F466F00022002315
+F40AF741EC190B284658F4B7F19FEDCD8B60B100F0CEF8
+00F0BCF841EC190BD24800F0B1F800F0BBF841EC190B28
+464FF446F5A8B100F09FF8012811DB00F0B9F800F0A7F8
+41EC190B00F095F801280CBFCC48CC4800F097F800F0A1
+F841EC190B00F081F800282ED1284657F452F2002829D0
+00F080F8012825DB00F09AF800F088F841EC1A0B00F076
+F802281BD100222946204600F091F800F087F818F413F0
+02460B4651EC1A0B15F46DF741EC190B4EB100F05CF800
+F078F818F404F000F06EF841EC190B284621F45FF50128
+12D100F06FF800F05DF841EC180BA848D0E9002300F058
+F802460B4651EC180B15F44AF741EC190B00F036F8B8B9
+00F03FF818B100F03CF8032810D1284621F43DF502280B
+D100F02BF800F047F817F4D3F753EC192B15F477F641EC
+190BB0EE490AF0EE690ABDEC068B70BDFCA9F1D24D6250
+3F95D626E80B2E113E70617463685F676C70655F636F6D
+707574657A72682E637070000000D4F81404A6F484B232
+46294620464FE0284624F467B40000284658F4FFB00000
+D0E9002351EC190B15F470B553EC102B51EC180B15F46A
+B502460B4651EC190B15F4EEB651EC100B17F442B72946
+204678F48CB2F8B50C46154620462DED028B58F4DCF006
+462778204624F43BF4042E08BF02289FED098B0BD155B9
+0FF2A81000EB8700A0F5A270006817F469F741EC180B00
+F007F8BDEC028BF1BD0000000000000000B0EE480AF0EE
+680A704700002DE9F0412DED068B80460E46A2B0174630
+4658F4ABF005463478304624F40AF49FED4D8B9FED419B
+9FED4DAB35B1032D31D0042D64D0052D45D06FE098B9D8
+F81814012204A881F4A3F304A968467EF42DF768468CF4
+BEF040F2BD7188425DDB0FF2A81007E002280AD117B10F
+F2D82001E00FF2182000EB840050F8040C49E0304621F4
+77F4012848D13146404678F415F2354A23E002280AD117
+B10FF2283001E00FF2682000EB8400A0F5847030E03046
+21F45FF4012830D13146404678F4FDF1294A0BE0012828
+DB3146404603D178F4F4F1254A02E078F4F0F1244A5368
+1268FFF75BFE51EC1A0B15F441F653EC182B15F4B3F453
+EC192B15F4AFF40BE002280BD157B10FF2FC2000EB8400
+A0F5A270006817F4CCF641EC180B22B0FFF769FFBDEC06
+8BBDE8F08100BF0000004A78DEB141B09C0800B6F3FDD4
+414C124100001440F19403402B8100000010400000F03F
+0000494078DEB141989C08000000000000000000000000
+000000F03FA89C0800A09C0800209D0800002243E70000
+000000000000000000000000000000000000FAED77C09E
+5E89C052B88CC05E4BE8BEB7D120C0143F5EC02B876AC0
+ACAD9AC08D28B7C0000000000000000000000000000000
+0074B575BF5249A5BF0AD763BF3411E6BF5249A5BF21B0
+B2BF1361A1C01361A1C0A2B49FC089D2A0C0560EA3C094
+F6A6C000000000083D1BC090A010415F079EC052B88CC0
+CA32D4BFAA604CC0F46CD6BD000000004DF38E3DA69B44
+BE62A1563DA69BC43DA60A06BEE3A5BBBE21B0B2BE21B0
+32BE00000000A69BC4BD00000000000000004DF30E3D00
+00000058CAB2BD00000000000000000000000000000000
+0000000000000000FE437ABD645D1CBF7AC7A9BE0AD7E3
+BE00000000F5DB17BEFA7E0ABF62A1D63C4DF38E3DDC46
+FB3F000000006DC5963F00000000000000002041F13E00
+0000003E79E03FC286A73F371A58400000000000000000
+0000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000933A
+713FA69B443E8A8EC43FE3A5EB3F000000000000000093
+A9823F0000000021B0324058A8153F423E083F85EBD13E
+000000000000000000000000AC1C9A3F00000000000000
+0000000000000000000000000000000000000000000000
+000042CFF63F00000000E10B233F0000000000000000B7
+D1A03E0000000010E9C73FE86A933FED0D4E4000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+000024B90C3FC7297ABE8A8EC43FB37B0A400000000000
+0000007FD93D3F00000000764F2A40371A403F3789013F
+F46C563E000000000000000000000000D7A3A83F000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+0000008A8E44BF8A8E44BF6C0949BF8A8E44BF6C0949BF
+371A40BF371A40BF569F3BBF569F3BBF00000000000000
+0000000000000000008A8E44BF8A8E44BF7E8C81BF6C09
+49BF8A8E44BF371A40BF6C0949BF6C0949BF8A8E44BF6C
+0949BF6C0949BF8A8E44BF000000008A8E44BF371A40BF
+BF7D4DBF8A8E44BF8A8E44BF8A8E44BFF0EEC00AB2EE0E
+1AF4EE410AF1EE10FA09D5D0ED040A30EE800A80ED040A
+80ED070A80ED0A0A704700F59C7005F0CEBD10B5044600
+202060A0619FEDF19403D02E8100060B84ED020B84ED04
+0B04F11C0021F4FDF0204610BD00BF0000000000000000
+38B504460D4634F401F2002802BF94F9010095F9011088
+4214BF0120002032BD0978027891428041C043C00F7047
+000009B93F210FE0022908BF04210BD0032908BF102107
+D0042908BF012103D005290CBF1F21FF2140780140481E
+8041C00F70470A2200211DF467B0000010B5044605F088
+FD1E237022084904F118001DF4A9F004F638508DF415F0
+0020C4F8900D2046FDF73FFA204610BD00BF1988810080
+B5CDF4BDF008B1002002BD0021CDF48BF20168896A8847
+41F690310858C00B00F0010002BD00002DE9F041044682
+B0A06800280F4657D0F98810F1010F18BF002951D10529
+0CBF0121002104F50450D030D6F44DF4F888A06004F5C8
+5555F8B80F0268F988526A9047F88804F5D85101F1F808
+C0B928680268D26F0021904728680268926A0021904798
+F8000028B1A86810B30168C96E88471EE028680268D26A
+0921904718E00A2801461DD128680268D26F9047286802
+68926A0A21904798F8000000281CBFA868002802D00168
+C96E8847012088F8010005222368D3F86C310021204698
+47AAE0D4F804C0604550D00B2807D1C4F808C000231FFA
+8CF21FFA8CF14AE004F598566C3603284BD00CD3052800
+F08A8008D2BCF1010F18BFBCF1030F03D0BCF1050F2AD0
+85E000208DF80000ADF802006A4628680368D3F88C300D
+F1020198479DF8000020B99F210FF2F830EDF7DCFA2168
+D1F8041120468847A86810B10168496E884720F4E4F734
+4B0FF2F832042124F4E6F6002030835EE000203083A868
+20B10268126F04F16C0190476068FA88002381B2204624
+68D4F83041A0474BE0BCF1040F45D1B0686862B0892884
+288FD0B1D8F808003168814215D3081AE96B4118E96305
+E01E4A5118E963298F491C2987E96B1B4A9142F5D26422
+296C5043801F4018286402E00020E863288704F5C85090
+30DDF428F5A86820B10168C96E8847A868C0B96068FA88
+81B220462468D4F830410023A04728680268D26A0F2190
+4709E0BCF1040F03D12046D8F410F3ACE74FF0FF30A060
+BDE8F38184F59100007CF3DB00840C242DE9F047044689
+466068042818BF052841D104F5045004F5985509F11006
+002700F1D00886350FF2D42A07E040F243115046EDF745
+FA708886197F1CB9F80E00874228D2308844F20401401A
+02D0401E13D0EBE701202870B07B01280CBF0121002140
+46D6F454F428780028E3D104F504501C30DDF4B6F2DDE7
+3079012818BFF19403603281000020687068780028D5D0
+F18800222046D7F4E8F5CFE7BDE8F08700002DE9F04F04
+4687B0606800288A4600F0DC8004F5D85604F5D8570AF1
+08054FF0000B361D50374FF47A780FF2342904E0B88468
+8845190BF1010BBAF80600834580F0C3802888401F0DD0
+0A3866D047F6F271401A7BD0801E00F09580C01E04BF68
+683864E5E7E88920B940F26B1100F0AFF806E0708004F5
+0450E989D030FCF70FFFA88908B10B2804DB40F2751100
+F09FF800E03080A888642804DA4FF4BF7100F096F811E0
+414690FBF1F108FB110018B14FF4C27100F08BF8A888B0
+80E888F080287A7072687A30726068052818BF0428AED1
+684634F43FF0297A8DF80410697A8DF80510B188ADF800
+10F188ADF80210EA88718891429BD3717A00291FBFADF8
+008004F5CE510A68002A91D0014610461268D2F8942090
+478AE7A88800281CBF012802280DD13880E88878802889
+B88041F6F830005D002802D0204605F003FD76E740F2B5
+1100F042F871E7A96804F5C850D030DCF465F3A98804F5
+C850D030DCF461F320F471F604F5CE51C96A27F444F120
+F46AF604F5CE51896AC9B227F430F155E7A88800281CBF
+0128022804D040F2D51100F01BF800E03884E88800281C
+BF0128022804D04FF4F07100F00FF800E0788428890028
+1CBF012802283FF436AF40F2EB11BEE707B0BDE8F08F48
+46EDF727B9000070B504460D466068012801BFA06810F1
+010FE888B0F5004F1CD168880D2805F10C0617D3304616
+F42FF269880C39884210D2304616F428F2FF280BD83046
+16F423F23146421C04F5D050BDE87040001D16F4B6B070
+BD000010B5044608460022C18800EB410108300A810FF2
+480105F0D7FE38B10022002108301CF4BAF704F5D05108
+6010BD000070617463685F676C6D655F706569665F696D
+706C5F6465632E637070000000004D696E694D65202573
+0A00007265665F636C6B3A0000000000F5596001750260
+704700002DE9F44F2DED0E8B0F46AAB00446D7E9040101
+22DD4B14F44FF704F1380B94BF01200020BBF8181051FA
+80F0ABF818000A2100B223F484F6ABF818003968097AC9
+070BD50A2818DA389805F085FEF3EE040A90ED020A00F0
+C3F90ED5BBF918502046BFF465F1ABF818503898A0F49E
+F304F12C014860002047E101202070B4F9021019B13868
+8068800502D50020607000E0481E6080F2EE0F9A386800
+7A800748BFDFEDCD9A0020ADF80800824681463898B7F4
+95F2014603A824F4F5F10026B9EE009ADFEDB28A9FEDB1
+8A9FEDB0AAF19403F035810025E0B0EE4A0AB4F40DF5F0
+EE40AAF0EE6A0AB0EE480A23F48DF6B0EE408AF0EE6A0A
+B0EE680A23F43FF6F0EE408A95ED130AB4EE409AF1EE10
+FA05D5B8F9F0000B28A8BFB0EE409A03A824F4C1F103A8
+24F4BCF1002844D103A9684624F4C2F138980023002269
+4685F484F1054603A9684624F4B7F138980022694685F4
+E8F1002D8046E0D095ED130ADFED8E0A00F03FF9A8BF0A
+F1010AF4EE409AF1EE10FAC5D5B8F9F010761C2E29A4BF
+01208DF80900484623F418F6814608F1F000F6B2B0F902
+0015F442F07F4A804B14F4CCF617F4ACF0012E00EE900A
+92D1B0EE60AAA5E79BED00CB5FFA8AF015F439F041EC1D
+0B51EC1C0B53EC1D2B14F499F69FED74AB3ABFB0EE4AEA
+F0EE6AEA9FED72EB53EC1E2B14F4A8F6CDE900019FED70
+BB51EC1B0B53EC1E2B15F428F053EC1D2B14F49AF6DDE9
+002314F468F700226A4B14F476F641EC1C0B04D2B0EE4B
+CAF0EE6BCA06E00122654B14F446F698BF9FED64CB8BED
+00CBDBE900234FF02040624914F47AF653EC1A2B14F448
+F741EC100B24F404F0C5B225B13868042123F4FCF200B1
+0325022E0ADBA9F10100192806D238EE680ADFED550A00
+F0B2F801D4B5420CD39FED530AB4EE409AF1EE10FA05D5
+9DF8090010B901208DF8080038688068410604D49DF808
+1009B1C00505D53898A0F47CF204F12C0148604EF66020
+E0603868007A800712D441F28830E06038688068810608
+D4000709D5D7E9040101223C4B14F4E9F502D840F6B830
+E06004F12C00456875B9A079002508B1401EA0719DF808
+0084F82C0028462AB0BDEC0E8BBDE8F28FD7E904010022
+304B14F4F0F508D238688068010604D580075CBF43F698
+20E060B968E068491B8842DBD2A079002530B900212046
+BCF4FEF404200125A071607870B9B868A06204F1100079
+687BF4DAF597ED060B8BED020B97ED040B8BED040B0120
+607039462046BFF4DCF16080A080B868A060BAE7000000
+00E03F000000000100B041349D52A246DF913F00000000
+0000E03F000000606666EE3F000000000000F03F0000F0
+3F0000384000000000000038409999C93F20C9293F0000
+204200003E4000009C4100000840B4EE600AF1EE10FA70
+470000E74824F47FB0000038B5044604F5F96304F11002
+04F11001B3F486F000252068982101FB050008B1B3F41E
+F16D1C0D2DF5DB204632BD00002DE9FE4F2DED028BADF5
+B66D804689460024A4A800EB0410B4F4B8F6641C322CF7
+DB92A824F452F080A824F44FF042A8B4F4CEF304A8B4F4
+CBF3D8F8F19403803981004C00A9EB000040F2DC51DDF8
+C0458842A4AD08F5A06780F0D080DDF8E8A5322604F111
+0050F496F540B304F11101504653F4FAF4F8B104F11101
+684636F48CF700F0E8F8217C012918BF0021084212D0D4
+E9020181F00041C5E9000104F1110205F10901684650F4
+57F504F1110180A824F41CF010351834761ED1D180A822
+F411F7C1B2062023F43BF40390002580A822F408F7C1B2
+A24B1022A4A897F4ACF00026AA4605E01834BBF1010B18
+D10AF1010A03995FFA8AFA8A454FDAA4A901EB0A1000F1
+090102A836F446F70146684636F442F700F09EF8DDF8C0
+454FF0320B02A904F111003BF41DF60028DBD03A689DF8
+04304FF0180C1CFB032203F05AF941EC180B42A8B4F497
+F342A897F470F0014601F05BF880ED008B04A8B4F48CF3
+04A897F465F0014604A87DF413F194ED000B80ED000B51
+EC180B01F055FF34BF01204FF0FF304519D4E9000114F4
+84F434BF01204FF0FF308619A8E704A879F41BF668B223
+F438F4062806D170B223F433F4062808BF012000D00020
+387404A879F454F598B104A879F450F5014604A87DF4E0
+F0012241680068DFF8543E14F45BF494BF01200020397C
+0840387442A879F49CF587ED020B01E00020387440F2DC
+51DDF8BC0588421DD2C8F84C900024182000FB04F5DDF8
+C005291838682818B4F4BEF54046B4F4D1F53E68A81953
+EC102B4168006814F4F9F5AA19641CC2E90001322CE4D3
+0DF5B66DBDEC028BBDE8F78F0000014601AA4046B4F4C5
+B5000070B586B004460D46B6F472F4082104F5B0607BF4
+B1F6DFF8BC0D05F061FB0822082104F1C80078F451F729
+462046A9F46BF1284604F21476B6F428F730602846B4F4
+74F5014604F5E3607BF425F42846B6F420F7284686ED07
+0AB6F41FF751EC100B04F5CF6616F409F630602846B4F4
+71F24169006981F0004116F4FFF570602846B6F42DF786
+ED020A2046B0F4BEF3284604F29476B6F4F9F6B0602846
+B4F445F501466846A7F459F301462046B6F41BF79FED14
+0B04F65830B6F419F704F60810DFF8141D016004F5E055
+012131604835002101716976DFF8000D4170017004F5C0
+507830B6F407F70FF224026F212046B6F4AFF400202880
+06B070BD0000DDC50B000000000000006940C8C9910049
+6E69744B4600002DE9F34F81B041F678502DED0E8B8CB0
+ADF5085D17469846684496F43DF70DF500500025D0F86C
+02ADF8385000F6C4200F9000268068B4F4FFF1F1EE04AA
+0078012810D10F988068A8F436F201260078022806D00F
+988068F19403103D8100A8F42EF20078032801D18DF838
+600F98006885F4B1F0DFF8581C884245D0B868800440F1
+15860F988068B7F497F0B7F497F007000AD000F093FEB6
+F46FF6C01B4EF660218842BF41FF0F00E000270DF50050
+0122D0F86C02C8300D9001217CF4A9F7044600F05CFE02
+4653681268D4E9000114F43BF40122DFF8F83B14F424F3
+0DF5005094BF01240024D0F86C02B6F483F60F28C0F0DC
+8554EA070040F0D88500F05EFEB7F45EF0002800F0D185
+0F98006885F461F000EE100A9FEDDB9BB8EE400ADFEDD8
+0AB0EE498AF0EE698A80EE20AAB7EE00BA0EB1F0EE4BAA
+00F040FE00F5D1600090404696F48EF6082840F06A8100
+F08FFE0428C0F2658100F08AFE05280DF50050B8BFF0EE
+4BAAD0F86C0200F5CF6696ED010A20EE0A0A02F00CFA96
+ED000A41EC120B9FEDBF1B20EE0A0A00F0D0FD02F000FA
+00F0D6FD0DF5846096F4E8F60146009A02A87BF41BF204
+21CAA8B7F40BF08CA8B4F454F102F0F7F907460D980222
+02217CF424F7022100F095FD00F036FE07460D98042204
+217CF419F7044696ED000A23F4A2F202F0D4F9D4E90023
+14F4D8F2C7E9000100F020FE06460D98062206217CF404
+F7042101F055FF00F016FE06460D98082208217CF4F9F6
+012101F04AFF00F006FE9DED020B80ED000B022100F0FF
+FD9DED040B80ED000B032100F0F8FD9DED060B80ED000B
+042100F0F1FD064600F0B8FD03F092FC01F028FFC6E900
+0100F004FE0646CBE004214EA8B6F4AAF7042110A8B6F4
+A6F700F0B3FD31B290ED00BB0DF50050D0F898027CF4C7
+F600F0A7FD002241680068DFF8343A14F480F2C7E90001
+00F09DFD00F05AFD14F44AF341EC180B012100F0B7FD00
+F0DBFD012100F0BEFD0746012100F0B7FD044600F0D2FD
+00F0C3FDC7E90001022100F0A4FD0746042200F0C8FD02
+2100F0A9FD0746022100F0A2FD0446042200F0BDFD00F0
+ADFDC7E90001032100F08EFD0746062200F0B2FD032100
+F093FD074600F08CFD0446062200F0A8FD00F098FDC7E9
+0001042100F079FD0746082200F09DFD00F0D9FC042100
+F080FD0746042100F075FD0446082200F090FD00F080FD
+C7E9000110A94EA879F44AF402F030FECAA94EA879F444
+F40DF50050B0EE40DAD0F89C02F0EE60DA31B27CF449F6
+024651EC1D0B5368126814F48EF341EC1D0B21F0004141
+EC1E0B51EC1B0B53EC1C2B14F4CAF202F000FA02F02AFE
+0022DFF8183914F4AFF10AD91AEE900A16F414F453EC1D
+2B23F0004314F4C8F111D23146404678F4DDF70DF50050
+31B2F19403A0408100D0F8980279F48CF30DF5005031B2
+D0F89C0279F485F3761E012EBFF631AF00F031FD14F43B
+F302460B4651EC180B14F40DF441EC180B404696F41EF5
+082840F03F8400F01FFD0428C0F23A84404696F413F508
+2803D040F2371102F0F3FA0DF5C65096F425F500F00DFD
+014604220DF5C65078F4ABF400F005FD064600F002FD01
+4641F678503246684478F49FF4012639E000BF00007A44
+0000000000000000012231460DF5C6507CF4BCF500F0EE
+FC022200F031FC0746042200F0E9FC032200F02AFC0746
+062200F0E2FC042200F023FC0746082200F0DBFC324600
+F016FC41F67850314668447CF49CF500F084FC02460020
+53681268DFF8F41714F4A6F3C7E90001761C00F0BDFCB0
+42C8DA41F20840684496F4CCF40DF5756096F4C8F440F6
+58606844B3F4A5F710A896F4C0F441F678536B440DF5C6
+52012178F4E2F541F208400DF5C65210A9684478F4F4F4
+0DF5005240F65860D2F89C2210A9684479F40EF341F208
+400DF57561684479F40FF1002800F0A48320A877F4F5F7
+0DF55660B3F477F740F658626A440DF5756179F4F6F2DF
+F8581700988DED1E9BCDE912518DED1C9B8DED1A9B8DED
+189B8DED169B8DED149B032203217CF44BF51090022200
+9803217CF445F505460098012203217CF43FF506460098
+032202217CF439F507460098022202217CF433F5044600
+98012202217CF42DF581460098032201217CF427F58246
+0098022201217CF421F583460098012201217CF41BF512
+A90C91069514A90B91059616A90A91039718A909915346
+1AA908915A46109907911CA9049102941EA90091CDF804
+90014686A878F43DF0042204210DF5756078F4E9F30DF5
+756164A878F4A4F042A877F47BF786AB012264A978F46E
+F142AA86A920A878F425F1032100F0F0FB00F0ECFB0646
+012100F0EAFB95ED002B90ED000B96ED001B06A879F4BF
+F600F091FBB4F4BDF1014606AA68467AF4D8F5694600F0
+7BFBB6F495F5032100F0D0FB00F0CCFB0646012100F0CA
+FB03F05CFA41EC190BD5E9000102F0AAF941EC120BD6E9
+0001B0EE42BAF0EE62BA02F0A0F941EC110BD7E90001B0
+EE4B2AF0EE6B2A00F01AFB02F094F900F020FB684679F4
+85F6014600F04AFBB6F466F500F03EFBB6F466F500F028
+FB074600F02BFB044600F07AFB00F0F4FA0546D7E90023
+D4E9000114F405F100F00DFBD5E9002314F4FFF016F40D
+F201F065FDF7EE000A22F48BF700F03BFBB6F447F50D98
+052205217CF452F4054600F00BFB00F04FFB16F4F7F101
+F0F19403304481004FFDF7EE000A22F475F700F025FBB6
+F435F500F047FB054600F0C1FA00F03CFB16F4E4F101F0
+3CFD8DED000A0DF500506946D0F87002B6F425F500F0E7
+FA00F0C1FE01F02DFD00F007FBB6F41FF500F0F7FAB3F4
+77F6B0EE40BAF0EE60BA042100F03CFB53EC1B2B416800
+6814F4AEF000F0D8FAB4F45AF20D98072207217CF409F4
+054600F090FA00F006FB16F4AEF101F006FD0DF5005001
+25D0F87002B6F4F9F4042100F01AFB00F05CFA00F0BAFA
+BDF430F300F078FA00F054FA16F496F101F0EEFC00F0B0
+FAB6F4E8F4012100F005FB064600F001FB96ED001B90ED
+000B25F4F2F702F0DAF80022002313F480F709D253EC19
+2BDFF8940EDFF8941E14F465F041EC190B00F0CDFA00F0
+47FA4168006800F065FA53EC182B14F4CFF116F465F101
+F0BDFC02F011F880F2F58000F08DFA064600F078FAB4F4
+AEF0024653681268D6E9000114F4F9F021F0004102F0B5
+FB16D900F074FAB3F4B4F5064600F063FAB3F4AFF50246
+53691269D6E9040114F4E4F021F000410122DFF8E43313
+F413F740F2C98000F0B5FA0528C0F2C58040F6A8000DF5
+75620DF5C651684478F4BDF301460DF5C6530122FCA878
+F4D2F396F496F206460DE000F0DAF900F054FA02465368
+1268D7E9000114F4B7F0C7E90001761E012EEFDA00F08C
+FA01B2BEA8B6F434F400F086FA01B280A8B6F42EF400F0
+80FA064652E0042142A8B6F426F401F015FE00F07AFA02
+2100F083FA0746042200F075FA032100F07CFA07460622
+00F06EFA042100F075FA0746082200F067FA31B200F0A2
+F9BEA87CF433F307460DF5566142A879F41DF10DF50050
+B0EE408AD0F89C02F0EE608A31B27CF422F300F0C2F914
+F46AF0C7E9000131B280A87CF418F3074631B2BEA87CF4
+13F3044600F076F9761E4168006881F0004101F0D5FED4
+E9000101F0CDFDC7E90001012EAADABEA878F4CAF751EC
+100B21F00041DFF8E02CDFF8E03C13F476F698BF0025BE
+A879F411F0BEA878F4B8F751EC100BDFF8C82CDFF8C83C
+13F466F69CBF01208DF8390000F006FA002607460FE039
+B280A87CF4D7F2012241680068DFF8A43C21F0004113F4
+74F638BF761C7F1E012FEDDAF6B2042E00DA0025012100
+F0DEF98346012100F0DAF9814600F0D6F9824600F0D3F9
+0446032100F0D0F90646032100F0CCF90746DBE9000102
+460B46D9E9000113F469F6CDE90001D4E90023DAE90001
+13F461F6DDE9002313F42FF704468946D6E90023D7E900
+0113F455F622464B4613F423F716F431F001F089FB80EE
+F19403C04781000A0A01F041FD41EC180B0F988068A6F4
+37F2007838B951EC180B0122DFF8FC3B13F4FAF50FD90F
+988068A6F429F2007801280AD151EC180BDFF8B02EDFF8
+B03E13F4EAF501D8002555E0002D53D000F009F9064600
+F05EF903F00CF801F0A2FA00F0F6F8C6E9000103220D98
+03217CF449F200F0CBF802F0FDFF01F093FA00F0E7F8C6
+E9000105220D9805217CF43AF2064600F0F3F802F0EDFF
+01F083FA00F0D7F8C6E9000107220D9807217CF42AF206
+4600F0B1F802F0DDFF01F073FA00F0C7F8C6E9000100F0
+E7F8B3F41FF700F053F9B6F4FDF200F0DFF8B3F46BF400
+F0E7F8B4F45BF00F9800689FF40FF200F043F9B6F40FF3
+0DF5005000F001F951EC100B0122DFF8EC3D13F486F533
+D800F0C9F800F0F1F853EC102BB0EE080A28EE000A1646
+1F4601F0AFFC32463B4613F497F520D200F0A8F8B6F4F8
+F251EC190B15F48CF700EE100A00F0A6F8B6F4E6F200F0
+A8F800F0D0F800F066FD01F0A1FD01F0DCFE15F47AF700
+EE100A00F094F8B6F4D8F201E000F0B7F89DF8380078B1
+00F0F0F8062802DB9DF8390040B100F0ABF80DF5005000
+21D0F87002B6F49EF20CB00DF5085D2846BDEC0E8BBDE8
+FE8F0000144030D989000000C64212CC9100FF2292FF00
+80484000002240000059400000F03F53EC192B41680068
+13F4A6B732463146FCA87CF48DB1000090ED000B87ED00
+0B7047000090ED000B87ED000B31460DF5C6507CF47DB1
+000006460222022120A87CF48EB10422042120A87CF489
+B10000B0EE41BAF0EE61BAB0EE42CAF0EE62CA70470000
+41EC100BB0EE4C2AF0EE6C2AB0EE4B1AF0EE6B1A704700
+00D6E9002313F4F2B5024651EC180B5368126870470D98
+012201217CF44BB100000D98032203217CF445B1000003
+22032120A87CF457B100000DF500500121D0F870027047
+41EC100B0DF50050D0F87002704700000DF50050D0F870
+02B5F43CB40DF50050D0F86C02704700000DF50050D0F8
+6C02B3F420B60DF500508DED000A6946D0F87002704707
+460DF5005031B2D0F898027CF416B10DF500500021D0F8
+7002B6F41BB200000DF50050B0EE408AD0F87002B5F4BA
+B741680068D5E9002313F494B50122012120A87CF40BB1
+00004EA87CF4F7B00000CAA87CF4F3B0000003218CA87C
+F4EEB090ED000B87ED000B10A87CF4E7B0000005460221
+0DF556607CF4E0B0024653681268D4E9000113F49BB400
+00404695F4F3B7000007460222314640467CF4C6B00146
+0DF50050D0F86C02704790ED000B87ED000B42A87CF4F1
+9403504B8100C1B000002DE9F0472DED0E8BADF5116D80
+460C4615469A4604A8B7F411F240F6C800684422F44CF7
+0C2100910246012321464046B0F43AF50DF5086022F440
+F702460C200090002321464046B0F42EF5069840F4C870
+069008F52C6695F82410002914BF40F0040020F0040006
+9004A9069840F09000069014BF40F0040020F004000690
+07A8B7F4E5F101F04DFB044602F081FE02F082FE07A9DD
+F86C79039102940190009540F638003368726801F0A1F8
+39466844B7F4D3F117B13846A7F451F3DDF8689901F039
+FC002808F6F8249FEDCB8B9FEDCCBAF6EE00CA00F09280
+1CA8FEF76FFE04A907A8B7F4B3F101F01BFB02F04FFE00
+F0CFFB02F053FE07A903910297019000953368726802F0
+02F81CA90AA8B7F4A4F11CA8FEF753FE0120009040F6C8
+010023012269440AA8B2F4AFF240F6C80169441CA8B2F4
+E1F0054601211CA8B2F40EF1002D00F0A5FB6FD000F086
+FA51EC190B15F4B8F500EE100A60EE2C0A99ED1C0A22F4
+34F389ED1C0A012301220DF50861404600F0F5FC00285F
+D008F588500021D030A7F483F330B301F0C4FA007810B3
+2046B7F49BF1F0EE409A2046B7F4ACF1306BB0EE409AB7
+F4B9F101F04BFC00EE900AB0EE490AB3F481F1B0EEC00A
+DFEDEA0A01F031FC06DBF0EE690A22F4FEF22046B7F4A7
+F1294608A8A6F4E3F22046B7F462F100F042FA00F012FA
+002833D02046B7F46BF1B0EE40BA2DE0009040F6C80140
+F638000123032269446844B2F475F140F6C80169443846
+B2F46DF0050002D000F019FA9FE708A8B1F4F7F6014600
+F013FA002D00F08F812046B7F434F100F014FA00F0E4F9
+002804D02046B7F43DF1B0EE40BAD5E02046B7F44DF100
+F0D1F9F0EE409A2046B7F46EF19FEDC11BD9F88000B0EE
+40AA00F0FEF953EC182B13F43EF300F0FEF900F016FA07
+4600F017FA00F003FA00F0FDF9B0EE409A00F00FFAC168
+806815F40DF500F0F3F939EE000A25F4ADF300F0D3F904
+4670689EF459F7064600F0EEF99FEDAC5B00F0BEF900F0
+B4F902F003FD41EC140B00F068F9B0EE6A6A00F05EF9B0
+EE44BAF0EE64BAB0EE45AAF0EE65AAB0EE46CA00F04AF9
+51EC180B15F4DEF403EE100A00F03AF9B0EE4C6AF0EE69
+3AB0EE4B4AF0EE6B4A00F04EF9B0EE63BAF0EE46BA00F0
+86F915F410F541EC120BD7E9040100F038F9B0EE6B6AF0
+EE4B3AB0EE42BAF0EE62BAB0EE63CAB0EE46DAF0EE66DA
+B0EE47EAF0EE67EA15F4AEF401EE900AF0EE6E7AB0EE4E
+7AF0EE6D6AB0EE4D6AB0EE4A5AF0EE6A5A00F024F9F194
+03E04E8100B0EE4B2AF0EE6B2AB0EE491A2346D9ED1D0A
+99ED1C0A08AA31465046B5F40EF301215046B5F4F2F701
+215046B5F4C6F74046B5F4F1F1DFED6B0A01F031FB15DB
+99ED200ADFED680A01F02AFB0ED5E86E15F4BCF441EC10
+0B4046B3F40FF599ED200A20EE2C0A4046B5F4BCF7B0E0
+00BF000000000000E03FDB0F49402046B7F477F000F0FB
+F8B0EE40AA2046B7F498F09FED561BD5F88000F0EE409A
+00F028F953EC182B13F468F200F028F900F040F9804600
+F041F900F02DF900F027F9B0EE409A00F039F9C1688068
+15F437F400F01DF939EE000A25F4D7F200F0FDF8074670
+689EF483F6044600F018F9B0EE6A6A9FED405BF0EE4A3A
+00F0CCF819EE900A15F464F441EC140B00F0A8F8B0EE44
+AAF0EE64AAF0EE639A00F0D4F8B0EE46CAF0EE66CAB0EE
+47DAF0EE67DA51EC180B15F404F403EE100AF0EE6D7AB0
+EE4D7AF0EE6C6AB0EE4C6A00F068F8F0EE693AB0EE4A4A
+F0EE6A4A00F06EF800F09AF815F434F441EC120BD8E904
+0100F076F8B0EE42AAF0EE62AAB0EE63CA00F0A2F8F0EE
+46CA00F042F815F4D8F301EE900A00F034F8B0EE6C6A00
+F040F800F054F8B0EE4A2AF0EE6A2AB0EE491A3B46D5ED
+1D0A95ED1C0A2A4621465046B5F43EF201215046B5F422
+F701215046B5F4F6F60DF5116D2846BDEC0E8BBDE8F087
+00BFDB0F493F7E36EA460F621248000000000000494000
+0000000000F03FF0EE4E7AB0EE6D7AF0EE4D6A70470000
+B0EE66DAF0EE47DAB0EE67EA70470000B0EE4B5AF0EE6B
+5A70470000F0EE6D7AB0EE4D7AF0EE4C6A70470000E86E
+F0EE439AB0EE448AF0EE648A7047F0EE4C3AB0EE484AF0
+EE684AB0EE693A70470000F0EE4D7AB0EE6C7AF0EE4C6A
+B0EE6B6AB0EE4A5AF0EE6A5AF0EE4B3A70470000F0EE40
+AA2046B6F4A1B70000F0EE40BA2046B6F49FB70000B0EE
+63BAB0EE45AAF0EE65AAF0EE46BAB0EE66CAF0EE47CAB0
+EE67DA70470000B0EE66CAB0EE47DAF0EE67DA70470000
+B0EE45BAF0EE65BA7047000029464846B1F476B5B0EE40
+9A2046B6F48DB70000B0EE40CA2046B6F475B70000B0EE
+41DAF0EE61DA15F468B341EC100BB0EE4D1AF0EE6D1A22
+F45EB000EE100A22F4F6B04168006815F410B300200190
+0090F0EE4C7AB0EE6B7AF0EE4B6A7047B0EE408AF0EE60
+8A2046B6F461B700002DE9F8432DED068BADF5A66D0546
+0F4614461E461EA895F48BF405F1C80801220121FFF776
+FC814603220321FFF771FC00F0FEFF13F4D2F115F4E0F2
+08EE100A2846B3F433F2314679F4C2F200F0BCF8F19403
+7052810096ED1C0A22F4B4F038EE000A25F474F100F0E2
+FF02460B4651EC190B13F42EF315F4C4F2002F00EE100A
+9FED4F9A9FED508B4FD001F06AF980F28280314612A8A6
+F424F000F0A2F8012200F09BF805F5D16700F0A7F800F0
+9FF869460CA8BCF489F501463A4606A879F4A6F7F0EE49
+0A96ED1C0A22F41EF022F47AF000F0ACFF41EC1A0B00F0
+94F89DED080B2846ACF4ADF600F07BF8032200F074F800
+F082F800F07AF8694618A8BCF464F501460CA8BBF478F6
+3A460CA9684679F47DF7694606A803F0AFFF00F073F89D
+ED060B2846ACF48CF6002C33D000F058F8072200F051F8
+1EAC80ED008B2846B2F40BF7F06E00F064FF15F4A2F253
+EC182B13F4FEF115F454F209EE900A96ED200A22F430F0
+F0EE490A21F4CEF7002001900120009000F05AFF00F050
+FF19EE900A15F486F241EC100B0023002201F088F9ACF4
+56F60DF5A66DBDEC068BBDE8F183112D4454FB21194001
+000040E17A843F010000E051B89E3F0000084000004842
+00001E40000000000000F03FB0EE409AF0EE609A704700
+0001211EA87BF464B4082201211EA877F433B300000246
+002312A9684679F482B080ED008B2846B3F457B1000000
+2001900023012000900022B0EE4A1AF0EE6A1A1EA97047
+2DE9F047EAB004460E46904660A81FF493F360A831F474
+F7814660A93AA822F4C9F2002504F6C42718E014A901A8
+22F4B5F238680023002201A983F477F201F0E5FB08D114
+A822F49FF214A822F49AF20028EAD06D1C3AA822F4BAF2
+3AA822F4B9F288B93AA9684622F4AAF29DF800008DF804
+0001AA314602A81FF401F402A914A822F485F2E0E7B868
+B5F4D3F4BAF4D3F606462046B5F4ADF2824604F5905018
+30BAF40BF00196EDB200955346B8684246494603F07CFF
+6AB0BDE8F08700002DE9F0478246ADF6C84D40F608400D
+466844B4F405F701462A465046A7F410F60646DFF8040D
+35F4FBF5A868000504D50AF58850D030BBF4FFF40AF6F8
+20BBF4FFF45046BBF432F50AF6B4270AF5F4683869B5F4
+D9F20146404650F455F53869B5F4D2F20AF5FD69014648
+4650F44CF55046B3F4AFF001465046BBF423F531465046
+BBF423F536B9A868400A00F001015046ACF4FBF1A868C0
+0800F001015046A9F4FAF02A4600215046A9F49FF108B1
+014628E0002432A8302101FB040082F4BBF4641C3C2CF6
+DB0AF503600290CDF80490CDF800803C232A4632A95046
+ABF427F48AF86807C2B232A95046A7F4A2F55046A8F425
+F75046BAF45CF6DFF82C1C884204D309215046F1940300
+568100A7F4AEF34EE040F60841694402A8B4F4F1F60346
+32A80090324629465046ABF413F15046D9F41CF642F211
+718842DFF8F85B34D3387898B9B86904F047F8BAF417F6
+68B99AF96807012809DB5046B5F4F1F1DFEDBF0A00F093
+FF48BF012600D400265046B2F446F507465046B3F42EF0
+04461EB15046B5F4D9F101E0DFF8D40D0AF5D16101913B
+460AF1C8010091224601462846FBF75CFB2846FBF745F9
+284603F0EEFD0DF6C84DBDE8F087010000C04701394000
+00E03F2DE9F8432DED028BADF5C46D80460C4615461F46
+02A8BBF47DF402A821F424F0049840F005000026049017
+B140F04000049002A905A8BBF47DF400F0C1FD02F0F5F8
+02F0F7F8014605A800900B233A4600F01CFB0DF5BF60BB
+F472F4E0A8B6F4B1F59FED8E2B9FED8D1B9FED8C0BDAA8
+78F4CEF40146E0A8BBF470F401F004FB002790ED000B8D
+EDE60BD8F8C40A9EF4C1F2CDF8A805C8A822F45EF150A8
+00EB07191021484615F45FF14846B2F4B4F77F1C1E2FF2
+DB3DA822F44EF1D8F8C40A83F4FAF40246214605A8BBF4
+55F405A917A822F41DF150AF15E0A06C15F48AF00022DF
+F8F03D12F45BF641EC100B87ED000B00F0E1F869463DA8
+22F43BF1103717A822F401F117A822F4FCF028BB00F0D3
+F8D8F8C40A0022694683F435F1814600F0CAF8D8F8C40A
+00230022694683F4BDF004464846BBF431F40028E0D000
+F0BBF86A4607F1090101A84EF449F6002DC3D1E06C15F4
+4EF0C7E73DA821F406F0C5B22946042908F6F8282FDBDF
+F8683D102250A895F4A4F10C21284621F424F545B2E807
+14D46D1E6DB211E050A800EB061000F10901684635F442
+F001463DA851F4A6F518B16946C8A822F4E3F0761CAE42
+EBDBC8A905A854F492F30146E0AB0DF5BF62404603F027
+FF06464046B6F4CDF300F055FADFF8105E03DC40F2FB31
+00F060F84046B6F4AFF300F049FA03DC4FF47F7100F056
+F84046B6F459F400F03FFA03DC40F2FD3100F04CF84046
+B6F44BF400F04BF803D340F2FE3100F042F84046B6F4E5
+F300F02BFA03DC40F2FF3100F038F84046B6F4F7F30022
+41680068002312F46DF503D34FF4806100F02AF84046B6
+F4E9F30022C1688068002312F45FF503D340F2014100F0
+1CF84046B6F4DBF3002241690069002312F451F503D340
+F2024100F00EF80DF5C46D3046BDEC028BBDE8F2830000
+0000484300000000000000002846EAF79FBE000051EC10
+0B0022002312F434B517A9684622F42EB02DE9F84F2DED
+048BADF6E83D80461E460DF5E66095F4E0F0F194039059
+8100D8F8780600EE100A002700F0CDF948BF0127082208
+210DF5E66077F45FF008F588509FEDDD0B0021D030A6F4
+93F404464046BCF46FF005464046BCF46DF082464046B5
+F44FF283464046BAF467F4DDF8301C0E9108F1C8090021
+0D910C910B940A919FEDCF1BDDF8281C09919FEDCC0B00
+2108910795019008F5D160DDF8241C05910090CDF818A0
+CDF810B003974B46DDF8201C02914246314610A8BCF43E
+F008F580540346A83408F5EA6208F5E761204604F0CDF9
+DDF82C7C4046BAF42EF4012640F6B931884200D207B100
+26D8F8AC0A00EE100AF6EE000AB4EE600AF7EE008AF1EE
+10FAB0EE688A04D520EE008A68EE008A27E0F0EE000A00
+F079FD22D4F0EE088AB4EE680AF1EE10FA04D5F0EE048A
+9FEDD58A16E0F1EE000A00F068FD48BFB7EE088A0ED4F1
+EE040AB4EE600AB1EE008AF1EE10FA46BFF0EE488AB0EE
+008AF2EE008A002F29D10122012100F037F90746012100
+F075F900F057F900F05BF9C7E900010322032100F029F9
+0746022100F067F900F049F900F04DF9C7E90001052205
+2100F01BF90746062100F059F900F03BF900F03FF9C7E9
+00010722072100F00DF90746B7EE000A21F450F4B0EE40
+9ADFEDDE9AB0EE690A21F448F4D8F8AC0A00EE900AB0EE
+081A69EE200A80EE010A40EE280A10EE900A14F49EF6C7
+E90001022200F0FFF80746042100F029F900F005F900F0
+0FF9C7E900010422042100F0DDF80746052100F01BF900
+F0F7F800F001F9C7E90001062200F0D4F80746082100F0
+0EF900F0EAF800F0F4F8C7E90001082200F0FFF800F0DB
+F8D8F8AC0A00EE900A20EE200A00F035FBC7E900010722
+00F0F0F800F0CCF8F6EE000A20EE200A20EE080A00F026
+FBC7E90001CEB1012200F0B8F80646032100F0E2F800F0
+26FC00F0A6F8C6E90001052200F09BF80646072100F0D5
+F800F019FC00F099F8C6E900010DF5E661484677F40CF1
+0422042100F0B7F890ED000B24F48AF49FED9C1B21F428
+F300F0E8FA51EC180BDFF8342ADFF8343A12F4B6F31CD8
+012200F0A0F8064600F065F824F46FF421F4B3F3D6E900
+2301F019F841EC180B00F095F853EC182B4168006812F4
+C1F303D200F08CF880ED008B0822072100F083F8064607
+22082100F07EF8022200F056F800F078F8064601220221
+00F074F8062200F04CF8052100F06EF806460522062100
+F069F86F2100F041F84846B4F40CF34046D9F4B5F242F2
+117188420ED34046B4F49CF600F04AFC08F5D16400EE10
+0A22464946DFF81005FAF750FE0DF6E83DF19403205D81
+00BDEC048BBDE8F18F0000000000005940000000000000
+0000B5EE400AF1EE10FA70470000B0EE480AF0EE680A70
+4700000DF5E6607AF4B6B706210DF5E6607AF4B1B70000
+D7E9002312F476B390ED000B86ED000B7047000002210D
+F5E6607AF4A1B700000746B0EE690A21F429B300000546
+D8F8AC0A14F489B50000054618EE900A14F483B5000002
+460B46D5E9000112F452B3012148467AF484B703220321
+48467AF47FB7000008210DF5E6607AF479B700002046BB
+F4B1B6000010B500F5B0642146DFF84004FBF750F92046
+BDE8104094F4C7B700009A99993F2DE9F04104460D4604
+22042104F1C8007AF45AF7FFF7F0F900F05CF8DFED2C0A
+00F0B0FB4CBF002601262046BBF43EF6304305D1D4F8CC
+0AA4F404F7007878B1D4F8CC0AB2F456F10078022806D1
+D4F8CC0AA6F48FF10078012801D0012700E0002704F6F8
+20B6F425F100B9002700202870D4F8CC0AA4F4E5F60078
+02280CBF012000202870287830B9D4F8CC0AB4F4EFF7B5
+F4A7F500E001202870287858B9D4F8CC0AB4F4E4F7BBF4
+5AF680462046BAF4FEF1804500D201262E703846BDE8F0
+8100009A99993E112D4454FB21F93FDB0F494000EE100A
+24F448B32DE9F84F2DED068BADF51E7D8046894692469B
+4660A8B2F411F122A8B2F40EF1D8F8780620F0004000EE
+100AF1EE040A00F03AFB08F52C6722D578689DF4DAF6DF
+F8DC1D884208D200F0A4F9007878B100F0A0F900780128
+0AD000F09BF9007870B978689DF4C6F6DFF8B81D884207
+D3F868A6F411F10078072818BF012400D10024F868A6F4
+08F100250078022805D0F868A6F401F10078032800D101
+2505EA04008DF8140000F075F90078461E06A8B641B4F4
+B3F708989DF8141040F00D00F60F0890002914BF40F010
+0020F010000890002E089814BF40F4006020F400600890
+59469BF80800000708984CBF40F4804020F48040089000
+244046A8F4A4F370B14046B4F44AF73040284208D05046
+21F422F120B9089820F018000124089000F0A2FE054640
+46B2F478F0064606A909A8FBF791FC00F033F9834601F0
+67FC01F068FC02460395029609A801905B4603200090FF
+F78AFE08F5B06116A8B4F473F7B198AE9B049022AA0020
+03900290019060A9AF98009009A8B4F479F799F91000DD
+F8CCB2002818BF022803D1B2980E90CDF834B048463D68
+BBF477F50646012111A820F4B4F7019086F00101012000
+90029128462D68D5F808C04B4609AA16A9E047C8B10228
+13D199F9100018B9514608F5F46004E0F19403B0608100
+022805D1514608F5FD6039F403F306E040F22C5100F00E
+FB01E0012801D10120A0E0002C72D099F9100000280CBF
+B2EE048AB3EE048AF7EE000A9BED000A21F419F1F0EE40
+8A00F0B4F99FEDD29B53EC192B12F4A9F141EC100B24F4
+27F200F0A3FDFFF744FE53EC192B12F49DF141EC100B24
+F41BF20020DFF8D41B00F09AF800F082F80020DFF8C81B
+53EC1A2B12F4D5F341EC100BB0EE481AF0EE681A21F4AB
+F099F9100000F069F810BB9DF81400F8B19BED000AF3EE
+0E0A00F009FA18D500F06AF802460B460020DFF8881B12
+F4F5F241EC120B9FEDB11B9FEDB30B82F4F9F600F08DFA
+FFF7D5FD21F4CBF000F045F800F05BF8044600F058F8D0
+E9002351EC180B12F450F1C4E9000199F91000002818BF
+022814D178680022514682F44FF49BED000ABDEEC00A10
+EE101A20F8F01FB29991ED000ABDEEC00A10EE101A4180
+012160A87AF46DF58146012122A87AF468F500F024F812
+F4B0F2B09AC2E9000100200DF51E7DBDEC068BBDE8F28F
+C8C99100C027090030D98900B0EE408AF0EE608A704700
+0041EC110BB0EE418AF0EE618A7047000010EE100A14F4
+2EB3024653681268D9E900017047AF9801217AF438B553
+EC102B12F440B34046B5F4EBB600008DED140B4046BBF4
+F7B300002DE9F84F2DED088B8CB080468A46144602A8B5
+F4C1F308F6C4260025B068A5F467F7AB46007801280CBF
+01270027B068A5F45EF708F5F469007802280AD0B068A5
+F456F70078032804D0484620F4AAF20A2801DA4FF0010B
+BFB94046B4F4E4F3972805D2207A000702D4BBF1000F0C
+D030689DF4EBF4054601F0FCFA0246F0682B4602A9B5F4
+BCF3054621464046A8F407F29FEDA0AB18B100F0B8F800
+2856D1002D54D09DED069B01F0E4FA024651EC190B5369
+126912F419F200F0A9FCFFF775FF0522052108F1C8007A
+F4BBF405469DED080A21F444F0D5E90023B0EE40BA0020
+DFF8A41912F477F005468B461BEE100A14F49BF22A465B
+4612F43FF100F075F853EC102B51EC180B12F4AFF20122
+DFF8983912F420F019D99DED088A3FB9F3EE0E0AB0EE48
+0A20F4BCF7B0EE408A00F066F800F05EF880ED00AB00F0
+51F841EC100B21F410F0FFF730FF1DE0207A000732D548
+4620F425F270B3484620F421F2042829DA00F04BF800F0
+43F880ED00ABF06AB5F4C8F520F4F6F7F06AFFF715FFB5
+F4BDF5FEF7EFFF01F073FA8446002001900090DCE90423
+51EC190B12F4A5F141EC100B01230B22B0EE481AF0EE68
+1A51464046ABF411F60CB0BDEC088BF1940340648100BD
+E8F18F349D52A246DF913F0000000000003940FF2292FF
+0000000000000000074618EE100A14F421B2000041EC10
+0B24F478B00522012150467AF423B40000082201215046
+76F4F1B200004046B5F4B1B20000F0B5BFB004464498A0
+B98868800405D52046B9F4F9F620F4BBF158B904F6AC25
+286AB1F41BF60078092803D02046B4F4D7F408B9002055
+E0286814F4EDF141EC100B3AF49DF500F05FF800EE100A
+20F4E9F706460DA8BBF4A1F410A8B1F444F6024669692C
+A8BBF443F304F5FD6110A81EF434F32046B1F433F68DED
+080B2046BBF4AAF206900DA90AA8BBF491F42046B2F4D2
+F00746A8699DF4CEF300210591049102460AA903910097
+06A902919FED580B08A9019110AB2CA91AA8B1F424F720
+46B9F4A9F6B0EB460F08D29DED260AF1EE040A00F00AF8
+48BF012002D4286AB5F420F23FB0F0BDDFED4B0AB4EE60
+0AF1EE10FA7047000065CDCD41E1330D00000000000000
+F03F51EC100B14F43CB1F8B505462DED068B05F6AC2082
+B090ED000ADFED350AFFF7E1FF0C4617461E465DDA006A
+B1F492F50078042857D105F588503946D030A5F4E1F600
+F075F801224FF07A5311F4F6F603D940F2C25100F077F8
+2846B5F484F5B0EE408A05F5EE60BBF402F4F0EE480AB1
+F402F5B0EE40AA08220121204676F427F2042201212046
+7AF44EF30022DFF8D436C0E90023B06801279FED160AC0
+0544BF9FED150A0027FFF700FEDFF8C026DFF8E03611F4
+02F700F042F841EC100B20F4C4F600200190009000F023
+F800F0EFFA01F0E2F841EC100B3B460C2200F01FF8ABF4
+EDF402B0BDEC068BF1BD00000100803FCDCC9041666634
+428244E74A1857C63FEC6681000000000000409F400100
+A040B0EE401AF0EE601A70470000B0EE481AF0EE681A21
+46284670470000B0EE409AF0EE609A51EC190B70470000
+53EC192B12F404B10FF20400E9F7DABF70617463685F67
+6C70655F6E6176676E73736B662E637070000000002DE9
+F24F2DED108BADF6582D804691469A46B0EE40FAF0EE60
+FA00F093FA0CA881F402F44046B5F43DF50346DDF8982A
+0CA94046B0F4D2F5002800F068820DF5B46094F401F206
+A8B4F4D0F3089840F201110843089001260DF59560B1F4
+D6F4ECA8B1F4D3F4AEA8B1F4D0F470A8B1F4CDF400F0E1
+FA04464046B1F4B7F4054606A909A8FBF7D0F8FFF772FD
+01F0A6F8FEF726FE01F0AAF802460394029509A801903B
+460320009000F058FAAEA964A8B4F4B2F3002004900390
+029001900DF5B46370A80090ECAAF19403D06781000DF5
+95615CA8B4F4B7F308F6BC270CA87C68BBF4BFF1054601
+2118A820F4FCF301900096204685F0010102910CAB2468
+D4F808C05CAA64A9E04718B140F2F951FFF768FF00F064
+FA032290ED000B8DED000B00F045FA052290ED000B8DED
+020B00F03EFA04AB90ED000B8DED040B02AA69463AA875
+F416F50346012208F5D16118A875F44BF700F043FA0446
+012118A894F4E8F1032200F01FFA0446022118A894F4E0
+F1052200F017FA0446032118A894F4D8F1012190ED000B
+84ED000B0DF595607AF41FF204460121ECA87AF41AF202
+4600F047FADDF8C02A9FEDD09BC2E900010DF5B4614046
+AEF43CF7B0EE40BAF0EE60BA9DED0E0B20F48EF5DDF8C4
+0A022800F0D7F99FEDD3AB08BF9FEDD3DB09D0012807BF
+B0EE4ADAF0EE6ADAB0EE49DAF0EE69DA08F590501830B1
+F406F7DDF8C00A4168006853EC102B11F42EF741EC100B
+DDF8C00A80ED000B51EC100B0022002311F47CF505D2DD
+F8981ADFF8E00321F47BF000F0B1FF007801280CBF0125
+002500F0AAFF0078022804D000F0A5FF0078032801D1B3
+4601E04FF0000B002D53EC1B2B18D051EC1C0B11F446F6
+FFF77CFD00F0ACF900F08AF9B0EE40EAF0EE60EAB0EE4D
+0AF0EE6D0A23F4EAF500F098F9C9E900010FE051EC1D0B
+11F45BF553EC1C2B11F429F6FFF75FFD00F08FF900F06D
+F989ED000B00F073FF007805280CBF0124002400F01EFF
+B0EE40DAF0EE60DA53EC1B2B51EC1C0B11F40EF641EC1B
+0B00F048F99FEDCACBB0EE40EAF0EE60EA53EC1D2B51EC
+1C0B11F42CF553EC1E2B11F472F741EC110B9FEDC10B20
+F44AF4FFF74CFE9FED740B20F48AF48AED000B00F038F9
+53EC182B00F00AF90EBF9FEDBA0BB0EE490AF0EE690A00
+F03DF941EC180BDDF8C80A50B1DDF8C00A90ED000B20F4
+9EF453EC102B51EC180BA3E051EC1F0B0022DFF81C3E11
+F4D8F40FD3BBF1000F00F0BD8000F0C5FEDDF8C02A5368
+126851EC100B11F4C9F480F0B18000F003FF007818B100
+F003FF007870B900F0E9F851EC180BFFF7DBFB41EC110B
+9FED5C0B20F4F7F300F0BBF874E084F001010D4204D0D9
+E9000100F00EF96ED9BBF1000F06D000F0CAF8DFF8AC3D
+11F47AF464D9002D3CD000F0DBFE007801282DD14046B9
+F4D5F350B14046B3F49DF751EC100B00F0F1F802D88AED
+00CB66E0387808B99FED839B00F075FEFFF785FB00F0A9
+F800F097F853EC182B51EC1C0B11F491F453EC1A2B11F4
+D7F641EC110B00F08FF820F4F5F300F073F82CE000F0A8
+FE0078042804D100F089F8DFF8F19403606B8100303D3F
+E0254205D08AED00AB00F080F86E4B37E0BBF1000F25D0
+00F093FE0078012816D100F088F89AED001B00F05AF80C
+BF9FED620B9FED150B20F485F38AED000BDAE90001D9E9
+002311F439F431D22BE000F077FE0078042804D100F058
+F84FF080430EE000F06DFE0078022821D10020DFF8C41C
+DFF8B43CCAE900010122D9E9000111F4F8F314D80EE000
+0000000000F03F00204D494C4BCAE900010122D9E90001
+11F4E8F301D8002602E00020C9E9000030460DF6582DBD
+EC108BBDE8F28F00000000000000001040000000000000
+22408AED000BD9E9002351EC100B7047000090F8540001
+287047B0EE418AF0EE618A70470000B0EE40AAF0EE60AA
+70470000B0EE490AF0EE690A70470000D9E90001012270
+47B0EE4B0AF0EE6B0A23F470B4B0EE40CAF0EE60CA7047
+000041EC100B20F47EB3DDF8981AB8680023002281F45F
+B6000090ED000B84ED000B01210DF5B4607AF405B00000
+51EC100B11F4CAB353EC102B51EC1E0B11F40EB6DDF8C0
+0A4168006853EC102B11F406B6012201210DF5B46079F4
+ECB70122DFF8A83B11F471B30000E0930400E193040000
+00F03F00003E4000002240349D52A2C8C9910000000000
+00000040000000000000F83F000000000000E03F000014
+4046DF913F53681268D4E9000111F416B54046B1F4C1B4
+00002DE9FE4F2DED108B82B0ADF5905D8046002500260D
+F580513020D1F84812704341180DF5D962801881F404F1
+761C3C2EF0DB002600F028FD01FB060008B181F4D3F076
+1C3C2EF5DB0DF5805640F27C60D6F84862684420F437F6
+40F23460684420F432F6FFA8FF30F13020F42DF6FFA8FF
+30A93020F428F6FFA8FF30613020F423F6FFA8FF301930
+20F41EF6DFF8A41DCDE90C519FED76CB8DED0ECB8DED0A
+CB11A8BBF421F01BA8B1F4C4F108F6BC27024679680DF5
+9960BAF4C0F61BA8B1F4B9F18DF82050ADF81A508DF819
+50ADF81E508DF81D50F4A8B1F478F1B6A8B1F475F18DF8
+1C500DF5D96A00F033FD9FEDD1AA00780328A946DFEDCF
+AA9FEDCEBA9FEDCD9ADFEDCC9A04D000F023FD00780228
+02D101208DF81C00002400F01EFDAB460078052808BF01
+2400F017FD007818B100F00FFD007808B94FF0010BFFF7
+01FB20B924B94046BBF484F000B101208DF81800B0EE4C
+FA9DF818005BEA0000F0EE6CFA3ED00DF580509FEDB4DB
+D0F84C021FF4B3F4002831D0414684A8B1F445F10DF580
+5172A8D1F84C1253F460F04046B5F467F10446FFF7CAF9
+834600F0FEFC00F0FFFC00F0F19403F06E81000DFD0346
+059401200490039502950195CDF800B000F086FCB0F424
+F334A876F403F400F079FC00F0CFFC00F0C7FC00F099FC
+FFF7AFFEFFF7B1FA00283FD00DF58050D0F850021FF475
+F4002837D0414684A8B1F407F10DF5805172A8D1F85012
+53F422F0FFF7F4FE02904046B1F4CAF00446FFF789F983
+4600F0BDFC00F0BEFC00F0CCFC0194CDF800B003460299
+91ED001B00F047FCB0F433F534A876F4C4F308F5905018
+30BBF40FF000F08DFC00F085FC00F057FCB0EE40FAF0EE
+60FA0024DFEDCBDA25E000BF000000000000000000F0F8
+FBF13038F47DF39DF81A009AED0A0A401C8DF81A003BEE
+00BA9DED0A0BB6A803F00FFC00F075FCFFF72BFE05D19A
+ED0A0A79EE809A09F101090AF1300A641C00F0CDFB80F2
+C7809AF9100040B102280DD040F22D71FFF764FB9AF910
+0030B90DF580504FF0010BD0F84C0204E00DF58050AB46
+D0F850020AF12C0150F4B3F11BEA000FD9D09AED0A0AF3
+EE010AFFF796FAD2DB9DF82000401C8DF820000AF12C01
+FFA8FF30F13020F4DFF400F031FCFFF7E7FD0BD19DF81F
+00401C8DF81F000AF12C01FFA8FF30193020F4CEF40AF1
+2C0110A833F41FF483469DF818000290B0EE4C1A0AA800
+90F0EE6C1A03950195FFF7CBFD00F0BEFB00F0C1FB5946
+4046FFF721FB00283FF47AAF9DF81B009AED0A0A401C8D
+F81B007AEE80AA9DED0A0BF4A803F08EFBB4EE6DAAF1EE
+10FA1FDB00F083FB00F0F6FBFFF7BBF800F077FB00F0F7
+FB8346B8689CF4DFF516A90391024609A90291059514A9
+01910495CDF800B09FEDCD0B3FAB00F057FB00F03DFBB8
+689DED27AA00F0CDFBFFF782FD0DD100F037FB613020F4
+70F49DF819009AED0A0A401C39EE009A8DF81900DDE90A
+010022DFF8183A11F45AF10ED29DF81E00401C8DF81E00
+40E700BF0000C6420000000000000000000000409DF81D
+00401C8DF81D0031E79DF81B0000280FBF9FEDB08A00EE
+100AB8EE400A8AEE808A9DF81A0000280FBFDFEDAA8A00
+EE100AB8EE400ACBEE008A9DF8190000280FBF9FEDA49A
+00EE100AB8EE400A89EE009A5FFA89F9B9F1000F0FBFDF
+ED9E9A00EE109AB8EE400AC9EE809A00F0FFFA00F072FB
+FFF737F800F0F3FA00F073FB00F081FB00F027FB00F0C9
+FA27981090FFA9FF31613100F0EDFA00F05DFBFFF722F8
+00F0DEFA00F05EFB00F06CFB00F012FB00F0B4FAFFA9FF
+319DED27EA193100F0D8FA00F048FBFFF70DF800F0C9FA
+00F049FB00F057FB00F0FDFA00F09FFA9DED27DA4046B4
+F49AF78246FEF7FDFF0446F194038072810000F031FBFF
+F7E8FC00F034FB00F03EFB0121FFAACDF814A004910395
+029501950346FF320094B0EE4A0AF0EE6A0A1932414664
+A8B0F44EF19DF81800002861D19FED690AB4EE40DAF1EE
+10FA0AD564A876F4CCF1FFF762F90EEE900A04E000BF01
+002041DFED5FEAB6A803F0A1FAFFF7B3FCF4A803F09CFA
+9DF81C000590B0EE40BA9DF81D000490F0EE60BA9DF81E
+000390CDF804909DF81F0002909DF81900009051EC1A0B
+13F479F204EE100AF0EE6E4AB0EE44AAF0EE64AA51EC1B
+0B13F46DF203EE900A9DF820309DF81A209DF81B109DED
+101AF0EE6A4AB0EE4A4AB0EE4D3AF0EE4E2AB0EE692AF0
+EE491AF0EE680AB0EE480A2DA803F062FA0146404600F0
+9CFB9FED399A0DF5D96A002417E01AA833F4A1F20146B0
+EE4F0AF0EE6F0A4046AEF4C7F440B100F01EFA00F002FA
+A93020F43BF330365D460AF1300A641C00F0EEF980F2C7
+809AF9100058B1022800F0AF8040F29171FFF784F99AF9
+1000002840F0A68000F089FA5FEA000940F0A38000F0E5
+F94FF4D7F70028DDD0B9F1000F05F1010B0AF12C01C1D0
+40F23460684420F40BF3B4EE6D9AF1EE10FA30DB40F234
+61694400F0ECF900F05CFAFEF721FF089000F0DDF900F0
+5CFA8146B8689CF444F40246002005900490CDF8009016
+A803909FED010B0AE000BF0000000000409F4000000000
+010000400000C64208A802903FAB14A8019000F0AFF900
+F095F90AF12C0119A833F426F2814601200390B0EE4C1A
+9DF818000290F0EE6C1A38780190B0EE418A0AA80090F0
+EE618A19EE100A13F4FAF100F0C2F949464046FFF722F9
+00283ED000F08EF9DDE90C01DDE90E2310F4A4F71FD238
+7802281CD09DF81800C8B9DDE90E01DDE90C2311F4FDF1
+41EC100B23F40BF023F433F09FEDA61B1FF4D1F6D6E902
+23FFF7D7FB41EC100B86ED020B8AED020B40F27C600AF1
+2C01684420F482F230365D469DED279A43E74FF000095C
+E70DF580500AF12C01D0F84C0257E740F234600AF12C01
+684438F4B8F031E79DF81C00002836D00DF5805649A8D6
+F8486220F452F240F27C61694400F046F90DF5D96A0025
+002415E00AF12C013FA831F471F160B100F02CF99AF910
+0030366D1C022804D10AF12C0149A820F443F20AF1300A
+641C00F0F8F8E6DBFFA9FF3149AAA9312DA8B9F438F5FF
+A8FF302DA9A9304EF41AF50DF5805040F27C61D0F84C02
+69444EF411F50DF58050FFA9FF31D0F85002A9314EF408
+F500F0EEF8301A6DB290FBF1F0854203D040F2E471FFF7
+6EF89DF81C00002800F0F1940310768100BA80786BD7F4
+DCF7FEF7A4F980F0B3803869A3F40DF30078002803D138
+69B8F453F6002840F0A7800DF5805151A8D1F84C1252F4
+A9F40DF580513FA8D1F8501252F4A2F4786BB4F40DF5FE
+F79FFF3FAF51AE00EE100A3A463146404603F00EF951A9
+68461DF47CF200F026F99DED390A9FED849AB4EE490AB7
+EE008AF1EE10FAF1EE048AA8BFF0EE489A08DA00F0C2F8
+4EBFF0EE689AF1EE080A70EEC09A3FA968461DF45DF200
+F007F99DED390AB4EE490AF1EE10FAB6EE00AAA8BFF0EE
+488A08DA00F0A7F84EBFF0EE088A38EEC00A60EE0A8A4F
+F00008DFF898641EE09AF91000022818D10AF12C013FA8
+81F43AF590B100F05DF84FF44FF668B1F7EE000A28EE89
+0A1FF406F6FEF796FDDAE9022310F49AF6CAE9020107F1
+01084FFA88F7AF4228DA00F04CF817FB010A0AF12C001F
+F476F502280CBFB0EE4A9AB0EE489A9AF910000028CAD1
+0AF12C0151A881F409F50028C3D00AF12C01304681F402
+F50028BCD000F0C2F80028B8D0F7EE000A29EE890AC6E7
+02B00DF5905D2846BDEC108BBDE8FE8F00000000000000
+88C34098F96807E4B28442704700002DA91BA8B0F412B5
+FFA8FF300AF12C01704700000DF580500AF12C01D0F850
+02704700000DF580503021D0F8480270470DF599612DA8
+B0F4DBB500005146304680F4D6B3099011A916A8BAF425
+B30000FFA9FF31F1313FA81DF4B4B108F590501830BAF4
+C1B30000B0EE480AF0EE680A72AA84A934A87047F7EE00
+0AB4EE600AF1EE10FA7047000007461AEE100A13F437B0
+000041EC100BB0EE481AF0EE681A0CAB0EAA7047000041
+EC100BB0EE481AF0EE681A1FF468B516A90391059509A9
+0291049514A90191024600949FEDC30B3FAB0DF599612D
+A8B0F48AB500002440000010400000F83F0100A0400000
+08403869A4F467B400003869B0F423B4000053EC102B51
+EC1D0B10F4D0B5B0EE408AF0EE608A34A875F4D3B60000
+00236A4641462DA8B0F4DCB2B868002300220AF12C0181
+F441B0000007464046B0F444B4B0EE408AF0EE608A4046
+B0F4E9B600000DF580500AF12C01D0F84C024FF44EB501
+462EA8A3F4F4B40446B8689CF4D8B12DE9F0430C4604F1
+2C018FB020788E78637C15460328A3BF6278032A012200
+225BB1277C00EE107A00EE903AB8EE400AF8EE600A80EE
+200A01E09FED8E0AD4ED090A4B78F5EE400AF1EE10FAC6
+BF94ED0A1AC1EE200ADFED870A5BB1097801EE101A01EE
+903AB8EE411AF8EE611A81EE211A01E09FED7F1A002A1D
+BFD4ED011A94ED022AF19403A079810071EEC21ADFED7A
+1A02EE100A6178F8EE423A02EE101AA17800291DBF02EE
+901AF8EE622AC3EEA22ADFED712AB8EE422AA17C33EEC2
+2A59B1227C03EE102A04EE101AB8EE433AB8EE444A83EE
+043A01E09FED673A28B1207C00F05AF8C4EE233A01E0DF
+ED633A00270FF28C18E946382202FB0781684611F4FDF5
+99ED014A9DED005ADFED5B4A04EE245A304600F040F8D9
+ED024A207800F039F8D9ED034A207C00F034F8D9ED044A
+607C00F02FF8D9ED054A04EE245A99ED064A04EE005A99
+ED074A04EE205A99ED084A04EE015A99ED094A04EE215A
+99ED0A4A04EE025A99ED0B4A04EE225A99ED0C4A04EE23
+5A99ED0D4A05EB87007F1C04EE035A032F80ED005AB4DB
+0FB0BDE8F083000004EE245A04EE100AB8EE444A704700
+003EB504466A46FFF72BFF334DDDED000A95F9010095F9
+00106B46421E93ED010AF4EE400AF1EE10FAA1BF93ED02
+1AF4EE410AF1EE10FA491E0DDAD3ED020A491CF4EE400A
+F1EE10FA05DB9DED000AFEF739FD48BF421C29706A7000
+2095F901101FF4D6F36870002095F900101FF4D0F32870
+0A2095F901101FF490F368700A2095F900101FF48AF328
+7094F8BC2A95F90110022A02D101290CDB07E0012A03D1
+032903DA012804E0032901DB022004E0032801DB012000
+E0002084F8BC0A37BD0000F03F00002E40C8C991000000
+000000409F400000000012CC910010AE6D40C19FB53F6C
+D3933FE68E993FFE86BD3FA5019DBE9F30D0BE13E0003E
+B9F354BE53F1503E4E359F3FE6CE793E6E2188BEFBE418
+BE3B2D72C02A0CA2BF839F42BF9E7598BFED27A4BF0AEF
+983E0CCA953E09298CBDD241393ECB503BBE21292ABFE3
+AFA5BE7A806C3E8475823E60BFA2C030D8BDBFA316D1BF
+E4484EBFBD5083BF88C0583EAB5713BF17CF16BE962250
+3E5486CDBDE6459ABF03A9DCBE8041143EB74F2E3E2DE9
+F84F2DED068BADF6184D8046DDF8585CA868400800F001
+008A4614461F46009008F5C079DDF8643CDDF8602C9DF8
+5C1CB0EE408AB0EE419AF0EE619A4846DCF488F00DF51A
+60B4F4F8F29FEDCA0AB4EE408AF1EE10FA4CBF01260026
+21466846A3F42BF30346B0EE491AF0EE691AB0EE480A52
+46414636A8D5F4E9F300F077FA10A8AEF456F704A8B4F4
+61F1287AC00706984EBF40F00100400840000690DFEDB6
+8A287A400706984CBF40F0800020F080000690002E0698
+14BF40F0100020F0100006906CA8B3F486F60146D8F8C0
+014FF47A732246B3F454F7C0B1069840F0040006900320
+3874012087F82400F19403307D81009DED700B87ED000B
+B0EE680ADDED720A1FF4F0F210EE100A12F4B0F5C7E902
+0108F1C006B068CBF467F301903B460020009072683168
+0BA8B4F47EF204A907A8B4F418F10390CDF808A0019400
+9773683268B0EE490AF0EE690A76A95AA8B4F40FF100F0
+0DFA00F00FFA07A81CF49EF136A81EF43FF5297A0024C9
+074CBF08210721884206DB07AB36AA76A94046D5F433F5
+044607A94046D5F400F636A976A8AFF43EF08346012176
+A8AFF46BF000F041FCBBF1000F08EE100A41D0594610A8
+AEF458F700F0DCF906989DED2A0A40F480700690DFEDDE
+0A20EE200ABDEEC09A04A908A8B4F4C6F003908DED029A
+10A8019000972B9812F441F541EC100B7368326876A948
+A8B4F4BBF0002100910023032236A9AFF406F136A976A8
+AFF400F00700069820F48070069009D0394610A877F4EA
+F2F86E2B90386E2890786E29907CB107A94046D5F4A9F5
+00F099F900F09BF9012176A8AFF415F000F0EBFB08EE10
+0A10A8B9F4C0F7002800F0648101A8B9F494F0297A0398
+49074EBF40F0010040084000039001A9039840F4002003
+9008A8B9F493F000902B9812F4EFF441EC100B0C235246
+10A948A8B9F48DF001469FEDA40B0DF51A6336AA0BA8B5
+F41AF600285AD04846DBF4F1F7002855D04DF804CD0DF5
+00605DF804CB90ED6B0B1FF46BF24DF804CD0DF50060B0
+EE409AF0EE609A5DF804CB90ED690B1FF45DF253EC192B
+51EC100B10F461F312F46FF400F02BF9B4EE490A40F6A8
+10F1EE10FA68444CBF01270027D0E90A23416A006A10F4
+4DF312F45BF400F017F9B4EE490AF1EE10FA4CBF012000
+204DF804CD0DF54061DFED7E0A91ED000A5DF804CBB4EE
+600AF1EE10FAACBF01210021384380F00100084304BF48
+46DBF49BF730689BF48EF600240746A24606E032A5C24A
+00004842BAF1060F08D0B0687EF402F65146D0F451F740
+B100240DE0B0687EF4F9F50621D0F448F704460AF10100
+5FFA80FABAF1070FE5DB287A8007B6EE009A04D4DFF838
+06874200D24CB19FED5E0AB4EE408AF1EE10FA08BF9DED
+2C8A10D09DF81800B0EE490AC007DFED580A48BFB6EE04
+0AB4EE608AF1EE10FA48BF28EE008A4846DBF44CF70028
+23D04846DBF44DF7014610A876F4CDF3B0EE40AAF0EE60
+AA4846DBF444F700F092F80ED2B4EE688AF1EE10FA09D5
+9DF85C0C0328484602D1DBF439F701E0DBF42CF74846DB
+F427F700285FD04846DBF42AF700F078F848464CD2DBF4
+2CF720B94846DBF42AF7002850D14846DBF423F7D8B951
+EC1A0B12F4AEF3F19403C080810000EE100A20EE098A00
+F06CF88DED2C0AF0EE480A9DED2E0A1FF424F18DED2E0A
+F0EE480A9DED2F0A1FF41CF18DED2F0A4846DBF407F788
+B14846DBF405F7B0EE408AF0EE608A4846DBF4EEF60146
+B0EE480AF0EE680A10A8AEF4F0F54846DBF4EDF6D0B948
+46DBF4DFF6014610A876F45FF300F097FA2C900FE0DBF4
+E9F651EC100B53EC1A2B10F46BF13CBF4846DBF4E3F600
+F027F88DED2C0A0DF51A6210A9404600F031F80DF6184D
+BDEC068BBDE8F18F0000000000000000F0BF0100804000
+007A4400007A4500803B4553EC102B51EC1A0B10F444B1
+09EE100AB1EE000A1FF41EB1F0EE480A9DED2C0A1FF4BA
+B076A8D4F497B40000012000900023012236A95AA8AFF4
+0CB02DE9F8432DED108BA4B080460020039004900C4615
+460CA8A3F48CF004F16006DFEDCC9AF06805909FEDCBBB
+4046B0F467F29FEDCBAA90ED00CB4046B2F47CF0B0EE40
+9A2046B9F403F60028B0EE698ADFEDC48A08F1C00700F0
+3381306912F441F341EC1B0B706912F43CF341EC1A0B95
+ED0ADBDFF8081453EC1D2B002010F4B1F000F09B8051EC
+1D0B12F4E3F208EE100AD5E90C0112F4DDF200EE100A38
+EE008AB4EE698AF1EE10FA40F1878001214046B2F40FF6
+D5E9020112F4CBF209EE100AD5E9000112F4C5F200EE10
+0A20EE000A09EE090A22F463F1DFEDED0AB4EE600AF1EE
+10FA8DED030A36DB95ED001B95ED020B22F41CF100F0D0
+F90490D5E9020112F4A7F200EE100A1FF485F0D5E90001
+F0EE408A12F49DF200EE100A1FF47BF0B0EE409A9DED03
+0A1FF475F01FF473F0D5E90A01B0EE40CA12F48BF200EE
+100AD5E90C0160EE288A12F483F200EE100A40EE098AC8
+EE8C8AD5E9080195ED06CB12F477F200EE100A22F419F1
+51EC1B0B0022BF4B10F46FF0B0EE409A1DD2B868CBF46D
+F0814619EE100A12F4AAF200F068F941EC110BB0EE41DA
+F0EE61DA51EC1C0B00F05EF941EC100B0021B0EE4D1AF0
+EE6D1A484694F478F4B06812F491F2D7E9042310F4EDF1
+21F00041AA4AAA4B10F41DF09CBFF868B2F479F3214606
+A8A2F4A7F7814651EC1A0B12F432F20AEE100AD5E90801
+12F42CF204EE900AD5E90601F0EE64AA12F424F204EE10
+0AF0EE6A4AD6ED083A96ED033A9DED042A9DED031AF0EE
+682AF0EE481AF0EE4A0ACDED000A8DED011AF0EE61AAB0
+EE42DAF0EE62DAB0EE43EAF0EE63EAB0EE44FAF0EE64FA
+51EC1B0B12F4FCF100EE100A00230022F0EE6F4AB0EE4F
+4AF0EE6E3AB0EE4E3AF0EE6D2AB0EE4D2AF0EE6A1A9DED
+011ADDED000AF1940350848100494612A8B6F4F2F006A8
+0190CDED069A03A8009005AB04AA0CA907A8B6F420F138
+689BF42BF40146002002900190009007ABF86812AAB6F4
+9FF2B06812F40EF2C7E9040104F1180108F1DC004DF4B0
+F5F06A78662046B9F4B7F440B151EC1B0B0022654B0FF4
+B4F738BF012000D30020387696ED000AB5EE400AF1EE10
+FA08BF9FED5E0A87ED1A0AB0EE680A22F444F0F0EE408A
+B0EE480A22F43EF03868B0EE408A9BF4EBF30446002001
+900090DFED577A9FED567AF0EE686A9DED046A96ED083A
+05989FED4E5B0AE000BF0000C84300000040A654584132
+A5C24A00247449F0EE493AF0EE438AF0EE63AAB0EE459A
+F0EE659AB0EE46DAF0EE66DAB0EE47EAF0EE67EA12F4AA
+F141EC120BF0EE6E7AB0EE4E7AF0EE6D6AB0EE4D6AB0EE
+495AF0EE695AF0EE6A3AB0EE4C4AF0EE6C4AB0EE683ADF
+ED351AB0EE481AF0EE4A0ACDED020AF0EE41DAB0EE61DA
+B0EE429AF0EE629AB0EE43CAB0EE448AF0EE648AF0EE63
+CAB0EE45AAF0EE65AAB0EE46EAF0EE66EAB0EE47FAF0EE
+67FA51EC1B0B12F424F100EE100AF0EE6F7AB0EE4F7AF0
+EE6E6AB0EE4E6AB0EE4A5AF0EE6A5AF0EE6C3AB0EE484A
+F0EE684AB0EE4C3AB0EE492AF0EE692AF0EE4D1AB0EE6D
+1A2B46DDED020A0CAA21464046B1F47EF724B0BDEC108B
+BDE8F18300004FF094420B4B10F45BB10000915F010000
+004940FB7E6ABC7493883F000079400000C64200000000
+0000000018B7D1380000000078DEB14151EC100B12F4D8
+B0012180F83A107047B830704700218160416001607047
+000070B504462DED068B74F4BCF7B0EE40AAF0EE60AA20
+4692F469F29FED1C8BB0EE489AF0EE689A0546012616E0
+31B2204678F4F6F253EC1A2B4168006810F454F041EC10
+0B53EC102B0FF4C4F653EC192B0FF492F741EC190B761C
+204692F446F2B042E3DA022D0ADB681E10F425F002460B
+4651EC190B10F4F7F041EC180BB0EE480AF0EE680ABDEC
+068B70BD000000000000000070B504460D46681E164604
+283CBF701E042804D325210FF21000E7F7B5FF04F18000
+0580468070BD70617463685F676C70655F6D6174726978
+2E63707000000030B50C468BB00546206812F4A3F0CDE9
+0801606812F49EF0CDE90601606812F499F0CDE90401A0
+6812F494F0CDE9020104AB02A8009006AA08A9284673F4
+86F50BB030BD10B51CC91CC00C3810BD0000D0ED010A90
+ED020A90ED001A60EEA00A41EE400A80EE200AB1EE400A
+81ED000A90ED010A80EE200A81ED010A90ED000A80EE20
+0AB1EE400AF19403E087810081ED020A0120704780B500
+F0E9F81E280CBF0120002002BD10B5044604F1100073F4
+02F504F1980000F034F904F1A40000F030F9204610BD10
+B5044687F4C2F39FED152B9FED141B9FED130B04F11800
+75F44AF40F48206304F1340000F01AF904F1400000F016
+F90020E06520666066A066E06604F13400FFF70EFF04F1
+4000FFF70AFF0020A06560652065E064204610BD00BFFF
+2292FF000000000000000038B504460D4600F09BF88542
+03D3C9210848E7F705FF94F9140045FA80F01E21B0FBF1
+F11E2202FB1100702101FB0040183032BDBCAA810070B5
+04460E4676F4BBF506F1180104F11800B8F4A3F3306B20
+6306F1340104F13400FFF75FFF06F1400104F14000FFF7
+59FF04F14C054C3628463146102210F49DF63069286170
+696861B069A861F069E861306A2862204670BD000080ED
+000AC0ED010A80ED021A7047000010B5044600F002F820
+4610BDF8B504460D46AC4216461C4F03D16E213846E7F7
+ADFEB44203D16F213846E7F7A7FE95ED000AD6ED000A96
+ED011A20EE200AD5ED010A00EE810A84ED000A95ED000A
+D6ED010A96ED021A20EE200AD5ED010A00EE810A84ED01
+0A95ED010AD6ED010A96ED021A20EE200AD5ED020A00EE
+810A84ED020A2046F2BD00BF6C62800080B500F005F840
+1E8041C00F02BD0000807D70472DE9F0412DED068B0D46
+0C9F0D9E044611469846B0EE408AF0EE608AB0EE419AF0
+EE619AB0EE42AAA2F486F4414604F11800AFF47FF32563
+394604F1340002F025F8314604F1400002F020F884ED17
+AA84ED189AC4ED199A84ED1A8AC4ED1B8A00210E9804EB
+810250F82130D364491C0429F7DBBDEC068B2046BDE8F0
+8100000878401C40B21E2808BF00200870704700210170
+416001727047000000F5E05070300022C0E90222026042
+607047000010B50446FFF7FEFD204610BD002918BFD1F4
+F0B4704700002DE9F0478846914604461BF417F304F598
+5721F419F689374FF0000A41F68A1541F6891609E01AF8
+0800C02803D103203055002028530AF1010ACA453FD230
+5D0028F0D0022803D011D303282BD0F2E71AF80800C028
+02D101203055EBE7295B4A1CB1F5C06F2A53E5D2C855E3
+E71AF80800C42807D12A5B3946204600F022F800203055
+D6E7C0280AD1295B0846421CB1F5C06F3CBFC021C1552A
+530220DCE7C12804D0ECE71AF80800C12802D100202853
+F3E7C028BED000202853CDE7BDE8F08700002DE9F04104
+460D0082B0164640F2036008D1864201D2002E34D02368
+F4330022F19403708B81009B6B2DE0082E0AD3F10701D4
+86420BD323682988F43300229B6BC9B220E02368F43300
+229B6B1AE02768D7F8F4706B4629462046B84730B92368
+2988F0330022DB6BC9B20CE02368D3F8F030B61E00F0C7
+F8984738B92368D3F82C310022002120469847B9E02888
+032804D1EA88511E8941C90F00E00021032804BFEA880A
+2A09D101220020114350EA010704BF6068002808D1A1E0
+0022032804BFE8880B28F0D10120EFE7A0680028F3D004
+F5D850FA30BDF80010017129880180468048F283112888
+884203D129462046D9F4D6F341F6B818334658F80400D0
+F800C0DCF894C02A462146E047002873D129880A46A2F5
+0140FF2812D858F8040006686A88366C931F9BB2AA1DB0
+47288848F28E1188425FD129462046D9F4AEF35AE00FF2
+C8502FB1032931D0DA21E7F701FD2DE061680A291FD103
+2A0CD0062A2DD048F202039A4213D100F04FF85B6E2946
+2046984742E004BFE988042906D12268D2F80021002120
+46904710E0F12100E0F921E7F7DEFC2EE0032A08D0062A
+0DD0092A12D0102A17D0172A1CD023E02368D3F80C3100
+F025F898471CE000F025F81B6929462046984715E000F0
+1EF89B692946204698470EE000F017F85B6A2946204698
+4707E000F00CF8D9F4A4F300F008F8FAF7B4FB2046D1F4
+A5F4BDE8F38100003246294620467047236803F5807332
+4670470000F8B504462DED048BA0680D46016B01B10D46
+6668F6B10168096A8847A06801680969B0EE408AF0EE60
+8A8847B0EE409AF0EE609A51EC180B0FF4A2F487B251EC
+190B0FF49DF482B230463668F6693B462946B047A06805
+63BDEC048BF1BD000030B5044641F65C4087B0005DF2F7
+06FA072104A810F4FAF3002041F6503104AA04EB4003CB
+181D885DB11B8C0BB9012306E0012B08BF022302D0022B
+01D103238354401C0328EBDB04F5CE50006890B109190A
+88012A0CBF00220122CB8F03938B8F02938B6B01934B6B
+009304680B6BA46B04A9A04707B030BD00002DE9FE4F04
+4604F598552DED068B6C3504F5C85782B08A46B837C5F8
+04A07868DDF850B0B0EE408AF0EE608A38B1CDF800B006
+680A9B9DF82420B66AB04738680268926F514690470A98
+0668D0F80480BBF1000F09D117E053EC182B002095490F
+F4ACF341EC180BC84651EC180B0022914B0FF491F208F1
+0109EDD90FF428F48619864238BFC846C5F800A0AE60A5
+F80C8038690FF2803901688969884728616068012812D0
+052809D004280ED0032816D1BBF1000F19D140F2951112
+E0B868F19403008F810020B10268D2F8B0200021904728
+68A86001220020A88100212046D2F473F4A3E040F2DD11
+4846E7F7BBFB9DE01FFA88F1701A398C10FA81F0796A40
+1A0FF408F4002200230FF448F241EC190BB0EE49AAF0EE
+69AAE9D2786C40420FF4EFF3674A674B0FF479F253EC19
+2B0FF475F2002200230FF431F241EC190B0DD2614A624B
+0FF44EF208D2AE680FF4C2F38019B0421CD2A989491C18
+E0002200230FF440F215D26FF40012594B0FF416F20FD8
+53EC192B002056490FF44FF2AE680FF4A8F3301A03D2A9
+8911B1491EA981A8603D8F002D49D051EC1A0B4FF00052
+4D4B0FF41FF23FD204F5E0500022C0F800A051EC1A0B49
+4B0FF47AF40FF474F346193E8780B2FD6B0FF4A4F30022
+434B0FF424F202460B4651EC1A0B0FF4A8F30FF478F345
+19FD6353EC1A2BD7F840803B4900200FF412F200223A4B
+0FF4E0F20FF468F300EB080337483B64854204D3701C38
+8735484019F86338680568FA6B398F2D6DA84701E00020
+388704F5C8500021D030D6F4A2F4A06804282DD1002001
+90606801280BD138680268D26E01A9904728B94FF4F571
+4846E7F703FB0CE02046D2F47DF3A0682568D5F8305182
+B2606881B200232046A847CDF800B0204624680A9B9DF8
+2420D4F84441B0EE480AF0EE680A5146A04709E0606805
+2818BF042804D040F2FD114846E7F7DBFA02B0BDEC068B
+BDE8F78F0000F0C10000F04195D626E80B2E113E0000E0
+FFFFFFEF41FFFFEFC10000F0BFC7292C424206C2410000
+5940000018C000840C24007CF3DB10B5C824FAF7DADAFA
+F734DB20B90120E7F762DA641EF5D110BD000070B50446
+04F5C85656F8BC0F10B10168496B8847A06804F5C855D0
+35C8B1B062012141F28230005BB0842846D6F420F40120
+6073A06803280BD1FFF7D3FFA06882B2606881B2204624
+68D4F830410023A0472846BDE87040D6F430B480B541F6
+BC11085810B10168C96D8847BDE8044040F23A210CE000
+0080B541F6BC11085810B10168096E8847BDE8044040F2
+46210FF27C00E7F760BA7047000070B5888800248C8092
+1E1C8004E011F8016BAD191D80641C1D889442F7DB8542
+0CBF0120002070BDF8B504460D460020A880164606EBD6
+704010B6EB400005D040F269210FF22C00E7F738FA2F46
+0020002104E017F8012B801880B2491CB142F8DBA88020
+462168D1F8FC1088473880F1BD000070617463685F676C
+6D655F706569665F696D706C2E6370700000000017F4F1
+B000F50850DC30704710B500F694500021002200230024
+1EC0F194039092810010BD000091ED000B80ED000B91ED
+020B80ED020B91ED040B80ED040B7047000010B500F158
+0100220A709FED210B01224A7000228A608A700122CA70
+00220A7101224A7100228A710122CA71002200EBC20303
+F67804521C84ED000B03F6181403F6B81384ED000B142A
+83ED000BEEDB00F50462002393625362D36213631372D3
+60136100F65820DFF88033536100239361D36181ED040B
+136213709370D370DFF86C231370037103604371C37110
+BD00000000000000002DE9F0410E462DED048BB0EE408A
+F0EE608AB0EE420AF0EE620A0F2E84B005461746B0EE41
+9AF0EE619AB0EE432AF0EE632A98462EDBB6F4BBF21398
+119C0290019443460F980090B0EE491AF0EE691AB0EE48
+0AF0EE680A3A4631462846B6F4DFF11298039002944346
+109801903A460E980090B0EE490AF0EE690A31462846B6
+F40AF204B02846BDEC048BBDE8F041B6F48CB304B0BDEC
+048BBDE8F08100002DE9F84F2DED028B5FEA010A8046B0
+EE408AF0EE608A914614D00C9800EE100A00EE90AAB8EE
+400AF8EE600A80EE200ADFED9E0AB4EE600AF1EE10FA54
+BF0026012621E001260125DFF86CB29BF8000008F64207
+88B900F01BF907D936B9BAF10C0F0ADA4046B6F449F030
+B12D2000F015F900D90DB12D20787008F15A0420790128
+18BF002008E0DFED890AB4EE600AF1EE10FAD7D40025D6
+E7BAF1000F4FD09BF800105A2904DB2178002918BF0028
+46D100F0EDF807D936B9BAF10C0F23DA4046B6F41BF0F8
+B100F0CEF800F0E6F807D935B9BAF1080F0EDA4046B6F4
+0EF050B100F0C1F838705A217878401C787040B21DF4BD
+F617E07878401E7870002140B21DF4EFF60FE000F0A6F8
+00F0B4F87870002251EC180B684B0EF48DF704D200F09A
+F800F0A8F878705A219BF80000401C8BF80000C0B21DF4
+AEF68BF8000097F901001F28A8BF03260ADA97F900001F
+28A8BF022604DABAF1000F14BF012626784046B1F40AF5
+B5F4CCF707462078072808F6580555D8DFE800F0040D18
+2631313B4E00F080F818BB5FFA89F028B9012F33D03AE0
+5FFA89F008B107203FE0012F2BD000F070F898B92FE001
+2F04D1052020700298686004E000F065F828B306202070
+002025E0012F17D000F05CF808B1062024E0032E267029
+D01AE000F053F818B10620207000200AE0012F1FD00CE0
+012F07D100F047F820B9052020700298686014E000F03F
+F888B9032E26700ED1029828600BE05FFA89F040B90020
+207005E040F239110FF29C00E7F744F80299B0EE480AF0
+EEF1940320968100680A4046B6F4D6F42078012804D198
+F85E0A08B102202070BDEC028BBDE8F18F3878401E3870
+002140B21DF43FB600003878401C38705A2140B21DF4FD
+B50000387000217878401E787040B21DF42EB64046B6F4
+FDB5000051EC180B00220A4B0EF4AAB63870002251EC18
+0B074B0EF4A3B600000100403F0100003FE093040015CC
+910000001440000024400000344070617463685F676C70
+655F636F6E746578745F6D67722E637070000070470000
+2DE9F0412DED028B04460D46ADF59A6D90461F4628461D
+F49DF00D2804DB3B210FF2D460E6F7D4FF002084F84C00
+28461DF490F004283CDB00269FED4B8A68461EF47EF101
+4614A86022F0EE482AB0EE482ADFEDDA1A9FEDD91ADFED
+D80A9FEDD70A02FB0600B9F40DF6761C0C2EE6DB14A801
+902046B7F4F7F3294602A850F423F402460097434601A9
+2046B7F418F5019814A9401A602190FBF1F3DBB2022B07
+DB2A4614A9204600F060F8012084F84C0094F84C000DF5
+9A6DBDEC028BBDE8F081000070B51C4698B01346DFF8B8
+65266068461D4612B99FEDB80A41E0012A08BF91ED000A
+3CD0002204E051F8226040F8086B521C9A42F8D3DFF8C8
+3508222946684691F4D0F105EBD5704008B5EB40026946
+10D16A4602EBC002083A01EBC00092ED000AD0ED000A30
+EE200AF6EE000A20EE200A08E0681E00EBD070C003000C
+51F8300000EE100A684600EBC50008389DED001AD0ED00
+0A70EEC10AC4ED000A18B070BD00000000C843F8B52DED
+0A8B0646B2B00D4610461F461CF4EAF7044600200EE001
+A9AA6C41F8202001EB8001EA6C41F8302F401C2A6D0A63
+6A6D0A666035B842EEDBDFF8DC0400906B463A4601A900
+F010F900F09AFAC6E90401009811F40BF0C6E90C016B46
+3A460DA900F002F900F08CFAC6E90601009810F4FDF7C6
+E90E013046B4F4A2F6B0EE408A9FED730AB4EE408AF1EE
+10FA0FD596ED0C1B9FED700B1DF42DF586ED0C0B9FED6D
+0B96ED0E1B1DF425F586ED0E0B6B463A4625A900F0D8F8
+86ED0A0A64B20098B064052C0CDB6B463A4619A900F0CC
+F800F056FAC6E90801009810F4C7F704E00020C6E90800
+DFF83414C6E910013B460DAA01A9304600F0B9F89FED58
+0AB4EE408AF1EE10FA54DB96ED0C0B1DF44CF5B0EE409A
+F0EE609A96ED060B1DF444F5B0EE40AAF0EE60AA96ED0E
+0B1DF43CF5B0EE40BAF0EE60BA96ED040B1DF434F5B0EE
+40CAF0EE60CAB0EE480A1DF428F51DF426F5F0EE408A53
+EC192B51EC1A0B0EF45AF504460D4653EC1B2B51EC1C0B
+F19403B09981000EF452F522462B460EF420F604460D46
+18EE900A10F472F702460B46204629460EF48CF710F422
+F700EE100A20F4C4F5DFED2F0A60EE200A96ED150A1DF4
+9AF401E09FED2C0A86ED150AD6E910010022D64B0EF40D
+F507D23A46B0EE480A19A93046B7F403F702E0D148B265
+F0659FEDD10B96ED0C1B1DF485F486ED0C0B9FEDCD0B96
+ED0E1B1DF47DF486ED0E0B9FEDC90B96ED101B1DF475F4
+86ED100B9FEDC70AD6ED120A1DF465F486ED120A9FEDCF
+8AD6ED150AB0EE480A1DF45BF486ED150AB0EE480AD6ED
+170A1DF453F486ED170A32B0BDEC0A8BF1BD0000000000
+009B99193E333333333333C33F9A99193EE12E65420000
+3443304673E62DE9F94F81B088462DED0E8BA8B09246DF
+EDB48A9FEDB3CADFEDB2CA9FEDB1DADFEDB0DA00240025
+9FEDA69B9FEDA7AB0DF170091CE008EB8500D0ED000A0A
+EB850090ED000A20F403F500F063F900F053F910F48DF6
+49F8250010F4D1F600F04FF951EC100B10F483F649F825
+006D1C9DF8E0008542DED304AD00269FED99EA00279FED
+94BB28E05F4513D009EB87009FED921A90ED000ADFED92
+0A20EE010AAEF462F2DFED8E0A20EE200A1DF414F43EEE
+00EA0BF1010B9DF8E0008345E3D3B5EE40EAF1EE10FA04
+DD85ED00EA6F600835761C9FED83EA7F1C9DF8E0008742
+60D20AEB870090ED000A1DF423F408EB8700B0EE408A90
+ED000A1DF41BF438EE000A20F4DBF408EB8700002CD0ED
+000AC0EE800A0AEB870070EEA88AD0ED000A59F8270080
+EE800A30EE0CCA03D10DEE900A012433E010F463F653EC
+1B2B0EF435F410F415F600EE900AB0EE608A1DEE900A10
+F455F653EC1B2B0EF427F410F407F600EE100AF0EE480A
+AEF4FDF100F0D1F800F0C1F810F4FBF508EE100AF0EE48
+0AB0EE6C0A1DF477F3F0EE40CAF0EE480AB0EE4D0A1DF4
+29F3B0EE40DA4FF0000B89E7F0EE680AB0EE4C0A20F450
+F400F0B0F800F0A0F810F4DAF510F420F6CDE900018DED
+029B022202A9684675F495F2B0EE40BAF0EE60BAB0EE4D
+0A1DF47BF330EE2C8A51EC1B0B10F4C1F537990865B6B2
+31460329F6EE008A40DB3A4B082204A890F462F704ADF0
+07686808EB8000D0ED000A68680AEB800090ED000A04D5
+20F415F410EE100A19E020F410F4E86808EB8000B0EE40
+BAD0ED000AE8680AEB800090ED000A20F402F4F0EE400A
+B0EE4B0AAEF488F100EE68BA1BEE100A10F4CEF500F048
+F810F482F510F4C8F500F046F851EC100B10F47AF53799
+086528EE280A379880ED150A1DF425F3DFED170AB4EEF1
+9403409D8100600AF1EE10FA02D537981549416528B0BD
+EC0E8BBDE8F78F0000C842000039400000B4428DEDB5A0
+F7C6B03EBD378635000000000080764000C2631ADCA54C
+40349D52A246DF913F35FA8E3CE12E654200000000ED11
+0D0001000034E05070380000344353EC1A2B0EF456B3CD
+E902018DED009B0222694602A875F4F5B1000010EE100A
+10F472B570617463685F676C70655F6465616C732E6370
+70000000002DE9F84F2DED108BADF59A6D82469946AFF4
+FEF449465046AFF4DAF3494650460AF58075AFF4D4F268
+6AB0EE40AAA0F417F7007890B94846B0F410F651EC100B
+0122DFF808390EF4D7F207D8DFEDD00AB0EE4A0A1DF430
+F2B0EE40AA95ED009B9FEDC78B8DED048B09F5D866A868
+10F42DF5CDE9020100F0C7FC0078012807D100F0BEFC00
+7818B9F07A80F0010400E00024686AB1F476F0B5F430F3
+4FF0000818B1686AB6F428F2804600F0B1FC9FEDA3FBB1
+F495F50027B0EE4FEAF0EE6FEA38B900F0A5FCB7F459F6
+3168884200D37CB100F09DFCB8F497F131688142F0EE68
+EA06D3686AAEF413F10078052808BF012700F089FC0078
+072808BFF0EE68EAF17B5046AFF450F228B1DFF84408DF
+F84418CDE90401307BA8B100F071FC007888B900F071FC
+0078022804D000F06CFC0078032807D153EC192B51EC1F
+0B0EF49BF241EC190B00F05BFC40F2E93B007801280FD1
+306858450CD300F047FCB0EE491AF0EE691A02D29FED76
+0B13E09FED770B15E000F044FC0078022817D130685845
+14D300F032FCB0EE491AF0EE691A04D29FED700B1DF497
+F103E09FED6F0B1DF4D8F1B0EE409AF0EE609A19E000F0
+2FFCB1F415F5A0B9686AAEF4A9F0007805280ED100F020
+FC0078012809D1DFED650AB0EE4A0A1DF4B5F1F0EE68EA
+B0EE40AA9FED61BB00F0FBFB00F0E5FB99F8E80600F0DB
+FB18B300F00AFCB1F4F0F401281DDB707C00281CBFB07C
+002817D01AEE100A10F45AF4D6E906230EF42CF200F0CA
+FB00F0C2FB96ED080B1DF4ECF153EC102B51EC1C0B0EF4
+F0F241EC1C0B8DED008BB0EE48DA00F0DAFBF0EE68DA00
+7801281ED109F1C000B0F4FFF451EC100BDFF8F426DFF8
+F4360EF4E9F19FED40DB38BFF0EE6BDA13D3707C88B153
+EC1E2B51EC1F0B0EF4F7F19FED3BDB41EC1E0B06E000F0
+B4FB0078022808BF9FED2DDB00F0B5FBB1F49BF4012808
+DB707C00281FBFB07C0028F0EE6BDA8DED00FBB07A08B1
+9FED30DB00F06AFBB0EE4C0AF0EE6C0A1DF43EF100F068
+FB00F070FB53EC102BDFF87806DFF878160EF4C4F1F194
+03D0A0810041EC1F0B00F064FBB07A00F04BFBDFED0EAA
+00284FD04846B0F4FEF0B4EE6A0AF1EE10FA05DA4846B0
+F4F6F000F0FEFA38DB53EC1C2B00F057FB41EC1F0BB0EE
+4CDAF0EE6CDA36E00150C347000000000000D03F000000
+000000144000000000000014C000000000000024400000
+0000000024C0C2B8B23D000000000000E03F0000000000
+0008400000000000000040000000000000F03F00000000
+00002540920A863E53EC1D2B0020DFF8CC150EF46BF141
+EC1D0B00F033FBB1F419F401280BDB707C00281CBFB07C
+002805D053EC1F2B00F009FB41EC1F0B00F019FB007878
+B900F019FB0078022804D000F014FB0078032805D1707B
+18B1B0EE4CDAF0EE6CDA012100F012FB032180ED00CB00
+F00DFB022180ED00FB00F008FB834653EC1E2B51EC1C0B
+0EF42FF1CBE90001B8F1000F18BF8DED00DB00F0F7FA80
+469DED001BB0EE4D0AF0EE6D0A1DF48BF088ED000B6FB1
+022100F0E9FA074600F0E5FA41680068D7E900230EF4E0
+F1C7E9000100F0D6FAB1F4BCF3002848D0052100F0D5FA
+4168006810F4E1F200EE100A20F483F19FED891BB0EE41
+DAF0EE61DA00F0B3FA0022DFF8EC340EF4EEF041EC100B
+00F07EFA1DF410F000F074FA00F0B5FA4168006810F4C2
+F200EE100A20F464F1B0EE40EA51EC1D0B10F4B8F200EE
+100A20F456F12EEE000A00F08EFA00F06CFA00F058FA02
+2100F099FA0546022100F095FA00F055FA00F025FA85ED
+000B052100F08CFA0546B0EE4A0A1DF479F000F073FAC5
+E9000100F053FAB0EE409AF0EE609A9DED040B1DF46FF0
+51EC100B53EC192B0EF4A1F041EC190BB07AE0B14846AF
+F4E2F7B4EE6A0AF1EE10FA05DA4846AFF4DEF700F0E2F9
+02DBB2EE040A01E09FEDD40A00F048FA53EC192B0EF484
+F041EC190B9FEDD08B062100F04FFA054651EC190B0022
+DFF8FC330EF4BFF2C5E90001062100F042FADDE9042305
+4600F01BFA00F009FAB0EE40AAF0EE60AA062100F034FA
+074653EC1C2B51EC1A0B0EF45BF041EC110B97ED000B1C
+F4C3F785ED000B072100F022FA054600F001FAC5E90001
+082100F01AFA092180ED009B00F015FA00F09FF900F0E9
+F9C5E900010A2100F00CFA00F096F953EC102B00F0E4F9
+C5E900010B2100F001FA00F08BF900F0D5F9C5E9000164
+B1092100F0F7F90546092100F0F3F99FEDCD1B00F083F9
+85ED000B707A00285ED1012100F0E7F90546012100F0E3
+F99FEDC71B00F073F985ED000B00F0DAF900F0D7F99FED
+C21B00F069F985ED000B022100F0D0F905460121F19403
+60A4810000F0CCF9082100F01BF900F0C7F9BB4A416800
+68BA4B0DF4D3F727D2082100F0BDF9B64AB64B03E0112D
+4454FB21F93FC0E90023062100F0B1F90546082100F0AD
+F9002241680068AE4B0EF41FF2C5E90001072100F0A2F9
+0546082100F09EF9D0E9002300F078F9C5E90001052100
+F095F900F091F9032100F0E2F800F08EF90022C0E90022
+012100F088F90546012100F084F900F014F985ED000B00
+F07DF900F07AF900F00CF985ED000B022100F075F90546
+022100F071F900F001F985ED000B052100F06AF9054605
+2100F066F900F0F6F885ED000B062100F05FF905460621
+00F05BF900F0EBF885ED000B082100F054F90546082100
+F050F900F0E0F885ED000B092100F049F90546092100F0
+45F900F0D5F885ED000B0B2100F03EF905460B2100F03A
+F900F0CAF885ED000B06A890F4DDF20822082172F467F2
+012200F0B4F80546012100F028F9022200F095F800F021
+F9032200F072F8032106A876F480F30546022100F018F9
+042200F067F8042106A876F475F30546052100F00DF905
+2200F082F80546062100F006F9062200F06BF805460821
+00F0FFF8072200F05CF80546092100F0F8F8082200F04D
+F805460B2100F0F1F8022200F040F800F074F805460321
+00F0E8F8012200F055F80546022200F069F8082200F03E
+F805460A2100F0DAF8072200F02FF805460822072106A8
+76F435F3062200F046F80546072100F0CAF8052200F02F
+F80446062200F03FF86F2190ED000B84ED000B06A8AFF4
+41F60DF59A6DBDEC108BBDE8F18F00000000C843000000
+0000407F4090ED000B85ED000B7047000090ED000B85ED
+000B082106A876F404B390ED000B85ED000B072106A876
+F4FCB290ED000B85ED000B062106A876F4F4B290ED000B
+85ED000B022106A876F4ECB290ED000B85ED000B052106
+A876F4E4B2DFED1A0AB4EE600AF1EE10FA704700000121
+06A876F4D8B205469DED020B1CF465B600009FED121B90
+ED000B1CF404B60000F83F9A9999999999C93FEE7C3F35
+5EBAD13FD1DCFFFFFFFFDF3F0000594000000000000010
+407B14AE47E17A843F7B14AE47E17A843F000008400100
+FA4311EA2D819997713DB0EE40DAF0EE60DA70470000B0
+EE4D1AF0EE6D1A70470000B0EE40CAF0EE60CA70470000
+41EC100B1CF424B6B0EE490AF0EE690A1CF41EB653EC10
+2B51EC180B0DF450B651EC1B0B0DF44CB653EC192B51EC
+1B0B0DF446B651EC190B002200230DF400B610EE100A10
+F466B0686AA0F42DB20000686AA1F4C1B40000F19403F0
+A78100686AB0F43BB3000005460421504676F469B20000
+10B52DED028B0446B0EE408AF0EE608AADF4D0F4204690
+F4A9F104EBC000083880ED008BBDEC028B10BD000080B5
+FDF727FFBDE801401FF493B6000001704270837080ED01
+0AC0ED020A80ED031A00F12C0200990174019941740299
+8174C0ED051A80ED062AC0ED072A80ED083AC0ED093A80
+ED0A4A039911700499517005999170C2ED014A70472DE9
+F14F2DED048BB8B0B0EE408A8A469146684633F43AF669
+4612A81DF48EF00FF2781B0CE0B8F90010814205DA00F0
+B1F86946484634F4FFF612A81DF47AF012A81DF475F000
+2840F0888000F0A2F83C98D0F8C000002269467EF4ABF0
+00F1F008B8F902000DF423F73F4A3F4B0DF4ADF50FF48D
+F700EE900AB0EE480AADF483F310EE100A20F000400FF4
+C9F7384A384B0DF45BF541EC190B07D83648374953EC19
+2B0DF41CF741EC190B53EC192B334834490DF48AF5334A
+344B0DF458F60DF4CAF6074602A8594610220EF46CF61E
+2097FBF0F4002C01D4042C04D318210FF2C800E5F796FE
+02A850F8246000EB84004068801B0DF4DBF60022244B0D
+F4AFF7CDE900011E2000FB14700DF4D0F6DDE900230DF4
+5AF504460D4630460DF4C7F622462B460DF423F60DF495
+F6B8F90010814205DA00F02DF86946504634F47BF62D2F
+04DA07EBD77040100F306AE74B2FB4BFC7F14B00002064
+E738B0BDEC048BBDE8F18F0000349D52A246DF913F122D
+4454FB21F93F112D4454FB21094000C2631ADCA54C409A
+9999999999B9BF00003E4012A968461CF4D6B700000000
+2D0000003C0000004100000070617463685F676C70655F
+6E61767574696C2E637070000010B50446FDF7A2FE2046
+10BD25643A256409416464696E67207472616E73706F72
+7420666F6F7465722E20436865636B73756D3D30782578
+2C206C656E3A20257A75202D3E20257A750A00002C2530
+32580000002C253033580000002C253034580000002C25
+303558000000676C70655F6E6176737466696C7465722E
+6800006666863F7593883F0E2D0A420000000000010000
+0200000300000400010000010100010200010300010400
+0200000201000202000203000204010000010001010002
+0100030100040101000101010101020101030101040102
+0001020101020201020301020402000002000102000202
+0003020004020100020101020102020103020104030000
+0300010300020300030300040301000301010301020301
+030301040303000303010303020303030303F1940380AB
+8100040401000401010401020401030401040402000402
+0104020204020304020404030004030104030204030304
+030400000AD7A33BEC51383D0500000000001041000000
+400000000000000000000070410000A041000000420000
+20420AD7233C0AD7233D01000000010000000000904101
+000000000070410000904100000000000000000000E441
+0000C4410000A041010203040000A04100008841000080
+41010203040000F0410000C8410000A0410203050A0000
+F0410000C8410000A0410203050A0608060001080000FC
+FEFF00010200F668AC81006CAD810070AE810074AF8100
+78B0810085EB0F42040000000AD7A33C0000703F0AD723
+3C0AD7233D0AD7233D0300000000000040000000400000
+000000008040060000000AD7233D01000000CDCC4C3E00
+000000000000000000A04106010000010000000AD7A33C
+0000803E0000A03E020000000000803F000000000000D0
+410A000000000040C0000000C033338341333383418813
+00008FC2753EFFFFFFFF03010300000000000000803F01
+000000000000000A000000000040C0000000C033338341
+33338341000000000000F0410000000000000000000000
+00000000000000000000000000000000000100000000C0
+794400C079440000A0406400FA00000000000000000000
+00C6420000C6420000C64285EB0F42040000000AD7A33C
+0000613F0AD7233C0AD7A33C0AD7233D03000000000000
+40000000400000000000008040060000000AD7A33C0100
+00000000C03F00000000000000000000A0410601000001
+0000000AD7233D0000803E0000963E010200000000803F
+000000000000604104000000CDCC8CC0CDCC8CC06666AE
+419A99BD41B80B00008FC2753EFFFFFFFF030103000000
+00000000803F010000000000000004000000CDCC8CC0CD
+CC8CC06666AE419A99BD41000000000000F04100000000
+0000000000000000000000000000000001000000050000
+00010000009A99193ECDCCCC3E0000A0406400FA000000
+0000000000000000C6420000C6420000C64285EB0F4204
+0000000AD7A33C00004D3F0AD7233C0AD7A33C0AD7A33C
+0300000000000041000000400000000000000040060000
+000AD7A33C0200000000000040000000000000803F0000
+F0410601000001000000EC51383E0000803E0000883E01
+0200000000803F0100000000006041010000000000C0C0
+0000C0C0CDCCD041CDCCE841D00700008FC2753EFFFFFF
+FF03020103000000000000803F01000000F1940310AF81
+0000000000010000000000C0C00000C0C0CDCCD0410000
+E841010000000000F04100000000000000000000000000
+000000000000000100000005000000010000009A99193E
+CDCCCC3E0000A0406400FA0000000000000000000000C6
+420000C6420000C64285EB0F42020000000AD7233C0000
+003E0AD7233C0AD7A33C0AD7A33C030000000000104100
+0080400000000000000040060000000AD7233C02000000
+0000404000000000000000400000484206010000010000
+00CDCCCC3E0000803E0000803D010200000000803F0100
+00000000604101000000000020C1000020C1CDCC4543CD
+4C7543F40100008FC2753EFFFFFFFF0302010300000000
+0000803F010000000000000001000000000020C1000020
+C10000AF42CDCCD442010000000000F041000000000000
+0000000000000000000000000000010000000500000001
+000000CDCCCC3DCDCCCC3E0000A04032006400FA000000
+000000000000C6420000C6420000C64285EB0F42000000
+000AD7233C0000803D0AD7233C0AD7A33C0AD7A33C0300
+000000002041000080400000000000000040060000000A
+D7233C0200000000004040000000000000804000004842
+06010000010000009A99193F0000803E0000003D010200
+000000803F010000000000604101000000000020C10000
+20C13363924400C0B744F40100008FC2753EFFFFFFFF03
+020103000000000000803F010000000000000001000000
+000020C1000020C10000ED4300801444010000000000F0
+4100000000000000000000000000000000000000000100
+00000500000001000000CDCCCC3D9A99993E0000A04032
+006400FA000000000000000000C6420000C6420000C642
+012100F01F029140414A400942F8201070470000F8B504
+463E48254650F8252002F1480302F144011E681E600F68
+26EA070738060DD50F6847F080070F604FF400671F600B
+6823F400630B601269120600E03A0506D5086840F40060
+08602046F9F74CDC2C48782111FB0500C26C100002D031
+462046904704F11F00BDE8F24040B2BDE770B504460328
+04BFBDE87040F7F77E9E022804BFBDE87040FEF7EA981D
+49782212FB00152E1D96F94400012802D06FF0060070BD
+00212046F9F724DA95F8720010B12046F9F718DC2046F8
+F741DE00212046F9F7C5DA2046FCF7D4DD95F852100022
+2046FCF7ECDD70780C2804D0F8F747DC3078F8F744DC20
+460749884700212046F9F78FDA002070BD000080E200E0
+647F0100E8D491007D3F01002DE9F041F19403A0B28100
+86B0E0F47FF70026846FE0F47BF700F5117801A8009003
+AB02AA04A94046E2F459F300283BD402980199081803D1
+4046E2F460F333E0E0F465F7761C90F88802F6B2864203
+D30020E1F4ECF727E000270AE0C51BB5F5006F88BF4FF4
+00652368049800F01FF8EF1902988742F1D300270AE0C5
+1BB5F5006F88BF4FF400652368039800F00FF8EF190198
+8742F1D30298019909184046E2F425F30028B9D106B0BD
+E8F081DB683A18A9B2204618470000FEB500200090E0F4
+25F7214D846F0FF298072846E6F7FCD906461DE0694628
+46E6F764D9012817DB142805D00246142362213846E5F7
+A2F90120ADF8040001A90020ADF8060000980290204622
+68126B90472846E6F768D93046461E0128DDDAF7BD0000
+1CB5E0F4F5F60A490968806F89B201910849096889B200
+9107490B6807490A6804680749E46B0968A04713BDB4BB
+91006085890090F69100ECF89100E8F89100E4F8910070
+617463685F7076745F6576656E74732E63707000000000
+012100F01F029140DFF8C82306E00000012100F01F0291
+40DFF8BC23400942F820107047012100F01F029140DFF8
+AC23F4E700002DE9F04107000D4618BF002D164698462A
+D04EB3A9882868FCF766DF20B3B1883068FCF761DFF8B1
+387868B17969D9B9032813D0DFF8744304F15800FCF758
+D8A8B16FF0010059E0F868DFF86413A0F51650884224BF
+4FF46120F86007F10800FCF7E8DA0028E5D14FF0FF3046
+E00E20FFF7B4FFFBF7F2DE97EC060B84EC060B27784346
+0022294604F15800FBF7FEDF00230122314604F11800FB
+F7F7DF3846DFF8101388473846DFF80C138847380018BF
+0120E7F78CFE802517B94FF420750EE0032F0CD1217CDF
+F8F052FF291CBF0320FCF727DCA17A01220320FCF78EDC
+DFF8DC02B8F1000F1CBF402181610168A94301600E20FF
+F769FF0020BDE8F08170B5DFF8A852DFF8BC4205F15800
+FBF7EFDF10B92070607052E0DFF8A462706C000404D0CE
+210FF2B820E5F797F8F7F7B5DE10B1706A000407D02878
+032804BF0021FCF7F3DA002070BD0E20FFF746FF3068DF
+F8741208406060DFF870123068084330600020FBF73FDE
+0020FBF732DEB069DFF85C1280B28860706980B2486070
+6B80B2C860287803280ED1DFF844020068000A00F00100
+80F001010020FCF7E3DC01210120FCF7DFDC0120207000
+2060702878012803D100210320F6F746D8012070BD38B5
+794C7E4D04F15800FBF78FDF08B9287008E0287840B920
+78032804BF0021FCF7A2DA00206870F1940330B6810031
+BD0E20FFF7F4FEFBF732DE0020FBF7F5DD0020FBF7E8DD
+6E4D71492868084328606949207888476E48816889B2A9
+61416889B26961C06880B2686304F15800FBF794DF04F1
+1800BDE83240FBF78E9F38B5614C2078F8B1594D5C4928
+7888470E20FFF7CFFE60685C4908405949086000202070
+60700E20FFF7B2FE287800B10120E7F7AFFD2878012805
+D1BDE8344001210320F5F7E49F31BD00007CB5F4F761DC
+4C4C4D49606822680840114040F213120240884342EA00
+0512B12068104320604A48026810001CBF28469047A805
+3B4E4CD5206840F400702060206F00F003013170080018
+BF0120E7F77BFD307803281ED1B07AFBF73BDD206820F4
+00302060317CFF291CBF0320FCF715DBB17A01220320FC
+F77CDBA06F354B0203120BD004C00CC2F34531D20C18BF
+01229847F060716908001AD030788DF8000003280FD160
+6F0005000DADF80200606F0002000DADF80400206FC003
+400CADF8060003E00020ADF8020001906846884740F203
+1005421CBF06F15800FBF773DF15F0900F1CBF06F11800
+FBF76CDFA8030CD53078032809D1307CFF2806D0606C00
+0403D100210320FCF7E3DA6560F4F7DEDB73BD000000E1
+00E080E100E080E200E098E4910081DA3100D12A01000D
+2B0100800002003440104030E59100DFFF7F00DFFF3F00
+34E59100D8401040B8D19100892C010070617463685F68
+73692E6300012100F01F0291406D4A05E0012100F01F02
+9140DFF8AC21400942F8201070472DE9F04F83B0EFF310
+8B72B6F4F778DA43F60958401C41F10001A8FB004508FB
+0155640A44EAC5546D0A20462946424600230DF4B1F7A8
+FB0023A4EB020A0026B4EB0A0865EB060940F2E7300021
+001BA941CDE900014FF47A722046294600230DF49AF74F
+F47A72A2FB0045DDE90001001900904C4F4D48F8630098
+F865C7F85480C9EA0A40B865F86B40F00100F863386F20
+F0100038672520FFF7A1FF3868434940F0010038603868
+40F0100038600E70F4F725DA8BF31088BDE8F78F000070
+B53C4E3A4982B0306820F00070306070680A7880020016
+82180A7052B23AB9A8B10128B4BF4FF080604FF040600F
+E008B9002A06E000F0800102F08002914205D100284CBF
+01200320800600E00020316821F040610843306000208D
+F80000FFF7A0DB441C41F100054B2002E09DF80000401E
+8DF800009DF9000030B1FFF791DB8D42F3D828BF8442F0
+D29DF9000020B9A9210FF27400E4F77AFE306840F00070
+306073BD000038B5F4F7EBDA124CF19403C0B981002568
+25B9B3210FF25400E4F769FEE80607D510202060A068C0
+F3001008B9FFF797FF2520FFF72AFFBDE83140F4F7D69A
+00E100E080E200E000205040A0E1060011CC91003C2050
+406820504080B50720F5F702DCBDE8014000F024B87061
+7463685F74696D5F6C6C2E630000012100F01F02914008
+4A05E0012100F01F029140DFF81820400942F820107047
+012100F01F029140024AF5E700E100E080E100E080E200
+E080B51B20FFF7E6FF2520FFF7E3FF1C20FFF7E0FF1D20
+FFF7DDFF1E20FFF7DAFF1B20FFF7E1FF2520FFF7DEFF1C
+20FFF7DBFF1D20FFF7D8FFBDE802401E20D3E780B51B20
+FFF7C0FF2520FFF7BDFF1C20FFF7BAFF1D20FFF7B7FFBD
+E802401E20B2E7000010B50C4CA079C00744BF0120FAF7
+DCDEA079800704D5BDE810400320FAF7D49E10BD000080
+B5FAF73FDE0348FBF7C0D91AE00000E8D691000A2AAA02
+80B5FAF733DE0022004901E00A2AAA020120FAF733DE00
+20FAF73CDFFBF720DAFBF744DA5FF00100FBF724D9BDE8
+0140C8E70000864870478648874A01681368194031F000
+6104D140685168084020F02001080018BF0120C0B27047
+70B5F6F7D3DA7E487E4C7F4E8047FFF779FFFBF725DAF4
+F7DFD82060A068401CA060306840F004003060F3F7F1DF
+0546306820F004003060F4F7CED8606025B1FBF74EDA71
+48804703E0FBF711DAFFF779FF284670BD000010B5FFF7
+BDFF04460120F6F73FDA94F8290110B9F9F7A2DA58B900
+2200210D20E7F746FB0D20F5F7B9DE0120F6F740DA02E0
+F6F7FDDB20B9BDE810400120F6F7499A10BD2DE9F047FF
+F79CFF08B10020A2E0F9F78DDCFFF795FF08B1002697E0
+554880470600FAD0544C554EFFF788FF2568052D00F594
+7A0DDB7088C0F3400048B9F6F795DD30B9F6F7C0DA18B9
+30890021012703E070894FF42F71002761606FF000418D
+4218BF2D1A284645498847060002D1444880476AE0E7F7
+D9FA00F08BF80FF2201820B940F201114046E4F70BFD01
+208AF80000FFF792FF5FB10120F6F7AAD9F9F73ADA28B9
+F6F79FD910B10220FAF70FD91120FAF700DA3846FFF753
+FF074600F068F820B940F217114046E4F7EAFCF6F79CD9
+DFF8B09090B9F5F7F5DFE4F753FB04460D46E7F70BFBFA
+F737DCC8474FF0FF302549A043A943E7F701FB0CE0C847
+F5F751DCFAF729DC9AF8010010B9F6F76AD908B9FFF7EB
+FE0020F6F76AD957B11420FAF794DC20B94FF4AB714046
+E4F7B8FCFCF734DCFAF71EDC1448804700208AF8000011
+20FAF7B6D90120F9F7EDDB3046F1940350BD8100BDE8F0
+87007E404000E100E000E200E0E95101000CEA910010ED
+00E0055201006D540100F8E9910090E99100B955010091
+540100F5520100FFFF0300FD5601004FF4FA611120FAF7
+5799000070617463685F706D2E6300002F48704710B5FF
+F7FBFF04682CB94FF48B710FF2BC00E4F76FFC204610BD
+000080B5FFF7EFFF806802BD000010B5032805D002462B
+210FF2AC00E4F768FCFFF7EFFF2049846C436B01F1F002
+13711E4B1C1994611D4C1460147944B9846B9460446C54
+61C46BD460046C146105E0641E042C84BF0FF284049461
+0268CA6042680A6182684A61C2688A610269CA6142690A
+6282694A62C2698A62026ACA63426A9A184A64826A9A18
+8A64026B9A184A60006B181808600846BDE8104000F02C
+B8007E4040ECE09100000040405C77149162636D5F7379
+7374656D5F7368617265642E680070617463685F666169
+6C736166655F636D302E6300000000556E6B6E6F776E20
+486172647761726520457863657074696F6E00002DE9F0
+41044688B02146292014F42CF4304D314FD5F8008004F1
+F806012030754FF480110020B847B061002070622B492B
+480A46002802BF00292A482A4A3262F06100281CBF316A
+002901D0B8477062002704EB870000F59071F8B2F9F704
+DF7F1C032FF5D3686810B328681F4F002818BFB8421CD1
+30690090B8453068019070680290B0680390A06C059060
+6C06902068049003D072B60320F9F7B7DF696868468847
+B84511D00120F9F72BDD0DE072B60320F9F7AADF0D480E
+494461183000F2FF3000090001FAF78BD908B0BDE8F081
+00BFE4E0910075080100E75102000000800000000000AC
+EF0F00EFBEADDECCDC9100B9070100012100F01F029140
+734A05E0012100F01F029140DFF8C421400942F8201070
+47012100F01F0291406D4AF5E72DE9FE4304466C4D0E46
+1746984605F14400FBF79DDA10B16FF0010079E0FAF7C9
+DAB18830680FF2A419FCF78DD918B940214846E4F742FB
+B9883868FCF784D918B941214846E4F739FB4346002231
+4605F14400FBF74ADA002301223946281DFBF744DA2420
+FFF7BBFF03F4A3F6012003F4ACF65148007803F4BCF601
+2003F4AFF6F6F70DD918B94B214846E4F716FB002003F4
+B9F6012003F4B6F6E86C00906946286D00F038F86888AD
+F80800002003F4C0F6E868009069462869404D00F02BF8
+ADF80800012003F4B4F66FF46070286040F2DF30686020
+7800F0010003F4DDF6002003F49CF6012003F499F68820
+68602420FFF77EFF0120F6F7F19403E0C0810083D83220
+F3F78EDF2320FFF765FF2420FFF762FF0020BDE8FE8300
+00ADF804000020ADF80600704770B5244C04F14400FBF7
+10DA10B96FF0060070BD1425224E03E00120F3F76EDF6D
+1EF06B10B93068800701D4002DF4D1EFF3108572B62078
+08B11A4880472320FFF73CFF2420FFF739FF85F3108800
+2003F448F6012003F445F6002003F424F60020F6F73DD8
+04F14400FBF7EDD9201DFBF7EAD9FAF716DAF6F7C0D800
+2814BF00206FF0070070BD00E100E080E100E080E200E0
+60E29100FDE2910004501040005010400DC20100706174
+63685F6769692E630010B504460021FFF75DD92046FBF7
+1CDE08480C2111FB04000022017A2046FBF731DE204604
+4988472046BDE810400021024A104754E5910085B30100
+9DB30100F8B50446207A002843D0E5682068E9071FD561
+7A03291AD06FF00801A161016DC1F3460199B1A37C04F1
+200202EBC306776847B177898F4202D3791A718106E0C9
+1B002777815B1E01D40029EED10121E171690705D56FF0
+0900A0610120E07101E0A16919B120460B49884711E061
+7C21B950F8701F21F00E01016015F4897F1CBF204603F4
+6CF4A80644BF204603F467F40020E060F1BDB5F8010028
+48294A01681160C1685160016991604169D16025490B68
+1361436A5361006B9061086AD061224A486A5060886A90
+60C86AD06000211F481F4A50F8043B42F82130491C1029
+F8DB7047000038B5164C14482168154D184A01606168C1
+60A1680161E16841612169296061694162A16901630021
+0F4852F8213040F8043B491C1029F8DB0D488047E06928
+620848416869628168A962C068E862BDE8324008480047
+00001000204070E89100900020408CE89100C000204088
+C89100E9A10100DDA1010038B5FF251728044617D8DFE8
+00F00C1E2F4249505E6C7A81888F969DA4ABB2B9C0C7CE
+D5DC290020E6F752FF012858D00C20E6F74DFF02284CD0
+2246D9210FF29410E4F78AF9284632BD0320E6F740FF01
+2854D00F20E6F73BFF0228EDD147E00320E6F735FF0128
+E7D148E00420E6F72FFF01284AD02520E6F72AFF022808
+BF2525E0D00E20E6F723FF0328D5D10E25D9E71420E6F7
+1CFF0128CED11425D2E71720E6F715FF0128C7D11725CB
+E73120E6F70EFF012808BF3125C4D01620E6F707FF0228
+B9D11625BDE70C20E6F700FF012801D10C25B6E70020E6
+F7F9FE0228ABD10025AFE70F20E6F7F2FE012801D10F25
+A8E70320E6F7EBFE02289DD10325A1E70420E6F7E4FE01
+2896D104259AE71020E6F7F1940370C48100DDFE01288F
+D1102593E71320E6F7D6FE012888D113258CE71F20E6F7
+CFFE0128F7D11F2585E71E20E6F7C8FE0128F0D11E257E
+E72020E6F7C1FE0128E9D1202577E72720E6F7BAFE0128
+E2D1272570E70920E6F7B3FE0128DBD1092569E70620E6
+F7ACFE0128D4D1062562E72F20E6F7A5FE0228CDD12F25
+5BE72B20E6F79EFE0128C6D12B2554E72E20E6F797FE01
+28BFD12E254DE72D20E6F790FE0128B8D12D2546E70820
+E6F789FE0128B1D108253FE70B20E6F782FE0128AAD10B
+2538E770617463685F706D692E630010B50446EDF794F8
+04F5FE40BDE81040603026F49DB1000070B5A4B004461D
+4602292898299B2A9E04BF5178002906D1019302960090
+13780FF254020BE0002A1ABF117800290FF26C02019302
+96134600900FF26802802103A81CF49FF404201BF488F4
+18B91C201BF484F440B1606800F5FE402A4603A9603028
+F405F705E017F484F52A4603A91EF492F024B070BD4553
+575F46494C453D256420617267732825686C752025686C
+752025686C752900000000756E6B6E6F776E0025732061
+7267732825686C752025686C752025686C75290038B505
+460C4604F1100105F110003EF433F704F11C0105F11C00
+0A6802604A6842608A688260CA68C2600969016105F130
+0004F1300191ED000B80ED000B8A6882600A7B02734A7B
+427391ED040B80ED040B0A7E02764A7E42768A7E8276CA
+69C2610A6A02624A6A42628A6A8262CA6AC262096B0163
+31BD2DE9FE4F2DED108B04460D46B0EE408AF0EE608AAD
+F50A7D53EC182B002000210BF480F606D160682DF406F3
+0CF44CF041EC180B20462EF491F528B19C989C99806820
+F0210088600022606800F060FD32F422F0064600222946
+07A81AF4A0F50121301D1AF444F358B19C98007A800607
+D56068002200F045FD07A932F40CF0064674A82AF4C4F6
+024600F041FD04F584704BF4D1F39FEDC6AB9FEDC7BB00
+27059078B1006A0EF4BDF041EC1B0B0598DFF87C1AD0E9
+062300200BF489F6012741EC1A0BA7984FF0000908B100
+7821E00AA81AF4DDF4DFF85C1ACDE9089100F011FD1BF4
+07F0014608A80090CDF804900AAB0EAA04F58F504BF47C
+F603902878342808DB422806DA039820B10C98C00900F0
+01000390002F9FEDA9DB9FEDAA9B48D0287834289FEDAA
+CA4CDA2878002776283FDB9A283DDA41F21040005D0028
+38D008A82AF464F6024600F027FD5FEA00081EBF059890
+F83C0004281CBF98F83C00042823D000F091FCC1698069
+0BF4B9F741EC100B1AF4F1940300C88100C9F500F0CFFC
+16D208F1180898ED020A00F070FC0FD500F073FC0CD251
+EC1A0B02460B46D8E900010BF4E8F600F08EFC012741EC
+1D0B08A84CF40AF460A83EF403F5A699002943D04AF458
+F44AE04228B0DA04F59850F030007A0028AAD008A82AF4
+1AF6024604F5985100F0D1FC07001EBF059890F83C0004
+281CBF97F83C00042821D000F046FC416800680BF46EF7
+41EC100B1AF47EF500F084FC14D2183797ED020A00F026
+FC0ED500F029FC0BD2D7E9002351EC1A0B0BF4A0F600F0
+46FC4FF0010941EC1D0B08A84CF4C1F371E700F05CFC1A
+F4E0F5024660A904F1780049F4D2F304F10800009060AB
+059A314622A84CF4BDF308A82FF41CF79C98007A800604
+D5606807A931F41CF603E06068294631F417F6804604F1
+38004DF4DCF1B0EE40AAF0EE60AA20462EF45BF463994A
+075ABFC90901F001010121019000910295B0EE4A1A9C9A
+F0EE6A1A434608A900F01CFC22A84CF4D7F5307B800603
+D50E9840F480700E90DFF8540806902878342803DB4228
+B8BF012000DB00208DF8100018AE9DF810004FF0FF0B00
+2886F808B086F809B086F80AB00DF1380A9FED85AB00F0
+B48003988DF801B000EA09008DF80000D8469DF8000000
+2871D004F59851002200F024FC804604F59850F030D0E9
+002300F082FB53EC1A2B0BF43CF541EC1B0B9AED06EB51
+EC1E0B53EC1B2BB7EE000AD8ED090A0BF4EEF430EE60CA
+9FED6E1BB0EE41FAF0EE61FA1CEE100A24D80DF44BF780
+46894651EC1E0B53EC1B2B0BF4A3F600F08DFB00F07FFB
+B0EE40BAF0EE60BA28E00000000000000080FFFFFFFFFF
+FFEF7F00000000000000000000000000408F406F12833A
+0DF426F78046894651EC1B0B53EC1E2B0BF47EF600F068
+FB00F05AFB53EC102B00204FF080410BF473F641EC1B0B
+28464DF428F151EC1B0B53EC102B0BF428F700F04EFB80
+4660680DF1010308AA29462CF464F79DF80010002900F0
+8D8086F80880307AFF2803D00E9840F080000E90307AC0
+071DD59DF83800000619D5307A401C3072B7EE000AC0B2
+C828A4BF38303072DAED020A30EE600ADFED330A20EE20
+0A00F031FBDAE906230BF479F5CAE90601287876289FED
+2DBB9FED2ECA9FED24FBC0F2F2809A2880F2EF80039896
+F809908DF8119010EA070879D0002200F073FB074604F5
+9850F030D0E9062300F0C7FA53EC1A2B0BF481F441EC1D
+0B9AED06EB51EC1E0B53EC1D2B0BF437F49FED101B8DED
+021BB7EE000AD7ED090A30EE600A10EE100A2FD80DF492
+F6CDE9000153EC1D2BF1940390CB810051EC1E0B0BF4EA
+F5DDE900230BF45CF400F0BEFA00F084FA34E000BF9A99
+99999999B93FFCA9F1D24D62503F00000000000000400A
+D7233C00000000007522416F12033A18B19DF801003072
+6FE786F808B076E70DF462F6CDE9000153EC1E2B51EC1D
+0B0BF4BAF5DDE900230BF42CF400F08EFA53EC102B51EC
+1F0B0BF4AEF541EC1D0B28464DF463F051EC1D0B53EC10
+2B0BF463F600F089FA814660680DF1110308AA29462CF4
+DBF6B8F1000F18BF86F8099006D100281ABF9DF8110070
+7286F809B0DAE906239DF8107000F07DFA00F08AFA0598
+00F023FAD0B1059AD369926900F033FA00F035FA01280B
+DB00F01DFA00F073FA00F009FA53EC1D2B0BF4B5F441EC
+1D0B00F0CFFA00F05BFA00F0AFFA707AFF282AD1059800
+282BD000F01FFA28D551EC1D0B00F09EFA03D200F007FA
+41EC1D0B9DED060A00F013FA1AD59FED7B1B00F0F6F900
+F0EAF900F0EEF9002851EC1D0BDFF8DC240CBFDFF8D834
+DFF8D8340BF4FAF500F020FA70720E9840F480600E9028
+464CF4F6F7002802D000F0D4F9002800F08880DAE90623
+9DF8107000F01AFA00F027FA0598002800F0BFF958D053
+EC1D2B0020DFF894140BF45DF4059AD36992690BF458F4
+00F0CAF901280BDB00F0B2F900F008FA00F09EF953EC1D
+2B0BF44AF441EC1D0B00F064FA00F0F0F900F044FA00F0
+BAF933D551EC1D0B00F039FA03D200F0A2F941EC1D0B9D
+ED060A00F0AEF925D500F08FF9022818BF9FEDC1FB00F0
+89F9022818BF9FEDD7ABB0EE4F1AF0EE6F1A00F083F951
+EC100B53EC1A2B0BF491F500F0B7F987B2B77200F073F9
+012804BF380A70720E9840F480500E900E98C0041ED400
+F024FA00F0B0F900F004FAB8B1C1688A0714D5890612D5
+9FED2E1B90ED060B1DF488F351EC100BEB4AED4B0BF468
+F500F08EF9B0720E9840F480500E90DAE906239DF81060
+00F092F906AF41EC100B3246394600F0A0F905988DED18
+0B002800F0F680007834280DDB42280BDA9DED060ADFED
+D40AB4EE600AF1EE10FAA4BF00208DF85D000598C16980
+69DDE918230BF4BEF3CDE9180109A81AF4D3F101280BDB
+00F015F900F06BF900F001F9DDE918230BF4ADF3CDE918
+01287834280DDB42280BDA00F09EF913D253EC1A2B0020
+C5490AE09A9999999999B93F00F092F907D253EC1A2B51
+EC1B0B0BF491F3CDE91801284617F446F2012840F0A980
+0598D0ED080A9FEDB00AF4EE400AF1EE10FA42BFDDED06
+0AF4EE400AF1EE10FA40F1978000F093F9DAE906230646
+00F01FF941EC100BF1940320CF810060680022314631F4
+FBF300212846F2F723F9B0EE409AF0EE609A53EC192B00
+20A5490BF489F241EC1A0BB0EE491AF0EE691A9DED180B
+1DF4E3F2B0EE40BAF0EE60BAB7EE000ADAED020A30EE60
+0A00F0F9F806460F4651EC190B53EC1B2B0BF4F5F33246
+3B460BF467F2DAE906230BF435F341EC1B0B8AED06BB00
+F023F951EC1B0B53EC102B0BF4E1F341EC100B21F00041
+41EC1B0B51EC100B002200230BF40BF294BF01244FF0FF
+3451EC1A0B53EC1B2B0BF425F22DD20BF410F353EC192B
+0BF484F441EC100B1AF4C8F3064620460BF4A4F3044689
+4630460BF4A9F300F0A5F8B7EE000ADAED020A064630EE
+600A0F4600F0A7F832463B460BF41DF2224600F091F802
+460B46DAE906010BF49EF3CAE906010E9840F400600E90
+2A469B98011D684647F428F200F0CCF89B9880ED020B08
+A99B98FFF7DBFA9C98007A400704D59B980022002143F4
+02F70598002814BF0124002408A832F404F322A84CF43F
+F660A83EF40CF174A84BF4E1F70DF50A7D2046BDEC108B
+BDE8FE8F4FF094424E4B0BF423B4000000000000000032
+40B0EE40DAF0EE60DA7047000028461AF4B7B00000B0EE
+4D0AF0EE6D0A1DF428B253EC1D2B51EC1B0B0BF490B251
+EC1D0B0BF48CB241EC1D0B09A81AF4A1B000009DED6A0A
+B4EE4C0AF1EE10FA7047000051EC1B0B2F4A314B0BF48A
+B17B14AE47E17A843F04F59850F03053EC182B704741EC
+100B9DED021B1DF4FAB141EC100BB0EE4F1AF0EE6F1A1D
+F4F2B141EC100B1AF4AAB142464B460BF486B153EC192B
+0BF482B1DAE90623074651EC190B0BF47BB1000010EE10
+0A0DF4A0B3059901EB8000C06A0DF49AB30DF1180841EC
+100B3A46414604F584704AF434B6B0EE480AF0EE680A70
+470000B0EE480AF0EE680A2946704751EC100B00220D4B
+0BF438B17012033A95BFD6330000F0BF0000F03FFFFF7F
+7FFCA9F1D24D62703F4D62503F00002CC00018F5400000
+E03F78DEB14100F90541B0EE480AF0EE680A1AF4D8B39D
+ED18AB51EC1A0B002200230BF410B141EC100B60680022
+394631F489B20000B0EE480AF0EE680AE83104F584704A
+F44FB60000B0EE480AF0EE680A04F5A05104F584704AF4
+44B600222946684619F4F3B700002DE9F0412DED028B06
+460C46BCB0154620463DF4EFF728463DF4ECF706F53076
+7068ADF44BF401462AA84CF493F6014604A81AF4A7F346
+E004A968461AF4A8F3684616F4E3F50746012F39D07068
+002269467BF4D3F380467BF47EF720B34046D6F43CF600
+BB706800230022F19403B0D2810069467BF457F3C8B1C0
+6800F03001302914D110F00C0F11D0306802AA394676F4
+6BF300F0C5F853EC102B51EC180B0BF49FF003D2694620
+4618F4ACF14046B3F4B1F638B14046D8F48BF518B96946
+284618F4A0F104A81AF45BF304A81AF456F30028B3D020
+462AF40FF0012804BF20463DF48AF728462AF407F00128
+04BF28463DF482F73CB0BDEC028BBDE8F081000070B52D
+ED028B0D468AB0044695F850008DF80800164602A804F5
+307416F478F50146206806AA76F41FF300F079F851EC10
+0B53EC182B0BF453F038BF002062D3D5E90623DDE90601
+0BF438F1CDE9000100202F49CDE90401022204A9684671
+F403F753EC102B00202A490BF455F041EC180B606896F4
+8AF405460020CDE90000039003AB20686A4602A976F4ED
+F39DED000B1AF4D3F10446306840B9B0EE480AF0EE680A
+1AF4CAF12018401B306028460BF4AEF1044630680D460B
+F49FF122462B460BF4FBF053EC182B0BF4AFF10BF469F1
+044619F4ACF70F49884212D320460BF48CF1CDE9040100
+200C49CDE90801002208A904A871F4B7F651EC100B0BF4
+51F1044620460AB0BDEC028B70BD00000018F54000408F
+40012E930270999441B0EE408AF0EE608A82F48CB580B5
+D6487BF4FAF7BDE80840D44ADC4912F4D7B62DE9F0472D
+ED088B0D0088B080460FF26C3603D120213046E3F702F9
+287908B1212807DB281D4DF461F318B921213046E3F7F6
+F86879012809D1A869C449084204D1297908F1400019F4
+BEF3ACE0052804D108F1400019F423F1A5E0297908F140
+0019F449F40028F7D16879042803D03E213046E3F7D4F8
+A969B6480840B0F1606FEAD1EA69900FE7D1286A830FE4
+D1C1F38733C1F3871101910093C2F387510291C2F38731
+0391C2F387110491C0F387510591C0F38731C0F3871007
+90069100205DF82010CA11012A06D161F0FF01C943491C
+49424DF82010401C0828F0D300980BF4EBF000229B4B0A
+F475F708F1080741EC180B87ED008B9FED98AB01980BF4
+DCF000224FF079530AF465F741EC190B87ED029B02980B
+F4D0F053EC1A2B0AF45AF741EC1B0B87ED04BB03980BF4
+C5F053EC1A2B0AF44FF741EC1A0B87ED06AB0498C4023C
+6205984FEA8039C7F8249006984FEA004AC7F828A00798
+0604FE6208F1380701203870281D4DF4BEF298B1754800
+F1080181ED008B81ED029B81ED04BB81ED06AB0C62C1F8
+2490C1F828A0CE62032180F83810012038777877002140
+467CF4A4F008B0BDEC088BBDE8F087000000B591B00021
+00F8541F0121F1940340D68100417068467BF410F70146
+5F487BF426F76846D8F4E9F211B000BD00002DE9F84F2D
+ED028B98B004462598DDF890900D46002104F1A0060170
+9046307800289B469FED5B8B73D108A87BF4EEF6414620
+4600F076F804F1380720B14B4991F83800032807D0387F
+00281DBF38780028214604F1580108A87BF4F1F6DDE90A
+010DF4ADF000900DF1280AA434DAE902010DF4A5F00190
+DAE904010DF4A0F00290DAE906010DF49BF09AED080A03
+90B8EEC00A8DED040A9AED090AB8EEC00A8DED050A9AED
+0A0AB8EEC00A8DED060A9AED0B0AB8EEC00A8DED070A70
+69854208D0786E2246294678F498F410F1010F07D07561
+9DF8580002280CBF0123002305E008A8D8F472F29FED2A
+0B15E06A46D9ED000A9BED000A4146204671F41CF210EE
+100A0DF4A4F041EC180B08A8D8F45DF2B0EE480AF0EE68
+0A18B0BDEC028BBDE8F18F10B50C462DED028B94ED000B
+19F402F651EC100B0022134B0AF442F60FD294ED028B11
+4B51EC180B01220AF415F606D80022114B0AF434F638BF
+012000D30020BDEC028B10BD0000D0CE89000CCC910000
+3F00C00000C0CF0000103E000000000000703E00004E40
+00805640295C0F00000000000000000000806640706174
+63685F676C70655F696F6E6F6D67722E63707000002DE9
+FE4304468846C2F478F408B100205EE0FAF79FDE0646A0
+68371A606810F1010F02D0B7F57A7F02D90020A6606060
+656805E0DEF4ACF4D0F88002E2F7D8DEF5F748DFF5F7C4
+DF8146DEF4A1F4D0F87C0281450DD2DEF49BF46168D0F8
+800240186060DEF494F46168D0F884028842E0D242469F
+A18E20F5F7F0DEDEF488F46168D0F8840288420DD2F5F7
+23DFF5F79FDF024660680FF28821029001973346A06800
+9010E0002918BF8D420FD0F5F711DFF5F78DDF61680291
+01973346A168009102460FF27C218F20F5F7C7DE0120BD
+E8FE8338B50C461546DEF459F42A46214600F51170E0F4
+2BF00246AA4206D0BDE838404E210FF20C20E2F7D2BE31
+BD30B50C46C1B00FF260219720F5F7A6DE002C00F0ED80
+DEF43BF4012180F8611212AD2068E96A68614908A08828
+83E08868832089A8836089E883A0892884E0896884208A
+A884608AE8846069A86294F8480000F0010040EA4100E8
+6220F00200A16CC1F3400140EA4100E86220F00400A16C
+C1F3800140EA8100E86220F00800A16CC1F3C00140EAC1
+00E86220F01000A16CC1F3001140EA0110E86220F02000
+A16CC1F3401140EA4110E86294ED060B8DED100B94ED08
+0B8DED120BF19403D0D98100D4E90A010CF422F7A860D4
+F8F0010CF465F702460B46D4E90A010AF4BFF60CF415F7
+E860D4E90C010CF410F72861D4E90E010CF40BF76863D4
+E910010CF406F728633E48006868643D480068A8643D48
+0068E86494F84C003228A8BF32208DF8980000200DE004
+EBC00210A912F84E3F01EB400103F03F0301F8593F401C
+92794A709DF89810884238BF3228EBD310A8E0F440F068
+69E0F44FF018A8DEF4A2F594F84C0004F14E01E8F712F8
+DFF4B6F00446DFF4BBF0844206D1DFF4B3F00446DFF4B8
+F084420CD00FF208119620F5F7E7DDDFF4A7F00446DFF4
+A0F02146DFF4D7F0F9F7B3D80FF23411D0E90623CDE90E
+23D0E90423CDE90C23D0E90223CDE90A23D0E90023CDE9
+0823D0E91023CDE90623D0E90E23CDE90423D0E90C23CD
+E90223D0E90A23CDE90023D0E908239620F5F7B6DD41B0
+30BD25730000B8C99100BCC99100C0C991007061746368
+5F7076745F656E67696E655F6362732E63707000000000
+284F6E4C6F673A427265616B2025642C2025642C202564
+2C2025642C202564290A000000284F6E4C6F673A44656C
+61792025642C2025642C2025642C2025642C202564290A
+000000476C4D6963726F4E617643616C6C6261636B733A
+3A4F6E526573706F6E73652073746172740A0000557064
+6174696E672073746F72656420636F6E74657874207374
+61747573207768656E2074686520666972737420706F73
+6974696F6E206973207075626C69736865640A00000000
+436B6747657452756E74696D65496E666F2C256C6C752C
+256C6C752C256C6C752C256C6C752C256C6C752C256C6C
+752C256C6C752C256C6C752C256C6C750A000830EEF7F7
+BB000010B504464FF404F6204610BD70B504460D4604F5
+4F6690B004F55471304600F027F8684629F43AF7024629
+46304642F4C5F750B101208DF83900694600208DF83800
+606D02689268904710B070BD0000012900D0704780B541
+684FF4FA7000903C23052201F55D703DF422F501BD0000
+70B5874D82B000200C4628706870002611E0E06800EB86
+014888400544BF0120287068463DF4C8F3684636F4E1F7
+08B101206870761C60898642EAD373BD000070B506462D
+ED0A8BD6F8E4000C460168D1F8A411884724280CBF0125
+0025B4F90A0000EE100AB4F9000000EE900AD6F8E40001
+68B8EEC00AF8EEE00AC0EE80BADFED560A896F80EE208A
+88470028DFED548A59D000F0C6F8F3EE000AA08A20EE20
+CA00EE100AD6F8E4000168896CB8EE400A20EE2B0ADFED
+4B0A20EEF1940360DD8100200A00EE08CA88475649F2EE
+01AA0A780228B7EE089ADFED459A9FED45AAB0EE6ABA02
+D162B9012005E0042801D13AB908E0012804D1DFED3F9A
+0DB1DFED3E9A032805D1DFED3D9ACDB1F0EE6A9A16E004
+2805D1DFED3A9A8DB1DFED3A9A0EE0022805D1DFED389A
+4DB1DFED389A06E0052804D1DFED369A0DB1DFED369A48
+7808B39FED350A79EE809A1CE000F06CF820EE2B0ADFED
+310A20EE200AA08A20EE08CA00EE100AB8EE400AF2EE0B
+0AB7EE009AF3EE099A9FED2AAAB0EE04BAF2EE068A00EE
+20CAB4F9000000F04FF8B4F9100000EE29CA00F049F8B4
+F9080000EE0ACA00F043F8E08A00EE0BCA00EE100AB8EE
+400AB4F90A0000EE28CA30B100F035F88CEE000A30EE09
+0A03E09FED050A39EE000A84ED030ABDEC0A8B70BD0000
+00007A4400000000CDCC4C3E9A991941CDCCCC3ECDCC24
+415C8F1A41CDCC0C4133339341E17A8A419A999D41CDCC
+92413333B7417B14AC413333333F000016420000FC4118
+CC9100B4F9120000EE100AB8EEC00A704700002DE9F843
+0C46462C804616461D460FF2605902D3102100F061F808
+F5F7671421386811FB04040020A0700120A0700020E070
+55EA060008D038690168D1F8A410884710B91A2100F049
+F8002E08F5F870214616D02AF49EF410B9252100F03EF8
+204636F4A3F628B10020A0700120A070E0700CE0A07841
+1CA17000190121C17005E02AF48BF410B9342100F027F8
+002D08F50670214616D02AF47CF410B93A2100F01CF820
+4636F481F628B138690168D1F87C11884778B1A078411C
+A17000190221C17008E02AF469F428B94846BDE8F44343
+21E2F778BBBDE8F1834846E2F773BB00002DE9F34FC3B0
+00F5E4700C90439800F5F76415E000F000FA00F006FA01
+68C9688847C11C20698B440168D1F8CC108847584519D2
+0FA835F405F30FA835F442F34398403018F4AEF3002840
+F0CF8144990FA835F457F2439800F140011CA818F42FF7
+4FF0060B5BE0B878012803D04FF4937100F0D5F997F903
+0018B140F2271100F0CEF9206805990818407B18B94FF4
+947100F0C5F900F0B7F907687F6A51184A782169B84718
+B94FF4967100F0B8F900F0B2F900F0B8F92168059A0495
+511809AB0A7B03920122029208AA019200F091F9AD680F
+A9A847079D4398EDB22946583018F4D3F5439829464030
+18F4F0F5002000F085F94118401C002203288A71F7D300
+F07DF90020087300F079F9FF20487300F075F900200861
+1CA818F4B0F61CA81CF459F2002884D11CA81CF45EF2C0
+B20790F19403F0E08100142148430590059920680F1838
+4636F4C5F50028394606BF439800F5BC700C982AF4ACF3
+B8723946439800F5D0702AF4A5F3F87208AB079943983A
+46C9B23BF407F2384600F0DEF90CC809A938460CC136F4
+A4F5002598B320690168D1F81011884700281CBFB87C00
+2805D078782F2818BF4FF0010800D1A8460C9839462AF4
+7DF388F00101084214D020690168896F884778B9BDF828
+0040F47F40ADF828000A2138788DF825104000EB3840F4
+7F40ADF828009DF8200000F0E3008DF82000B87CA8B138
+4636F46DF5402518B9384636F464F500B1C025384636F4
+5BF538B14398394600F5F8702AF448F300B1C025206901
+68D1F8A410884700283FF4F0AEB878069008B99F2102E0
+042802D3A02100F0ECF800F0E6F800F0ECF80268069952
+69C9B29047C01C0B9020690168D1F8CC1088470B995944
+8842FFF4E1AE09A915A837F4C5F34FF0000809E038464C
+F499F418B1384636F47BF0706008F10108069880457BDA
+08EB070090F9039019A800EB880A484636F4E1F08AF800
+0007EB4906707B10B9BA2100F0B0F8307B8AF801008AF8
+025008A80DA901EB480102780A70B9F1000F42784A7015
+A800EB8806CCD00DA80DA910F8180000F0E70001F81800
+B9F1010F08D138464CF40FF1002838460ED035F460F7BF
+E7B9F1020FBDD138464CF403F1002838460AD035F482F7
+B3E74CF443F4002838460AD035F464F7ABE74CF43BF400
+2838460AD035F48AF7A3E736F4C3F40028384618D035F4
+ECF79BE736F4BBF40028384602D035F4B2F793E736F4AF
+F4002890D09AF8020000F07F008AF80200384600F0FAF8
+85E736F4A1F4002882D0384600F01CF97DE7002000E040
+1C0699C0B28842FADB00F032F805686D6A51184A782169
+A84718B94FF4827100F033F800F02DF800F033F819A904
+910DA9039115AB0699059AC9B202910121019121685118
+00F00AF82D690FA9A8470B98834475E645B0BDE8F08F00
+004978079A0091D2B2056870472168059A511870476069
+059A002100913B462168704700000FA835F483B100000F
+F26800E2F75EB90168096A0847000070B504460D463AF4
+3DF70FF2500620B94FF4A7713046E2F74DF9294604F140
+001CF442F020B140F24F113046E2F742F9294604F15800
+18F433F4294604F1F80018F42EF4294604F1D00043F491
+F6294604F1A000BDE8704018F400B470617463685F676C
+6D657372645F7361745F6D67722E63707000000038B504
+464CF464F30FF268150168896F884710B9162100F07FF8
+2046F1940380E4810018F4D6F6002820460DD14CF46DF3
+062807D8DFE800F016162C1604161600042032BD232121
+E018F4C3F6012820460CD14CF45AF328B1C01E012802D9
+801E0FD001E0022032BD2F210FE018F4B1F602280AD120
+464CF448F310B1C01E022801D8082032BD3A2100E04021
+00F047F8012032BD000010B586B00478A4F15600092810
+D268460FF2BC0114220BF493F0062117484170694601EB
+4401047031F8AC1C416002E0134800EBC40006B010BD00
+0070B5044636F4A6F30FF29C0510B96A2100F01CF800F0
+38F802D36C2100F016F82078562808DB5F2806DA0FF2A4
+0101EB400030F8AC0C70BD034830F8160070BD00CC9100
+74440500F84B05002846E2F78FB8000070B5044636F47C
+F30FF2480510B97A21FFF7F2FF00F00EF802D37C21FFF7
+ECFF2078562804DB5F2802DA313880B270BD304670BD20
+78A0F15106F6B2252E70472407F505EF061A00C4016A05
+67029A04BE07000070617463685F676C6D657372645F61
+7369635F756E69745F636F6E7665727465722E63707000
+0000801D021CAA16D6179C052A167D19980C9F1100002D
+E9F041ADF5006D0446C0208DF800000D46C1208DF80100
+90460220002641F6C81716E0725D00F80D200846B0F500
+6F02D100F027F80020715DC02902BF00F80D10401CB0F5
+006F02D100F01BF80020761C411C4645E5D3C02200F80D
+20B1F5006F02D100F00EF80021C42001F80D004A1C3859
+12B26946CDF4E6F40DF5006DBDE8F08138594FF4006269
+46CDF4DCB470470000704700004F210FF28C20E1F7F5BF
+00002DE9F04204468EB0A0681646B0420D469946666004
+D058210FF26820E1F7E4FF4FF0FF30A06004F5C85757F8
+B80F02686168D26FC9B29047386802686168926A89B290
+470420ADF80000ADF806501420ADF80200ADF808600020
+ADF80A00ADF81200042E18BF052E07D12368D3F8E43004
+AA03A92046984702E00390ADF81000AE4270D0012E06D0
+032E09D0042E1FD00A2E54D062E000F073F8386803215A
+E0042D5BD1E07B002858D00020E073032138680268D26A
+9047B86800284ED041F2683103680A5DD3F8A830002198
+4745E004F11C0017F4C8F704F1300017F4C4F704F14400
+17F4C0F704F1580017F4BCF742F2181100200855A07B70
+B10020A073B86840B10268D2F884209FED4C1B9FED4B0B
+0021904700F033F8052D1ED006A828F4FCF5014641F608
+30005BADF81800B86898B10268D2F8942090470EE03868
+0268D26A1021904738680268D26A022190473868042102
+68F1940310E88100D26A9047002104F5DD50D1F40DF4B9
+F1000F06D100F080F869462046984700F073F80EB0BDE8
+F08238680268D26A01211047000070470000F0B5ADF6F4
+7D04460C20ADF80200ADF806100D20ADF8000016461D46
+15F430F42CF4A4F00290022222A103A80AF4DEF600F048
+F82B460020ADF80E00324600F041F840F6EC70BDF80210
+471A394604A81AF418F3BDF802104118ADF80210694641
+18381A01F1100605D106220FF2A401B01F0AF4ABF616F8
+010C20B1002006F8010B00F019F89DF80200C00703D500
+20307000F011F8694600F022F82046984700F016F80DF6
+F47DF0BD0000000000000000000025730000BDF8020040
+1CADF802007047BDF80200801CADF802007047BDF80200
+821C92B26946204676E600002368BDF80220D3F8F83070
+47704700007047000070617463685F676C6D655F706569
+665F696D706C5F656E632E63707000000000202E2E2E20
+0A000010B590B004462EF445F120680268926804F16001
+9047684629F4A8F00021ADF83810014604F1640029F4DE
+F010B010BDF0B589B004460F4615462EF4ABF4B86D0268
+926829469047064678680123012229462AF497F2070000
+F0D580E068C00540F1D1802846F0F79FFB002800F0A980
+287808B1212803DB422812DB512810DAE06880030DD529
+4638462AF431F04BF473F2022805D100F0B9F800F0C3F8
+00F0B9F8287834282ADB422828DAE068800325D500208D
+F814000490294638462AF42BF004A903910DF111030DF1
+1201029106AA0DF11301019105A9009107A930F457F79D
+F81110084209D09DF81000022805D100F08BF800F095F8
+00F08BF8287851281EDB76281CDAE068800319D501208D
+F80000294638462AF43AF022696B46294646F413F49DF8
+001081F00101084207D000F071F800F069F800F073F8C4
+E90E01287876283CDB9A283ADA00208DF80A008DF80900
+2946384629F4EDF702A901910DF10A030DF10901009103
+AA04A945F46AF5201D816821F4003181609DF808000128
+1DD002280DD1201D41F40031816041F40011816000F038
+F800F042F8C4E90E010DE096F874000D281CBF0C281128
+06D1201D41F40031816021F400118160287851281EDB76
+281CDA284618F47DF3012804D0284618F478F3022812D1
+201D816841F400318160816821F020018160207B800747
+BF201D41F01001201D21F01001816009B0F0BD00002846
+15F4D5B40000C4E90E01201D816841F4001181607047D4
+E90E0153EC102B09F4ECB510B5040007D09FED102B9FED
+F19403A0EB81000F1B9FED0E0B6FF48FF29FED0C0B9FED
+0D1B84ED060B84ED080B84ED0A1B84ED0C0B002084ED10
+0B84ED121BA063BDE810400148F1F716BC30D989000000
+00000000000000000000008803412DE9F04FADF2CC4D82
+460AF5D75168463BF436F30AF52455F8352A46694661A8
+0AF5345628F480F37436B06A81075ABF400900F0010701
+276E212CA818F45AF11FB92E9840F010002E9001219DA8
+15F485F1022193A815F481F1042189A815F47DF1FFA8A8
+3015F47FF1052157A815F475F1FFA80621803015F470F1
+0AF114072CA93C68684618F43BF123685B6A0246214617
+A898472A4617A90DA828F444F361A921A83CF49CF221AA
+0DA903A828F43BF39DA900F0F9FA2FAA03A97FA828F433
+F338680168096A884701462A4614A828F42AF361A900F0
+E8FA00F0EFFA7FA900F0D7FA00F0E4FA9DA943A83CF478
+F243AA694622A828F417F37FA914A83CF46FF222A900F0
+D1FA00F0D8FA00F0C0FA00F0CEFA2A46694675A828F405
+F342F6F41042F2117150F80A00884208D322AA7FA96846
+3CF466F2694675A83CF474F27FA918A815F4F8F07FA90E
+A815F4F4F075A904A815F4F0F075A94DA815F4ECF00AF5
+A85000F11C08404637F4C5F001462A4600F0B0FA00F08B
+FA39AA2FA943A828F4D2F239A815F4D1F00146504620F4
+91F46BA815F4CAF00146504620F4C4F542F6EF5919F80A
+00002865D061A9E3A83CF416F2E3AA2946D9A828F4B5F2
+FFA98031EDA83CF40CF2EDAAD9A9CFA828F4ABF293A9F7
+A83CF403F2F7AACFA9BBA828F4A2F2FFA889A908303CF4
+F9F1FFAA0832BBA9B1A828F497F2FFA857A930303CF4EE
+F1FFAA3032B1A900F05FFAFFA89DA958303CF4E4F1FFAA
+583200F05AFA00F02AFA61A900F03CFAB1AA294600F04D
+FA9DA9BBA83CF4D3F1BBAA00F04AFA00F012FA38680168
+096A884701462A46B1A828F469F261A9BBA83CF4C1F1BB
+AAB1A900F033FA9DA9CFA83CF4B9F1CFAA00F030FA00F0
+F4F90AF5D45420463AF4FBF7834617F476F400283CD159
+46CFA817F4FEF706E0694622A83CF4D1F1CFA817F4D6F7
+CFA81BF47FF360BBCFA81BF485F3C2B20AF5146168463A
+F461F0CFA81BF47CF3C1B220463AF4C8F70828E6D8DFE8
+00F0070A06060D1005131600DAE7DDE7694639A8D8E769
+4643A8D5E769460EA8D2E7694618A8CFE769464DA8CCE7
+694604A8C9E76BA83CF49EF1B8B96BA900F0CBF900F0AC
+F92FA922A818F488F12FA90EA818F484F100F0AEF92FA9
+4DA818F47EF12FA943A818F47AF102E06BA83CF484F1F1
+940330EF81000AF5345419F80A00C13460B1207818B900
+F0A8F900F08AF900F090F943A83CF473F122A83DE0E079
+58B318A83CF46CF122A83CF469F100F081F94DA83CF464
+F139A83CF461F143A83CF45EF161A900F082F92A4600F0
+9CF900F06CF9607820B99DA900F080F900F06DF9F86801
+68D1F87411884700281CBF207A002856D004A80FE05046
+20F494F670B118A83CF43CF122A83CF439F100F051F904
+A83CF434F139A83CF431F141E093AA7FA9C5A828F499F1
+C5A83CF426F118B900F053F900F041F9607820B99DA900
+F04DF900F03AF989AA93A900F058F9A7A900F044F92FA9
+4DA818F403F1E07810B900F027F911E0FFAAA83257A9BB
+A83CF4E2F089AABBA9B1A83CF4DDF000F03DF9A7A900F0
+2BF900F018F9207848B900F024F900F006F900F020F92F
+A922A818F4E0F019F80A0068B943A8039018AB39A80290
+04AA0EA801904DA922A80090504620F4F5F4FFA9A83100
+F008F92FA939A818F4C7F0F8680168896F884700283FD1
+00F0F3F8A7AA04A900F00EF900F0DDF800F0EBF8A7AA4D
+A900F006F900F0CDF800F0E3F8A7AA18A900F0FEF800F0
+C1F800F0DBF8A7AA22A900F0F6F82FA922A83CF4A1F000
+F0D1F8A7AA0EA900F0ECF82FA90EA83CF497F000F0C7F8
+A7AA39A900F0E2F82FA939A83CF48DF000F0BDF8A7AA43
+A900F0D8F82FA943A83CF483F097480078002864D02FA8
+14F4F8F6002513E0306830F825008DF80000684635F4A4
+F548B1306800EB850000F028F918B169462FA816F479F2
+6D1C42F6725030F80A008542E5D32FA83CF467F0002840
+D100F08FF8B1AA04A900F0A1F8A7A900F075F800F086F8
+B1AA4DA900F098F8A7A900F064F800F07DF8B1AA18A900
+F08FF8A7A900F057F800F074F8B1AA22A900F086F8A7A9
+22A83CF436F000F06AF800F07CF8A7A90EA83CF42EF000
+F062F8B1AA39A900F074F8A7A939A83CF424F000F058F8
+B1AA43A900F06AF8A7A943A83CF41AF00AF5905004A974
+3036F4B0F54DA90AF5895036F4ABF518A90AF5BA5036F4
+A6F50AF5C05022A9103036F4A0F50AF5B0500EA9703036
+F49AF50AF5985039A9C83036F494F543A9404636F490F5
+6BA90AF5C75036F48BF50DF2CC4DBDE8F08F00002FA918
+A83BF4E6B72FA94DA83BF4E2B72FA918A817F4DCB72FA9
+04A83BF4DAB70EA83BF4E3B700002FA904A817F4D0B761
+A939A83BF4A4B757A9A7A83BF4A0B72FA9B1A83BF49CB7
+93A92FA83BF498B739AA0AA9684628F437B000002FAA14
+A90AA828F431B00000B1AA0EA9A7A828F42BB00000F194
+03C0F28100A7A92FA828F426B01FB504460878022806D0
+03284AD03D2845D03F283DD047E0012003903F23FF2002
+902D223420019016215020009004F5B050703036F4F4F5
+012003903C233A2002901B223020019005214720009004
+F5895036F4E5F5012003903C23FF2002901A2230200190
+04214720009004F59050743036F4D5F500F01FF804F5BA
+5036F4CFF500F019F804F5C050103036F4C8F508E02FF4
+CDF042F6C451085502E0204620F43EF6002000E0024804
+B010BD000098928900D5080400012003904023FF200290
+22223020019002214720009070474088400A00F0010070
+470000002070472DE9F0410F4682B080463878022808F5
+097408F5F6766CA50AD0032800F0CB80052800F0B18006
+2814D00C282DD0C6E040463EF49BF1206800F596700090
+00230622414630463CF479F108F5E67017F493F1AEE078
+7802280DDA40463EF4AEF040463EF483F12068C8300090
+06227878431CDBB204E04FF49670009000230522414630
+463CF45AF193E078780C2804BF207F0028F8D108F13C06
+B0680168276A896C88470146DFF87C05DFF87CE5DFF87C
+35DFF87C2500EA070474451CBF384098422BD1DFF86C45
+0FF2B050A74218BF974209D1012918BF022920D0032918
+BF04291CD0712116E0DFF84C25974209D1012918BF0229
+12D0032918BF04290ED07B2108E09F4205D1012918BF03
+2906D0822100E08621E1F7EFF800E01746306802689269
+39469047B0680268126D39469047B06890ED540AFAEE06
+0A30EE200A80ED540A9FEDB30AB0680168D1F8E0118847
+B0684EF496F6B06812F4C1F548B9B06813231122012112
+F4ACF52A46DFF8CC141BE0B0680368DB6D002200219847
+2A46DFF8BC1411E098F81E02401C88F81E02C0B2022806
+DB40463DF457F52A46DFF8A01402E02A46DFF89C144046
+3BF4A9F6002005E030463CF408F1F9E7DFF88C04BDE8F6
+810000000000002DE9F04F0D460FF2C441ADF6FC0D4CC9
+044606A800274CC000208DF810000FF29046606C12F41C
+F1606C16F455F003284FD100F00BF901280BD000F007F9
+022807D000F003F9032803D000F0FFF808283FD1606C01
+68C96A8847DFF82814884208D0DFF82414884224D0DFF8
+2014884214D02BE000F0EAF8012803D000F0E6F8022801
+D1032728E000F0E0F8032803D000F0DCF8082820D10427
+1EE000F0D6F8032803D000F0D2F8082801D1052714E0F3
+2110E000F0CAF8032803D000F0C6F8082801D1062708E0
+FF2104E040F2051101E04FF4867100F0BDF8606CF19403
+50F681000168896C88478046606C41F4B5F38146606C15
+F4D7F75FEA000A17D0606CDFF85CB30168496D88470BEA
+0000D44988420CD0606C0168496D88470BEA0000D14988
+4203D040F2191100F096F8606C0168896A8847CDF800A0
+4B46424639460AA84EF404F604A94FF47FF3606C4FF418
+F738B1606C4FF414F701460AA84FF496F011E001A80090
+0DF10503606C02AA0DF1060114F4F1F130B19DF804009D
+F80530029A00F08DF903210AA800F0A7F9074605A90AA8
+4EF416F78146002000E0401C05998842FBD3FF2903D940
+F23F1100F053F800208DF819008DF81A0064208DF81B00
+D0208DF81C0000208DF81D00ADF81E00ADF820008DF822
+00606C0168DDF81480C96A884708F4FBF70022A94B09F4
+C5F041EC100B18F409F08DF818001FB940F2731100F028
+F8284633F4B1F70168896888470646606C4FF4B6F60390
+CDF8049006AB9DF8100002903A465FFA88F00090294634
+6824693046A0470AA84FF4A7F60DF6FC0DBDE8F08F0000
+6866F640606C4FF49FB600003046E0F769BF000070B504
+46C80782B015461E4605D440F27B110FF24020E0F75BFF
+60688649006C086029466068406C4FF4A4F66068406C31
+464FF4A1F60022002168463BF42AF608218DF800100321
+8DF801100146606836F406F773BD00002DE9F0470646AD
+F6F80D706C0FF2EC180D4615F407F7032804D04FF4C571
+4046E0F72AFF706C0168C96A884700276849884206D067
+49884227D06749884217D030E000F0D7F8012803D000F0
+D3F8022801D103272BE000F0CDF8032803D000F0C9F808
+2801D1042721E04FF4CF711BE000F0C0F8032803D000F0
+BCF8082801D1052714E040F2AB110EE000F0B3F8032803
+D000F0AFF8082801D1062707E04FF4DC7101E04FF4E071
+4046E0F7E5FE706C0168896C88478146706C41F471F282
+46706C15F493F60446706C0168896A8847009453464A46
+39460AA84EF4DBF400218DF8081002A94FF453F2706C4F
+F4ECF588B901A800900DF10503706C03AA0DF1060114F4
+CDF030B19DF804009DF80530039A00F069F8686C12F402
+F438B1686C12F402F4024601210AA84FF495F503A90AA8
+00F02DF90646002000E0401C03998842FBD3FF2904D940
+F2F1114046E0F793FE286C0168039F496A884701461820
+00902B461F4A04A833F4A0F533F4A4F601688968884700
+940196FAB204689DF80830646904A9A04704A833F425F6
+04A833F462F60AA84FF49FF50DF6F80DBDE8F0870000FF
+FF00F00F000030110000301100003411000037F19403E0
+F981001100003581BC050015C0050009BA0500C9BD0500
+45BC050080BA8C0100F049020075190380842E4110CA91
+00D1B905009DF8061000900AA84FF400B1706C4FF471B5
+000070617463685F676C6D657372645F61736963696E69
+742E63707000000A64806480648064806480002DE9F041
+0446DFF83C3594F84078DFF83855DFF83865DFF83885DF
+F838C5DFF838E50FF2E450032F43F2300206D004D3052F
+2DD002D3062F4FD086E027781FB17F1E042F02D921E01A
+217FE040F6B360A061C4F804E000F07FF80CBFDFF8FC04
+DFF8FC042062A263DFF8F8046062DFF8F804A062DFF8F4
+04E062DFF8F4042063DFF8F004606342F2A11058E04E21
+5DE027787F1E042F1ED840F69940A061C4F804E000F059
+F80CBFDFF8CC04DFF8CC042062A263DFF8C8046062DFF8
+C804A062DFF8C404E062DFF8C40420630120606344F242
+3033E0762138E023785B1E042B31D8DFF8AC046060DFF8
+A804A060DFF8A804E060DFF8A4042061DFF8A404606140
+F60C00A061DFF89C04E061207805280CBFDFF89404DFF8
+94042062A263DFF890046062DFF88C04A062DFF88C04E0
+62DFF8880420630120606343F2AB10A08784F83E1004E0
+9C2100E0A021E0F782FD201DBDE8F0810000C4F808C0C4
+F80C8026616561E36120780528704770B586B004460D46
+68460FF27841182209F434F504F648062178307C032918
+BF042900F0010009D1717C80F00100084304D1C0226946
+20464EF4E0F7204600F023F93068286006B004F1400070
+BD000038B5044604F504650FF240402978042905D003D3
+062900F087800CD3E4E02178491E012940F2E480891E01
+2940F2D08040F22311DAE02178491E032971D8D4237422
+00F0F5F83423752200F0F1F8E723762200F0EDF8012377
+2200F0E9F82123782200F0E5F80D23F62200F0E1F80823
+902200F0DDF80223912200F0D9F88D23982200F0D5F800
+F0D1F89C239A2200F0CFF800239B2200F0CBF808235D22
+00F0C7F801235E2200F0C3F88A237A2200F0BFF869237B
+2200F0BBF8DD237C2200F0B7F802237D2200F0B3F82123
+7E2200F0AFF80D23F72200F0ABF80823A32200F0A7F802
+23A42200F0A3F82078022818BF042868D19F23AB2200F0
+9AF81223AC2200F096F86823AD2200F092F80023AE2200
+F08EF84823352200F08AF8002336224FE04FF4B77161E0
+2178491E032958D83023742200F07CF8C223752200F078
+F89323762200F074F80223772200F070F897237A2200F0
+6CF829237B2200F068F8E1237C2200F064F8F1940370FD
+810003237D2200F060F88023902200F05CF80123912200
+F058F8AE23982200F054F800F050F874239A2200F04EF8
+2078022818BF042813D18023A32200F045F80123A42200
+F041F8AC23AB2200F03DF81223AC2200F039F84D23AD22
+00F035F82078032818BF04280FD1687E68B18023EF22E0
+2120464EF486F306E04FF4D37101E04FF4D971E0F754FC
+287803281CBF0428052815D1E87D20B12046BDE832404E
+F413B7A87D60B10123832200F00DF8204601B0BDE83040
+0023BB22E0214EF43AB331BD000012239922E02120464E
+F432B32DE9F047044604F50465287E00F00108400800F0
+0109687850BB0026002728780FF2F01A001F02286ED821
+7820464EF499F620B94FF4F4715046E0F711FC2278012A
+07EA080006EA080106D059D3032A03D029D3042A27D053
+E0012A04D0032A57D16A7E002A54D061B1C022574944E0
+6868012808BF0126D0D000260228CDD10127CCE716B1C0
+22514936E010B1C022504932E017B1C0224F492EE0B8F1
+000F37D0C0224D4928E0022A03D0042A1FD16A7EEAB111
+B1C022494910E016B1C02248490CE010B1C022474908E0
+17B1C022464904E0B8F1000F04D0C022444920464EF448
+F6B9F1000F13D0C022414904E0B9F1000F0DD0C0223F49
+20464EF43AF607E04FF4157101E040F25F215046E0F7A7
+FB287803281CBF0428052816D1A87D10B120464EF4F6F6
+687878B104F6C8039D22C02120464FF489F204F6CC0320
+46BDE8F0479422C0214FF480B2BDE8F087ECCBB127E77F
+5D048BEC2E90BC4FC4528457E9C1DF3CC67E8ABFDC1556
+C8EA88DC8F1577002B2D00226863000801070102000100
+3CB9DC1508C2EA888E8915778095160011B43100840083
+02B83DC67E43A9E9C1BDA0C452AB3F2F90EF7F5D0430CC
+B12770ADDC1594B3EA88B27C157700502000D6A3200668
+016703E0BC000008BD0000A0BD0000D8BD0000D0BC0000
+40BD000068BD000010BE000048BE000030BD000090BD00
+00C0BC000001010000405000080401000090500008FFFF
+0000FFFF000070617463685F676C6D657372645F726669
+6E69745F343735352E6370700000002DE9F84F2DED048B
+9CB0154633980FF26C4A0078B0EE408AB0EE419AF0EE61
+9A10B9272100F082F9DDF8C490484644F417F210B92821
+00F079F9369F2A98F862389C204666F458F00020019023
+462D98DDF8B0802B99009042462E68D6F80CC02846E047
+379E8346304666F445F02146304666F439F03078092802
+DB362100F055F93178B0EE480A06F10800F19403000182
+0067F454F4002030717079584502D03D2100F046F92F98
+4FF0000A20B1B079404538BF4FF0010A002000E0401C31
+78C0B28842FAD300F030F918B100F02DF9012807D12098
+0078052814BF06284FF0010B01D04FF0000B484649F4CE
+F528B100F01BF9012808BF002100D03099359804900291
+CDF800B02098039007F132000190B3787278317806F108
+0066F405F678700120387028462968496988478DF83400
+284629680969884701280CBF4FF001084FF00008327820
+9813A965F475F600F0E7F8034610A80C90CDF81CB011A8
+0B90CDF814800EA80A90CDF80C900FA80990B0EE490A12
+A80890F0EE690A2E98069013A9329804909DF834000290
+B07801907078009006F10800327867F48BF1484614F40E
+F300EE100AB8EE400ADFEDAC0A20EE200A87ED030A3398
+007860B300F0AFF8032828DB00F0ABF800EE100A3398D0
+ED020AA548B8EE400A20EE200AD0ED000A80EE800A87ED
+030A484614F4E8F200EE100A9E48D0ED000A9FED9A1AC0
+EE810AB8EE400A20EE800AD7ED030A00F031F948BF87ED
+030A00203861786113AD607800284AD09FED900A00200C
+E004EB8001D1ED020AB4EE600AF1EE10FA48BFB0EE600A
+401CC0B2A1788842EFDB002000E0401C2178C0B28842FA
+D3B5EE400AF1EE10FA2ADDA0789FED7F8ADFED7E8A9FED
+7D9A16E004EB8001D1ED020AC0EE800AB4EE608AF1EE10
+FA09D506EB8001B0EE608AD1ED028A55F8201009EE101A
+401CC0B221788842E5DB00F03DF808B1B0EE688A87ED04
+8A87ED059ABAF1000F9DF83400DDED130A9DED0E1A05EB
+800090ED000A30EE600ADDED0F0A70EE810AC7ED010A11
+98B8611298F861D7ED070A30EE800A87ED080A0F987862
+0E98B86207F1300071790170B17941701098B8601CBF00
+2078701CB0BDEC048BBDE8F18F29688969284608474846
+16F449B700005046E0F77DB900002DE9F0412DED028B04
+46B0EE408A9046DEB28DB22DB94FF48C710FF22C10E0F7
+6BF9099F00203860404641F467F718B1404616F429F740
+B1404649F489F430B1404616F421F7012801D1012000E0
+00200899002211E0B5EE400AF1EE10FA01D59FED330A01
+EB8203521C83ED000AD7ED000A30EE800A87ED000AAA42
+45DA04EB8203002893ED000A30EE480AF0EEC00AB7EE00
+0A30EE601AB0EE410ADBD0B7EE000A00F04BF8DBD5B0EE
+000AF7EE001A40EE801ABDEEE10A10EE103AA3F1030C0C
+FB03FC5B000CF1010CC3F1050300EE10CA01EE903AB8EE
+C00AF8EEE11A002E01EEA00A18BF022AF1940390048200
+B0EEC00ABAD0032A18BF042AB6D0B6EE000A00F01FF854
+BFB0EE410AB0EE600AACE700EE105AB8EE400AD7ED000A
+80EE800A87ED000ABDEC028BBDE8F081000087F4B234C2
+F38E4D000000008452000088520000F4EE400AF1EE10FA
+7047000070617463685F676C6D657372645F706B666974
+2E63707000F0B50546ADF22C5D0E4605F58167394601A8
+4DF49BF1002420E001A9684649F4CDF46946304628F4A1
+F1B8B1694638464DF4A6F1FFA90078A031605469463846
+4DF49EF16A4603780021284637F4ECF669463846641C4D
+F49FF1E4B201A849F4ABF40028D9D19CB3DFF8C4552868
+10B92A2100F0F5FA2D6807A84FF4906109F423F0002622
+E0A71B212F28BF20272968496A28468847014601A832F4
+87F733F49BF001688969884707A90091FAB207687F6AFF
+A9A031731801A9B84701A833F41BF001A83AF46EF72036
+F6B2A642DADB0DF22C5DF0BD00002DE9F84F2DED0E8B80
+460C4615469FEDC29B86B053EC102B51EC190B07F4FEF7
+00F0BEFADDF878900746484649F474F318B100F099FA01
+2800D000208DF810002421204608F4D4F7A07BA78140F0
+0500A07305F11801484691ED020A33F4B8F0208005F118
+01484691ED040A33F468F105F1480660809FEDAA0AD6ED
+010A00F077FA6082D6ED020A00F072FAA082D6ED030A00
+F06DFAE0829DF85000D0B1A07B40F00A00A073DFED9F0A
+D6ED051A96ED041A21EE800ABDEEC00A10EE100A96ED06
+0A21EE201A20EE200ABDEEC11ABDEEC00A03E09FED941A
+9FED930A208384ED080A05F1180084ED071ADFED900A90
+ED080AB4EE600AF1EE10FA80F21C82D8F804000268D269
+291D9047D8F80810B0EE408A484614F4FAF1B0EE40AAF0
+EE60AA384608F425F007468B4618EE100A0AF4CDF005F1
+1802D369926907F46FF753EC1A2B07F46BF741EC100B30
+F473F453EC102B3846594608F419F041EC180B484614F4
+98F00390484613F440F79DF8101009B14FF4E160009000
+2201208DF8040001A902A816F460F551EC180B21F00041
+41EC1A0B484614F43BF0074602A814F437F0791C401C16
+F4ADF507F4D7F702460B4651EC1A0B07F443F602D38521
+00F0E3F9002726E0484616F446F50398B0EE40AAF0EE60
+AA07F4CBF753EC1A2B07F44BF6824605F11800B7EE000A
+D0ED020A30EE600A8B4610EE100A0AF467F052465B4607
+F439F653EC182B07F407F741EC180B7F1C02A813F4FBF7
+401C874206D251EC180B0022002307F40AF6CBD305F118
+00F7EE000A90ED020A30EE200A10EEF194032008820010
+0A0AF443F053EC182B07F415F60022002307F4D1F541EC
+1D0B02D9932100F093F9484613F4F4F707F482F70022B4
+4B08F44CF041EC1A0B484614F447F00190D8F808000168
+D1F894108847804653EC1D2B51EC1A0B07F4EFF541EC1B
+0B404607F466F741EC1C0BB0EE4C1AF0EE6C1AB0EE418A
+F0EE618A404607F459F753EC1B2B07F4D9F500F063F9B0
+EE40EAF0EE60EA404607F44CF753EC1A2B07F4CCF500F0
+4EF900F05CF907F442F753EC1D2B07F4C2F541EC180B51
+EC1C0B53EC1E2B07F444F701228F4B07F49AF510D2B0EE
+480AF0EE680A13E0000000000000E03F00000047286B6E
+52000000000AD7A33B53EC182B51EC190B07F470F641EC
+100B16F42CF78346BBFBF8FA08FB1AB0A0729FED7DDB00
+F008F9012851D100F000F918B100F0FDF803284AD15846
+07F400F753EC1C2B07F4CAF741EC1B0BB0EE4A1AF0EE6A
+1AB0EE4B0AF0EE6B0A19F4D8F5B0EE40CAF0EE60CA16F4
+00F720819FED6C1BB0EE418AF0EE618A51EC1B0B53EC1A
+2B07F4ABF700F0EBF816F4EFF6A07153EC1C2B51EC1D0B
+07F456F500F0D8F800F0E6F8207453EC1A2B00205F4907
+F44BF502460B4651EC1B0B07F48FF700F0D7F84B2190FB
+F1F14B2202FB11001DE001980199BAFBF0F001FB10A121
+8153EC1B2B0399B0FBF1F801FB1800A07151EC1D0B07F4
+29F500F0ABF800F0B9F8207400980099B8FBF0F001FB10
+80A080287E10F01A0F1DD0A07B40F04000A07300F087F8
+18B100F084F8032812D100F084F8012803D000F080F802
+280AD100F07CF8022802D0A869000503D5A07B40F08000
+A073A869010603D4410501D4C00448D5A07B40F08000A0
+73A869010604D5A088317850FA81F00EE0400502D5A088
+717808E0B0789DF8101019B17178090251FA80F0A18840
+18A0800099A0888842A4BF401AA080A088B84202D20099
+0818A080A088C01BA08000F03BF805280AD1A869400507
+D500F038F8012803DBA088A0710020A08000F02CF80428
+0AD1A869C00407D500F029F8022803D1A088A0710020A0
+80A07B40F02000A0739DF8501011B140F01000A07306B0
+BDEC0E8BBDE8F18F00408F400000E03F00000000000070
+40000000000000344010CA91000000344048464AF411B0
+0000484616F471B3000060EE800AFDEEE00A10EE900A70
+47000053EC192B07F44AB50FF21C00DFF798BD41EC100B
+B0EE481AF0EE681A19F4D0B441EC100B16F4FAB5706174
+63685F676C6D657372645F616964696E675F6D67722E63
+7070000000002DE9F04182B00446F19403B00B82000D46
+16463146684629F42EF695F85E000FF2B40708B1A82802
+DB112100F04AF805F1340898ED000A00F048F802DA1421
+00F040F898ED010A00F040F802DA152100F038F898ED03
+0A00F038F802DA162100F030F8684629F433F602281ED1
+05F15E0016F40DF350B105F15E0034F432F0A0B105F15E
+0016F403F301280ED132462946204659F404F231462046
+59F47EF232462946204659F4FBF208E0684629F40FF604
+281CBF04F21C7059F4F5F3BDE8F38100003846DFF71BBD
+0000B5EE400AF1EE10FA7047000070617463685F676C6D
+657372645F7361745F7265706F72745F76616C69646974
+795F63686B2E63707000000070B5A0B0044638F4A9F720
+464CF418F6014601A83AF488F2204635F411F1014601AA
+0BA826F424F30BA83AF4B1F200285ED1002545E0206901
+68D1F8C011884710B3204635F434F004281DD1684633F4
+CFF7C8B169460BA827F4B6F5A0B1022101A813F41FF120
+464CF4EAF5014601AA15A826F4FDF215A826F40CF30528
+03DB69460BA83AF480F269460BA827F49CF5B0B16068C0
+6800EB8500FEF72BFB06466068C06800EB850026F43CF3
+034632466946204600F028F869460BA83AF464F26D1C60
+684089854212D2A06837F476F570B16068C06830F82500
+8DF80000694620690268D2F8E82090470028A3D1E3E70B
+A83AF44DF220464CF4DCF44F2115F4ADF520B070BD0000
+2DE9F04387B00446884617461D4635F4C7F20646FF2E0F
+F2F80903D116214846DFF768FC20690168D1F8A4108847
+08B900270025062104A808F4F4F3404633F44BF738420A
+D1002200F058F800F05AF88DF8100001208DF8110008E0
+A07E022818BF032803D02F214846DFF743FC4FB1012200
+F043F800F045F88DF8120001208DF813004DB1022200F0
+38F800F03AF88DF8140001208DF815003146204635F401
+F381463146204635F442F3039501900297CDF8009004AB
+A0683246414637F417F50646414604F11C0014F4E5F331
+4604F1440015F4E2F6314604F15C0015F4FFF6314604F1
+740015F4FAF6314604F18C0015F4F5F607B0BDE8F08341
+46684616F4BCB123685B6A024631462046184770617463
+685F676C6D657372645F7365617263685F6D67725F6261
+73652E6370700000002DE9F44F2DED028B81468846AFF4
+78F304460025002609F5A3674FF0300A01E0761C36B2A6
+4216DA38681AFB060BD8E90023DBE9020107F429F400F0
+6FF8EFD2DBE90401D8E9022307F420F400F066F8E6D201
+252DE0182C05DAB9F86400401CF19403400F8200A9F864
+0023E0A9F864509FED308B002638681AFB06F42018B2F4
+AEF110B9A9F8646014E000F044F851EC100B53EC182B07
+F456F207D200F03BF8B0EE408AF0EE608AA9F86460761C
+36B2192EE0DBB9F9646038681AFB06F4201809F1380120
+307DF4B4F58DB9386898ED000B201880ED020B386898ED
+020B201880ED040B386898ED040B201880ED060B002039
+68611881F82C00BE809DF80800022803D13968611881F8
+2C00BDEC028BBDE8F18F00003868201820307DF429B600
+0021F00041014A044B07F40CB2F168E388FFFFFFFFFFFF
+EF7FB5F8E43E30B591B004460D4601A826F433F69DF809
+00401E012823D8684643F4EFF10246606802A970F434F0
+20B926210FF23C00DFF72AFB9DF8001060686EF4A7F560
+B1297CC90609D46979012903D1696AC1F3406111B901A9
+83F443F2684663F496F101A849F439F211B030BD000070
+617463685F676C70655F6E61766D73677061727365722E
+637070002DE9FE4F2DED048B96B004462E9E0FF2841930
+780D4610B9252100F0B7F8307E10B9262100F0B2F8309F
+387810B9272100F0ACF8DDF8C4A09AF8000010B9282100
+F0A4F8DDF8A080404643F4F3F110B9292100F09BF84246
+211D684643F4CCF10EA864F48DF30021201DEEF735F8B0
+EE408AF0EE608A201D13F4E8F309EE100A0EA805902B98
+DDF89C90049096F878000390CDF800A033980290329801
+9051EC180B09F46BF301EE900A3B464A46B8EE491A06F1
+380196ED040B20464EF410F506A864F45DF3269FDDF8BC
+B01B9A0390CDF808B00196CDF800903B46294620464EF4
+BCF52D98359D039004950EAB2C98029049462A98019006
+A80090204672684EF458F6307A68700120E8759DF83800
+80F0010028761498E861012068759DF8180080F00100A8
+75404616F431F0022807D0019500971C9A1B995B462046
+4FF443F21C980078062818D1287800281CBFE87D002812
+D0287E80B99AED070AB0EEC00ADFED090AB4EE600AF1EE
+10FA05DB28700021C5E902012861287516B0BDEC048BBD
+E8F78F0000CECCCC3E4846DFF737BA000070617463685F
+676C6D657372645F636F646570726D2E63707000000004
+2900D1704710B584B0089C0294079C0194069C00943EF4
+F3F01FBD30B5ADF2CC4D40680C460168D1F8CC10154688
+47B0F5966F04D917210FF26C00DFF708FA204632F4D5F1
+03464FF4966207A901A863F41EF1297863F49FF1697800
+F020F8A97800F01DF8E97800F01AF8297900F017F85121
+00F014F8762100F011F80021F19403D012820000F00EF8
+01A863F40DF1009007AB02220421204632F418F10DF2CC
+4D30BD000001A863F479B1000070617463685F676C6D65
+7372645F7472616E73616374696F6E5F7270635F656E63
+6F6465725F636172702E63707000002DE9F043ABB00446
+04F6941105A84CF45BF204F634290AE004F6BC1048F49A
+F5694648464CF4D2F205A84CF46DF205A84CF46CF2C0B9
+05A968464CF44BF2266861686A4602A837F411F600F07D
+F800F075F800F06DF802A93046984700286946DAD104F6
+0C20DDE704F62C1105A815F471F542E0761C6068F9B237
+F481F6F6B2864207D260683246F9B237F495F60028F0D1
+A8460022F9B201A840F477F688F00100054209D00122F9
+B2684640F46EF6024601A902A840F4BFF7606801A937F4
+41F604EB4010008A042813DB2668616801AA03A837F4CA
+F500F036F800F02EF800F026F803A93046984718B901A9
+484648F430F505A815F40DF505A819F4B6F098B905A819
+F4BCF007466168FAB204A837F498F504A833F421F40025
+00284FF00008B7D001250026A5E72BB0BDE8F08333685B
+6941EC100B3A4670470746D4F8EC0E07F471B10000E068
+0168D1F8BC1108470000F8B504460D46002600277AB229
+46684640F412F6014604F604104CF413F208B1012603E0
+7F1CFFB2032FEEDB3046F2BD30B50FF2A80485B004AB25
+680FF2A4041D6000200FF298031B7825680FF298048DF8
+0C3002AB1D6001AB25680FF28C041D6000232568009506
+2918D8DFE801F00F0F040F0B0713009AB903AB0FE0032A
+0FD202A90AE0032A0BD201A906E0032A07D204A902E003
+2A03D26946531803B1187805B030BD00000B4B1B780122
+0BB101207047007C06280CD8DFE800F006060606060408
+00072902E0012900E0052908BF00221046704717CC9100
+010608000100000007020100010305000100000030B5AD
+F2CC4D40680C460168D1F8CC1015468847B0F5966F04D9
+12210FF28C00DFF788F8204632F455F003464FF4966207
+A901A862F49EF7296863F489F0696800F031F8A96800F0
+2EF8E96800F02BF8296900F028F8696900F025F8A96900
+F022F8E96900F01FF8296A00F01CF800F019F8A96A00F0
+17F8E96A00F014F8296B00F011F800F00EF801A862F47D
+F7009007AB0E220421204631F488F70DF2CC4D30BD0000
+696A01A863F452B070617463685F676C6D657372645F74
+72616E73616374696F6E5F7270635F656E636F6465725F
+70696B652E63707000002DE9F84F80462DED0A8B08F12C
+0A82B09AF801B09AF80290F19403601682000C4608F17F
+0040F41DF600259FED549B9FED55AB38B108F17F0015F4
+D9F5471EBF41FF0F00E0002708F17F0048F434F330B108
+F17F0015F4CBF5012808BF01270097002757E0BBF1000F
+01D04F4550DA009810B1B81E03284BD208EB87069FED44
+CB706B09F4F2F041EC180BF06D09F4EDF041EC1B0B53EC
+182B0020002106F465F604D153EC1B2B06F460F61BD051
+EC180B09F493F000EE900AB0EE608A51EC1B0B09F48BF0
+00EE100AF0EE480A18F4F5F6DFED310A00F06BF8304A30
+4B07F4E5F041EC1C0B51EC1C0B53EC1A2B06F477F63CBF
+B0EE4CAAF0EE6CAA51EC190B53EC1C2B06F46CF63CBFB0
+EE4C9AF0EE6C9A7F1CFFB29AF800008742A3DB51EC190B
+53EC1A2B07F401F09AED190ADFED1D0A41EC180B00F03B
+F841EC100B15F48BF6052816DB2078A0B1174894ED010A
+D0ED000AB4EE600AF1EE10FA0ADB1348006809F483F053
+EC182B06F439F634BF0325012502B02846BDEC0A8BBDE8
+F28F0000000080842EC10000000080842E410000000000
+0000000000B443112D4454FB21194000007A4418520000
+1452000020EE200A10EE100A09F458B070B582B00E4614
+461D46BEF483F420B116210FF27800DEF745FF16F1010F
+18D1E80705D5C7F470F304F00101EEF79CFCA80729D5C7
+F468F32A462146EEF79CFCC7F462F32A46214602B0BDE8
+7040EEF79DBC00210020BEF431F6016809688847079906
+9B00912A4621460468A468A04700210020BEF422F60168
+896A88473146BDE87C40CAF49CB273BD00007061746368
+5F67756C706D655F6368696E6F6F6B5F656E67696E652E
+6370700010B5DFF82447204612F432F304F12800BDE810
+4012F42CB3F8B50446DFF80C0720600D4616461F460020
+13F4C5F213F465F36060002013F4BFF213F48DF3A06004
+F514603FF4E4F204F594503FF400F304F59850002100F8
+181F41608560C66007610020002304EB4002FF21918104
+EB800204EBC00101F58061C2F85C31C1E90033401CA828
+EED3DFF89C5605F1280039F47EF4284639F47BF42046F2
+BD00002DE9F843044690460D4640463FF498F720B12A21
+0FF2A460DEF79EFE41F224374246385903689B68294698
+470022002128463FF479F20022002140463FF474F205F1
+5E0015F450F450B105F15E0015F44BF4012804D0404640
+F4ECF100284FD005F16006DFF82096307D0A2818BF0B28
+03D00C2818BF112804D105F15E01484613F43CF6307D0E
+281DD105F15E0109F1280026F44BF7002805F15E0104D0
+09F1280013F42BF60EE0F19403F0198200484626F43BF7
+50B105F15E0109F1280039F414F4385902683178126890
+4705F15E0104F5146040F4B7F1294640F4F4F100F014F8
+23F464F618B100F00FF823F4EBF600F00BF823F4E3F528
+B100F006F8BDE8F84323F434B6BDE8F183424629462046
+70472DE9F04F934687B0044600268A468BF89C6005A861
+680FF298580A68926A90470BF1780703E0C7214046DEF7
+0FFE05A840F4F0F3002800F0EC80656805A901A840F4EA
+F32A68926801A9284690478146494604A817F49CF15146
+04A825F424F40028E4D14946684617F4B8F1494603A817
+F4B6F103A828F4D1F6012809F1280506D0D0D3032839D0
+5DD3042858D0CAE7684640F443F418B16F214046DEF7D6
+FD00F0C4F80146584615F4A4F0286B012640031BD595ED
+000AD7ED010A00F0B0F804D587ED010A00F0B1F8787099
+F8740009280BD195ED000AD7ED020A00F0A0F804D587ED
+020A00F0A1F8B87099F874000F289CD100F09AF8387098
+E7684640F40DF418B188214046DEF7A0FD00F08EF80146
+0BF1600015F46DF0286B0126400341BF95ED000AD7ED03
+0AF4EE400AF1EE10FA04D587ED030A00F078F8F87076E7
+01208BF89C00684640F4E8F300B9012695F83000800608
+D4494602A817F440F102A828F45BF6042832D195F83000
+40062ED500F05BF801460BF1300015F43AF099F874000B
+281CBF0C28112806D100F04DF801460BF1480015F42CF0
+97ED050A00F03CF809DB387C787487ED060A00F03DF838
+742868786139E797ED060A00F02FF8F9DBC7ED060A00F0
+30F878742EE700F02CF801460BF1180015F40BF097ED07
+0A00F01BF809DBB87CF87487ED080A00F01CF8B8742868
+F86118E797ED080A00F00EF8F9DBC7ED080A00F00FF8F8
+740DE7304607B0BDE8F08F0000D5ED000AF4EE400AF1EE
+10FA70470000684640F4FFB200002DE9F84F804608F598
+562DED028B1836ADF52A7D7160CC4C214604F1280015F4
+B9F2204639F4C4F29FA812F431F10FA812F42EF18DA815
+F4A7F6D8F804100A68926A06A8904726E0D8F8044006A9
+684640F4C8F22268926869462046904704462146684617
+F47AF069469FA813F4A6F494F874000A2818BF0B2804D0
+0C281CBF11280D2807D12146684617F47BF069468DA815
+F487F606A840F4A2F20028D3D1B068026892688DA99047
+9FA967A815F459F666E04269002A1CBFDBF81420002A39
+D009782A79914235D141680068DBE9002306F407F521F0
+004141EC100B53EC102B00209A4906F473F341EC100B15
+F409F4B0EE408AF0EEF19403801D8200608A04F15E0040
+F48DF2142500B10425284606F4DDF441EC110BB0EE480A
+F0EE680A18F4BDF351EC100B8C4A8C4B06F413F304D8F0
+680268126A01A99047B0680268D268214690479DF80001
+8AF00101084314D12146404624F480F3B56804F15E0108
+A828F478F52A68D26901462846904720B104F15E010FA8
+13F423F47F1C032F38DB67A815F4FFF567A815F4FEF500
+2840F09A8067A905A815F4EDF519A840F446F267A96846
+15F4E6F519AA69464046FFF70FFE09A815F418F100F0D4
+F8814609A941A815F419F00BE0F46841A818F4AAF32268
+1268C1B22046904741A814F4ECF741A818F495F30028EE
+D0B9F1FF0FC7D000277AB2494604A840F41AF100F0B8F8
+0400BAD04FF0000A04F15C0578B210BB214603A816F4CC
+F703A828F4E7F4022808D0214602A816F4C3F702A828F4
+DEF4042810D1494625A818F4EAF220B949461FA818F4E5
+F230B12A7F2146404624F4A3F34FF0010A287E08281CBF
+01203070002F2FD10222494601A840F4E1F00146D8F804
+00026892689047002822D000F1600100F1180B8A7E002A
+04F118003FF413AF416800680022002306F45BF211D8DB
+E9000106F456F20CD82D489BED040AD0ED000AB4EE600A
+F1EE10FA02DB03202870687039E70FA825F4F4F102282F
+DB0FA941A815F448F525E041A9684615F449F519A840F4
+A2F1024669464046FFF76FFD09A815F478F000F034F801
+46002201A840F495F000F033F8B46800F15E0102A828F4
+9FF42268126A01462046904741A815F42FF541A815F42E
+F50028D4D008F594503EF4F8F7404624F451F20DF52A7D
+BDEC028BBDE8F18F000014CA9100D0C0000000408F409B
+9999999999B93F90B80700024619A9404623F46DB60000
+D8F8042001461046126892681047000070617463685F67
+6C6D657372645F737669645F7265706F72745F6D67722E
+637070000000704700002DE9F84F2DED048B044692B020
+7A8A469346B0EE408A10B90F2100F051FA04F2447500F0
+29FA8046A8680168496C8847209E0121317008F1940706
+F17C0979783171797886F82C10797886F85410797989F8
+00102199B172817B808900EE101A00F016FA286880EE20
+9A64F43BF6D8ED000AB0F8DC0000F005FA60EE208A0020
+3279904206EB80011FD25AF8202000EE102AB8EE400A00
+F0D5F881ED030A9DF858200AB1002212E05BF8202000EE
+102A00F0C6F80BEB800281ED0D0A92ED080A00F0BEF881
+ED170A03E00022CA604A63CA65401C0828D3D300F0CAF9
+18B100F0C7F90128F194031021820040D13878052818BF
+06283BD109A80FF2FC31202207F486F200F0B4F94FF000
+0B70B100F0CBF983280AD201A80FF2FC31202207F477F2
+202201A909A807F472F2307983450ED209A850F82B005A
+F8200000F0A6F920EE090A06EB8B0080EE280A80ED030A
+0BF1010BBBF1080FE8D3002000E0401C31798842FBD300
+2000E0401C8842FCD3A8690121ECF7EEFFB0EE409AF0EE
+609A18EE900A08F480F304F5ED625368126806F450F153
+EC192B06F496F308F42CF308EE900A286864F4A9F589F8
+020006F17F01AA69684642F45DF106F1880080ED028AD8
+F82C10C160E168C9F8081094ED0E0B80ED000BC0ED048A
+01203070B87889F8010000F048F960B900F041F948B100
+F05AF9832805D23878072804BF042089F8010038780528
+12BF0628032089F80100B879707106F12C01F879B071B8
+794870F879887006F15401B8794870F8798870B0790828
+02D3932100F045F912B0BDEC048BBDE8F18FB8EEC00A20
+EE090A80EE280A704700002DE9F84F2DED048B044682B0
+207A10B9992100F02DF994F8580000281CBF94F8F80000
+2802D19A2100F022F904F24475A8680168496C88470190
+00F0F5F88046A8680268697FD26D90470646286864F41F
+F58246286864F41DF58146A8680268697F526A90470746
+A8680268697F926A9047002F08BF032806D1202209F580
+7109F5907007F488F108F19400D6ED058A96ED169A4779
+98ED008A04F55676012030709AF825003072012030760A
+F11400A96931F439F486ED040BE0687060B9F8DC0000F0
+B7F820EE080A80EE288A00EE107AB8EE400AF6EE008A20
+EE090A20EE280A10EE100A08F4A3F241EC100B15F495F0
+C0B2009029EE280A86ED0B0A04F5627000990170477008
+F1940086ED0A8A877890F803A090F804B000F081F878B9
+00F07AF860B100F093F8832808D298F89400072804D104
+274FF0010A4FF0020B0198807B00EE100A0198808900F0
+78F8082FC0EE208A02D3DE2100F089F809EB870000F07B
+F886ED090A00F059F818B100F056F8012809D198F89400
+06281CBF0528072802D109EB8B0003E00098C01909EB80
+0000F062F886ED070A98F8940006281CBF052807280CD0
+0098874202DAF72100F05DF80098381A082802D3F82100
+F056F800F02CF818B100F029F8012809D198F894000628
+1CBF0528072802D109EB8A0003E00098381A09EB800000
+F035F886ED080A204659F494F584F8D00302B004F10801
+BDEC048B04F56470BDE8F44F40F44DB600002068016889
+6F0847A86914F4F19403A0248200C7B60000A868026869
+7F526D1047000000EE100AB8EE400A7047000000EE900A
+B8EE400AF8EE600A7047000020680168D1F87011084700
+0090ED480AB8EE400A20EE280A80EE080A704700000FF2
+0400DEF7D6B870617463685F676C6D657372645F736174
+5F7265706F72745F74726B5F6D736D742E637070000000
+0200000003000000000000000600000001000000050000
+0004000000070000000300000004000000010000000000
+000002000000060000000500000007000000F8B504460D
+4616461F4605F15E0014F461F6012800F0B980E567C4F8
+8060394604F1780064F454F30698E0752946204664F45C
+F30020207600274FF07E50E061304628F483F13818007B
+FF2808D194ED070ADFED4E0A30EE200A84ED070A0DE030
+4628F473F13818217E007B814205D2304628F46BF13818
+007B20767F1C052FDEDBDFED430A94ED070A0FF21417B4
+EE600AF1EE10FA03DA33213846DEF752F894ED070A17F4
+B2F784ED070A294604F1280058F43DF304F1780063F4FD
+F020B904F1780064F418F318B104F1280064F419F30022
+0021684638F416F7014606208DF8000007988DF8010020
+4633F4F2F7204664F41DF3E0B105F15000816821F02001
+816021F04001816021F08001816021F00801816021F400
+71816041F48001816000F039F801213FF456F019480068
+686300F031F80546204664F4F9F285F8480000F029F805
+46204664F4F3F285F84A0000F021F80546204664F4ABF2
+85F84B0000F019F80546204664F4A9F285F84C00204664
+F49EF238B1204664F4A0F218B15B213846DDF7DDFFF1BD
+CDCC4CBE9A99193EA83E0000304664F4E1B10000706174
+63685F676C6D657372645F7361745F7265706F72745F76
+657474696E672E637070000000002DE9FC4D0D46044605
+F16007606897F800801646414600F5146036F4A5F50028
+38D1606805F15E02414600F5146036F479F500287BD028
+4627F4C0F3002860680FF2081B42F6D45A414624D000F5
+D45037F466F3C8B9002542F6D016606800EB8500414630
+5833F4C3F538B1606800EB8501424671581FF457F006E0
+6D1C092DECD330215846DDF779FF60684146504414F448
+F24BE000F5D750FEF75DFE00283FD000F04BF8387D0A28
+04D060684146504414F459F2294601A827F48BF301A83F
+F4C4F5022832DB00F034F890F84B0090B100F02FF890F8
+4C0018B149215846DDF74CFF2946684627F474F3606869
+4600F5D75037F480F600F01CF890F84C00A8B100F017F8
+90F84B0018B1F194033028820052215846DDF734FF2368
+5B6A324629462046984705E0606841461EF4CBF700F007
+F8BDE8F38D0000304628F425B0000060683246294600F5
+D75037F477B6000070617463685F676C6D657372645F61
+63715F6D67722E6370700000002DE9F0418AB0044604F5
+927504F59476287804F1FC0704F1D40838BB404638F4C3
+F420B1204633F44FF207281ED120464BF412F002463946
+684638F493F4694640464BF403F088B1304638F4ADF420
+B916210FF25800DDF7DDFE012028702146D4F8CC000268
+926890471BE02878C8B1394640464AF4EAF7A0B1002028
+70384638F494F43146384638F496F4304638F48DF4E86A
+401CE8622146D4F8CC000268D26890470AB0BDE8F08100
+0070617463685F676C6D657372645F7368617265645F73
+61745F7365617263685F6D67722E6370700070B52DED06
+8B82B004460D461646B0EE409AF0EE608AB0EE418A00F0
+FDF800F0F7F800F0C3F900F0FDF8EDB290ED060A002D18
+BF032D16D1F6B2022E18BF032E11D1A068016866688968
+25B9884701460223002203E0884701230422014635686D
+693046A84700F0BBF800F0C5F8B0EE409A32F453F1B0EE
+69AA4168006807F41DF709EE29AA09EE100A00F01FF80A
+EE089A808900EE100A60680168496CB8EE408A884729EE
+080AD0ED000AC0EEA80A20EE208A00F09AF802DC452100
+F05EFE02B0B0EE480ABDEC068B70BD60680168496C0847
+70B52DED048BB0EE409A9FEDA80AB4EE409A82B00446F1
+EE10FAF0EE608AB0EE418A0D46164648BF00206BD400F0
+8AF800F084F800F050F900F08AF8EDB290ED060A002D18
+BF032D16D1F6B2022E18BF032E11D1A068016866688968
+25B9884701460223002203E0884701230422014635686D
+693046A84700F048F800F052F8F0EE408A32F4E0F0B0EE
+699A4168006807F4AAF608EEA99A08EE900A60680FF688
+54FFF7AAFF49EE088A808900F00EF920EE288A00F030F8
+03DA78212046DDF7D5FDB0EE480A17F435F5B0EE408A00
+F023F803DC7D212046DDF7C8FDB6EE000A38EE008A9FED
+720AB4EE408AF1EE10FA03D47E212046DDF7B9FDBDEEC8
+0A10EE100A80B202B0BDEC048B70BD60EE299AB0EE680A
+17F4F4B4B5EE408AF1EE10FA70470000F0EE400AB2EE04
+0A00EE809AF2EE040AC9EE200A17F4F4B401216846ECF7
+00BBF3B2EAB22146684600F034BE00EE100A60680268D2
+6CC8EE809AE9B2104700002DE9F0412DED068B064682B0
+70680C460168496C1546F0EE408AB0EE608A88472B4680
+8900EE100AF19403C02B8200F8EE409A22463146684600
+F00FFEFFF7CFFF00F09BF800EE100A70680268D26C88EE
+008A21469047270090ED06AA18BF032FB3EE069A1AD102
+2D18BF032D16D1B0680168D6F80480896824B988470146
+0223002203E08847012304220146D8F800C0DCF814C040
+46E047B0EE40AA70680268D26C21469047012F007A00F0
+60F880EE080ABDEEC00A10EE104AE4B22AEE08AA04D102
+2D06D16406240E03E0022F08BF9FED219ABBEE0E0A39EE
+000AF2EE040AF2EE04AA00F03DF8042F20EE080A09D1BB
+EE080A39EE000AF2EE040A00F031F820EE080A00EE904A
+F8EE600A20EE0A0A20EE200A20EE200A032F20EE290A08
+BF032D20EE280A0CD1DFED0C0AF4EE608AF1EE10FAACBF
+F5EE000ADFED080A20EE200A02B0BDEC068BBDE8F08100
+000100A04000FF7F4700000042B7F37D3D0000803DC0EE
+200AB0EE6A0A17F42CB400EE100AB8EE400A7047000051
+EC100B07F484B52DE9F24F2DED0E8B0446ADF56E7DFFF7
+83FE4FF460710EAD808900EE100A0DA806F44CF44FF47A
+70ADF83400B8EE40AAC820ADF83800F3EE048A0F20A871
+4FF4C3702881F0EE680AAA7B9FED1F0A002120462FAE1A
+F4C6F4B0800022606803681B6B00219847074600F0E6FC
+00219847804600F0C5FC39469047414690ED02BA00F0BE
+FC9047394690ED028A00F0B8FC9047007919F4E4F300F0
+B2FCF0EE40BA41469047007919F4DBF3A0680168D1F898
+11B0EE409A884700F008FD06D200F0E5FC90ED030A07E0
+0000484300F086FCFFF792FF00EE100A00F068FCA06801
+68D1F89811F0EE40AA884700F0EFFC04D200F0CCFC90ED
+030A05E000F06FFCFFF77BFF00EE100A00F047FCA06801
+68D1F8A011F0EE409A884700F0D8FC04D200F0B5FC90ED
+040A05E000F052FCFFF764FF00EE100A00F03AFCA06801
+68D1F8A011B0EE40BA884700F0C1FC04D200F09EFC90ED
+040A05E000F03BFCFFF74DFF00EE100A00F019FCDFED7F
+0A2AEEA08A60EE20AAB0EE480A2BEE209A09EEE00A00F0
+F5FB03D44FF48D7100F01EFC39EE6A0A00F0ECFB03D440
+F21B1100F015FCFFF74BFE03DA40F2211100F00EFCDFED
+6EAAB4EE6A8ADFED6D9AF1EE10FAA8BFB0EE698AB5EE40
+9AF1EE10FA03DA40F2271100F0FAFBB4EE6A9AF1EE10FA
+A8BFB0EE699AB0EE480A14F4DDF22874B0EE490A14F4D8
+F2687400F007FC00219847074600F038FC00F0A6FB18B9
+4FF49A7100F0DBFB00F02FFC00F0B9FB0DF14A0100F0D0
+FB00F003FC0021984700F0AFFB0DF15A0100F0C6FB00F0
+E8FB0222F19403502F82000021984700F0A4FB0DF16A01
+00F0BBFBDFF8A0062F90002100F02AFC007D307200F0CA
+FB08B1032002E000F011FC407D7072002100F01CFC0021
+807DB07200F017FC007DF07200F0B7FB08B1032002E000
+F0FEFB407D3073002100F009FC0021807D70730DF1DE0B
+00F002FC002100F0FBFB0022807D307400210420707600
+F0EEFB307701220420F07700F0E7FB8DF8DE0002220420
+8BF8030000F0DFFB8BF8060004208BF80900A0680168C9
+6F884718B1A88840F48060A880A0680168D1F8A8118847
+18B1A88840F40060A880F6EE000ADFF8CC0590ED000ADF
+F8C80540EE0A0A90ED000A0DF5B27AFCEEE0AAF6EE000A
+40EE0A0ABCEEE0BAC6ED05AACAED03AA1BEE100A00210D
+AA02EB8102491C0E29C2F8D001F7DBDFF88C0500F012FB
+DFF8880506E000BF0000803501007E4300007E43B6EE00
+1A40EE0A0A90ED000A8FA800F1010820EE0A0ABDF83800
+B3AFDFAEFCEEE0BAF5EE000A00EE201ABCEEC1CA00EE10
+0A98F81920C7ED05BA86ED05CAF0EE680AB8EE400A0321
+20461AF413F3B8804FF0FF0988F81B9000F02AFB00F0C8
+FA96A900F0F5FA00F029FB0321984700F0BFFA9AA900F0
+ECFA00F00FFB03220321984700F0B5FAAEA900F0E2FADF
+F8F004B390032100F052FB0321007D38722820787200F0
+4BFB0321807DB87200F046FB0321007DF8725020387300
+F03FFB0321807D787300F03AFB007DB87300F0DAFA20B1
+00F0D1FA08B1022000E05020F873032100F02BFB002280
+7D387403212C2038830920B87600F018FBF87600F0D8FA
+00F076FABAA900F0A4FA04208DF8F902BEAF00F0D9FA03
+217F1C9847F87003220220B871032100F000FB01467972
+60680268526D904790ED008A60680268797A526D9047F0
+EE480A90ED0C0A204618F4AFF47871022200F0A5FA0090
+012200F0A1FA00999431943031F456F518B940F2D51100
+F071FA0420F872F0EE680ABDF838007A7BFFF77AFD0421
+20461AF472F2B08003220120B87387F80F9004216068DF
+F8D87303689B6D9847042100F021FAC6A900F04DFA00F0
+ABFA042100F019FACAA900F045FA00F0A3FA042100F011
+FADAA900F03DFA00F09BFA042100F009FACEA900F035FA
+DF97042100F0A7FA0421007D307200F0A2FA0421407D70
+7200F09DFA0421807DB07200F098FA0421007DF0720220
+307300F091FA0421807D707300F08CFA042100F085FA80
+7D30740120707600F049FA04219847307702220120F077
+042100F071FA8DF89E03E7AEB61C0120F0700322606803
+681B6BF19403E032820004219847B07186F80C90012070
+728BF8129000F013FA02219847834600F032FA0BF19401
+943031F4C9F418B94FF40A7100F0E4F900F026FA022100
+F0ACF90DF1F20100F0D8F900F00BFA02219847022100F0
+A1F90DF5817100F0CDF95997022100F03EFA007D8AF808
+0000F0DDF920B100F0D4F908B1032005E060680268D26C
+02219047407D8AF80900022100F028FA0022807D8AF80A
+00022102208AF8110000F015FA8AF81400012202208AF8
+1700022100F00CFA8AF81A008DF8849100F0BDF9012198
+47074600F0D6F900F05CF938B100F0DDF9074600F0E0F9
+00F054F918B940F2552100F089F900F0C5F900F001FA0D
+F5C37100F07EF900F0CFF900F0F9F90DF5CB7100F076F9
+00F0C1F900F0F1F90DF5D37100F06EF982487E90012100
+F0DEF9007D8DF8000200F07DF920B100F074F908B10A20
+05E060680268D26C01219047407D80AD012168709FED76
+8B00F0C6F90022807DA870012102208DF83D029FED73DB
+00F0B2F988F803000122022088F8060000F0B7F988F809
+000222042088F80C0000F0AFF988F80F0088F815900220
+88F812009FED679B0820B073A0680168D1F88811884751
+EC100B644A644B05F42BF253EC182B04F4DDF753EC1D2B
+05F4ABF005F41DF100B240423082022201208DF8040001
+A9684613F4B4F6A168EBF797FE00F0C3F805F40BF100B2
+404270826846A168EBF78CFE9FED521BB0EE41EAF0EE61
+EA00F0B2F841EC100BB0EE4E1AF0EE6E1A17F412F053EC
+102B51EC180B04F4A8F753EC1D2B05F476F005F4E8F040
+B24042F073FC9830F4E0F00168896988470368FC991B6B
+0DAA98473F4890ED000A3F48CDED00AAF6EE000A00F08C
+F88DED010A00F0A4F83A488DED03BA00F083F88DED020A
+00F09BF8CDED06BA00F07BF88DED070AF6EE000A334890
+ED000A32488DED0BCA00F06FF88DED080A00F087F82F48
+00F068F88DED040A00F080F82C4800F061F88DED050A00
+F079F82A4800F05AF88DED0C0AF2EE040A90ED000AFC98
+20EE0A0A80EE200AF6EE000A30EE200ABCEEC00A8DED09
+0A30F487F00168896988470368FC995B6B6A4698470DF5
+6E7DBDEC0E8BBDE8F18F000048320000583200005C3200
+0068320000303333009899190000000000000030400000
+00000000E03F0000000000FBC34092EC0044234E3D4000
+0000000000F03F4C320000543200006432000060320000
+78320000743200007C320000D8AA810053EC102B51EC19
+0B04F4FEB640EE0A0ABCEEE00A7047000007F194019430
+31F4F194037036820015B300000321009100F19402AB79
+7047B0EEC00AF6EE000AB4EE600AF1EE10FA70470000F6
+EE000A90ED000A704700000021009100F19402AB797047
+01220021B0EE491AF0EE480A2046FFF751B90000012200
+21B0EE6B1AF0EE4B0A2046FFF747B90000891C20461AF4
+A6B70FF27C10DCF7DEBFA0680168D1F8A01108470000A0
+680168D1F8981108470000A0680168D1F8981008470000
+A0680168D1F844110847000060680268D26D7047012260
+6803689B6D70470000606803689B6D0421184700000022
+606803689B6D03211847606803689B6D01227047000060
+6803681B6B012270470000606803689B6D002201211847
+606803689B6D002202211847606803689B6D0222012118
+47606803689B6D012201211847606803689B6D00220021
+1847606803689B6D03220421184760680268D26C002110
+4700000021606803681B6B18470000007DB0735020F073
+60680268D26C10470121606803681B6B18470000012100
+9100F19402AB79704751EC100B0022002304F41AB638B5
+044632B1022A0ED00BD3042A17D00CD317E0022B21D100
+21684610F4B8F2022220E002211AE0012118E0032B05D1
+0421684610F4ACF2012214E004210EE005210CE00FF228
+0540F2D6212846DCF731FF4FF436712846DCF72CFF0021
+684610F496F200226946204613F4E7F431BD7061746368
+5F676C6D657372645F72656365697665725F706172616D
+65746572735F70726F6772616D6D65722E637070000000
+002DE9F0438946ADF5097D044699F9140000270B289046
+1E4604D01A210FF29C10DCF7F6FE002504A8302101FB05
+0074F437F36D1C0B2DF6DB424604A9204600F01FF80328
+8DF8080014DB9FED570B86ED0A0B86ED0C0B0B2106F138
+006CF414F002A8019000960B2304AA49462046AAF4EFF1
+074638460DF5097DBDE8F08300002DE9F0410D00FCB004
+46174604D146210FF22810DCF7BCFE00264CA800EB0618
+1021404607F474F04046A4F4C9F6761C0C2EF2DB3AA814
+F463F0206875F410F40246394602A8ADF46BF302A914A8
+14F433F04CAE30E000F06DF820680022694675F466F007
+4600F065F8206800230022694674F4EFF780463846ADF4
+63F3C0B100F058F86A4606F1090101A840F47CF5D8F848
+0006F482F70022224B04F454F5C6E9000100F046F86946
+3AA814F436F0103614A813F4FCF714A813F4F7F70028C9
+D03AA812F426F741B2022904DB184B10224CA887F4C8F0
+3AA812F41BF70B21C0B213F445F446B2002714E04CA800
+EBF19403003A8200071000F10901684626F466F701463A
+A843F4CAF430B16A4629462046A9F484F300B130357F1C
+B742E8DB30467CB0BDE8F081000065CDCD410000000000
+007940E1330D0014A9684613F4C4B770617463685F676C
+70655F6C73712E63707000002DE9F041ADF5856D160004
+4608BF0D26A6F109000528884604D322210FF26010DCF7
+0EFE404611F4E3F5002800F091803246012105A811F4E1
+F504F15E0040F4EDF4014605A811F459F604F150016846
+13F4B2F2694605A811F470F604F15C0705A8397811F4FA
+F504F1080505A895ED070A12F463F0696A00F070F8A869
+06F4E5F600F073F8E86A06F4E0F600F06EF895ED000B00
+F06CF895ED0C0A00F062F895ED0D0A00F05EF895ED0E0A
+00F05AF895ED020B00F05CF895ED040B00F058F8397900
+F059F8397E00F056F8A96A00F045F8797E00F050F895ED
+080A00F042F80A2E09DBE96B00F039F8296C00F036F895
+ED110A00F036F80B2E02DB797800F03BF80C2E18DB04F1
+5E0013F461F3012804D1032100F030F80D210BE004F15E
+0013F456F3C1B200F027F804F15E0010F4EFF3014600F0
+20F80D2E02DB797900F01BF80422414605A811F47AF505
+A812F4FBF401200DF5856DBDE8F08105A811F415B60000
+05A811F4E9B7000041EC100B05A812F40FB0000005A811
+F46FB5000070617463685F676C6D655F6D736D746D6772
+2E637070000038B5044615467CF4A3F430B12168C96B20
+46884785F84000012032BDF8B505460C462A68126D1B21
+9047002670B12268126D1B212046904740B12A68126D1C
+212846904700F08EF887420AD11221284676F48AF10746
+1221204676F485F1874200D001262A68126D0521284690
+4700F073F8874218BF01262A68126D0321284690472268
+126D0746032120469047874214BF002686F001062A6812
+6D0721284690472268126D0546072120469047854218BF
+00263046F2BDF8B516461C4621B1481E252801D2262904
+DB37210FF2A000DCF7EAFC3268126D1C213046904700F0
+41F8002587420CD13268126D1221304690472268126D07
+46122120469047874200D001253268126D052130469047
+00F023F8874218BF01253268126D1D2130469047226812
+6D07461D2120469047874214BF012700273268126D0321
+304690472268126D0646032120469047864218BF012547
+EA0500F2BD2268126D07460521204610472268126D0746
+1C212046104770617463685F676C70655F62646570686D
+67722E6370700070B504460D46284646F4EEF606280FF2
+F19403903D8200044658D8DFE800F0040C141C2E3D4F00
+00F058F8D8B102281FD01BD320214BE000F050F810B994
+ED010A70BD2A2143E000F048F810B994ED020A70BD3421
+3BE000F040F818B1022807D003D308E094ED000A70BD94
+ED050A70BD94ED080A70BD422129E000F02EF818B10228
+04D026D305E094ED030A70BD94ED090A70BD50211AE000
+F01FF818B1022807D003D308E094ED040A70BD94ED070A
+70BD94ED0A0A70BD5E2108E000F00DF810B994ED0B0A70
+BD682100E06A213046DCF729FC9FEDC70A70BD284613F4
+EBB1000070B51E46052A04BF012EC2480C46154611D002
+2E0AD1002D14BF032ABE480AD0052A18BF042A09D1BC48
+04E0042A08BF012E03D1BA4890ED000A70BD0168D1F884
+10884733462A462146BDE87040D2F489B7000038B50D46
+D3F464F400F066F902D3882100F034F900F04CF9457800
+F0A9F8854202DB892100F02AF9284632BD70B505460E46
+D3F44DF40FF2AC2480680078864202D3902100F01AF928
+1DD3F43DF4A04906EB4602555C854202DB912100F00EF9
+284670BDF8B5054614462A68126C0E469047A0B100F07C
+F884420FF2682702DB9C2100F071F8281DD3F41EF48642
+02DB9D2100F069F8002E08BF042C01D10020F2BD032E08
+BF032C0BD02846D3F410F4B421806911FB060000EB8400
+D0F8C80000B10120F2BD000070B504460D462268926A90
+472268526A06462946204690470546042D10D1B4210FF2
+F810DCF780FB2046D3F4EDF3B421806911FB060000EB85
+00D0F8C80070BD032E08BF032DEFD1704870BDF8B50446
+0D46164600F028F886420FF2C01702DBC32100F01DF820
+1DD3F4CAF3854202DBC42100F015F8042E0CD1C62100F0
+10F82046D3F4C1F3B421806911FB050000EB86008BE003
+2D08BF032EF1D15B48F2BD3846DCF741BB000005202FF4
+33B300002DE9F843054688462A680FF26016926A90472A
+68526A07464146284690470446042C04D1D7213046DCF7
+26FB03E0032F08BF032C1AD02846D3F48EF3814600F01F
+F8B4214F43D9F8181000F01DF818B9E1213046DCF710FB
+2846D3F47DF3064600F00EF8B16900F00FF806E000F008
+F8394901EB8000D0F87801BDE8F28300004146284642E0
+0000791801EB8401D1F8C81001EB8000D0F8A4007047F8
+B506460F461546FFF7A8FF85420FF2C00402DBF02100F0
+27F8301DD3F44AF3874202DBF12100F01FF8032F08BF03
+2D00D18DE73046D3F441F30646B4204743B069381800EB
+8500D0F8C80018B94FF4807100F009F8B06917EB0000F1
+94032041820000EB8500D0F8C800F2BD00002046DCF7B7
+BA000038B50D46D3F422F300F024F803D340F20911FFF7
+F1FF00F009F88578052D03DB4FF48571FFF7E8FF284632
+BD074805EB45010818704700000000000070320000D0AA
+8100D4AA8100D8AA8100DCAA8100B0AB81000FF2080480
+6800788542704770617463685F676C6D657372645F7265
+6365697665725F706172616D65746572732E6370700000
+002DE9F0472DED0E8B04468846CAB04046C8F4E8F20646
+41F2AC47317838596BF4E3F4050068D02A68D2F8902071
+1C9047002861D02B681B6B0122711C284698475FEA0009
+58D0D9F80010C96B8847D8E90223054698F810A098ED0A
+9B98ED10AB98ED16BB98ED18CB9FED65EB51EC1E0B04F4
+E6F1AA4541EC1D0B1ED003234822614914A80BF440F739
+5914AB9FED5F1BB0EE4D0AF0EE6D0A42466846BFF436F1
+C8F4D0F268B314AAB0EE4D0AF0EE6D0A41464046BFF452
+F223E002A86CF44EF59FED521B0546B0EE418AF0EE618A
+53EC1D2B51EC1E0B04F4B3F141EC100B39592B46B0EE48
+1AF0EE681A42466846BFF4CDF0C8F489F2002875D002A9
+4046BFF4F7F2D8E90A2351EC190B04F451F221F00041D8
+E9102341EC180B51EC1A0B04F447F221F00041D8E91623
+41EC190B51EC1B0B04F43DF221F00041D8E9182341EC1A
+0B51EC1C0B04F433F221F000414FF09442304B04F4A2F0
+98F810509FED2ECBAA4541EC1B0B18BF9FED2DCB05D130
+78022804BF012D9FED20CB51EC1C0B53EC182B04F46FF0
+0ED353EC192B04F46AF009D353EC1A2B04F465F004D353
+EC1B2B04F460F021D2012D0AD1D9F80010C96C48468847
+20B9385931466CF43BF012E0BAF1030F1CBF98F8100003
+280BD1701C89F462F2054638598AF482F2317800232A46
+87F403F6002000E001204AB0BDEC0E8BBDE8F08700BF00
+00000000003E4000000000004CDD40190D090000000000
+0000000078DEB141000000000000244000000000000059
+4030B5A7B004460D4612F43EF6294601A849F4FCF116E0
+01A9684649F4FDF168463DF4B4F720B168463DF4B0F701
+2806D168463DF435F70146204612F413F401A849F404F2
+01A849F403F20028E3D027B030BD000038B504460D46A8
+1F142821D8DFE800F056170B0E2020201D1A111A14171A
+1D1A1D201D4747009FED2E0B31BD9FED2E0B31BD9FED2F
+0B31BD9FED2F0B31BD9FED300B31BD9FED300B31BD9FED
+310B31BD2268126D20212046904728B1022812D008D303
+2821D032E029462046BDE8344078F4D6B20A2D21D0F194
+03B04482000B2D25D00C2D1AD19FED250B31BD0A2D06D0
+0B2D0AD00C2D05D0172D06D01FE09FED210B31BD9FED22
+0B31BD9FED220B31BD0A2D06D00B2D0AD00C2D05D0172D
+06D00DE09FED1E0B31BD9FED1F0B31BD9FED1F0B31BD57
+210FF28400DCF7C8F89FED1D0B31BD0000FFFFFFFFFFFF
+7F3CFEFFFFFFFFFF3F3DFFFFFFFFFFFFDF3D0000000000
+00C03E0000000000003040000000000000203E112D4454
+FB21193E112D4454FB21893D010000000000503E0F2D44
+54FB21593D000000000000A03F000000000000003E102D
+4454FB21D93D000000000000B03F000000000000F03F70
+617463685F676C70655F6570686D67722E637070000000
+10B504461D212268126D9047A02811D22268126D042120
+469047C1B220467EF4FFF5DFED050AB4EE600AF1EE10FA
+01D5012010BD002010BD0100C841006A05490840054988
+420CBF0FF2100000A0704700000000FEFFFFF010000030
+343737365F4130000749086808B1002070470648C008C0
+0008600549C908C900091A0160704700BF08CC9100070D
+8900005D890038B504460D46AC4205D020682018804724
+1DAC42F9D131BD10B50446044979440E31044878440C30
+FFF7EAFF204610BD2400000004000000B1ACFEFFF98DFF
+FF8D30FEFF91F2FEFF098DFEFF25D2FFFF9923FEFF19E0
+50F8041BCB0744BFA9F101035918121F0023042A41F804
+3BF9D25FEA827C0B4604D54FF0000CA1F800C09B1CD107
+44BF0021197050F8042B002AE1D17047816807E0026811
+68536889185B18C36008320260C2689142F4D04A1C8260
+0878704738B504460D46A068E168884212D12068616888
+4208BF09F447F02068227C016802B14944A16042685218
+E260083091422060ECD0A068401CA06000F8015D31BD2D
+E9F0418AB000F1080105910268520801EBC20106910021
+079108910168490800EBC10108310091017901F001018D
+F8101040680099400801EBC000019000200290039084E0
+05A8FFF7A9FF044614F0030603D105A8FFF7A2FFC61C25
+090F2D1BD105A8FFF79BFF00F10F0515E0059801680818
+05990790496808180890059808300590079808998842F0
+D0401C079010F8011D6846FFF793FF761EF2D1002D51D0
+05A8FFF77BFF0646A00800F00300032804BF05A8FFF772
+FFDDF800800299039F06EB002008E0A8F10808A8F10801
+801A0A6849688F18394658F8082C8A1A8242F1D30C1AAE
+1C2DD0BC4206D158F8044B58F8040B0719BC42F8D00298
+039914F8015B884217D100980199884208BF08F4F19403
+40488200AAF7009800689DF81010029009B14844029000
+9902984968009A09180832884203910092E7D00298401C
+0290761E00F8015DD1D10298039988427FF47BAF019800
+9981427FF476AF0AB0BDE8F0810000FDFDFFFF7C390800
+A0928900000000008FFEFFFF0200000002000000140000
+0027090000005D8900A035000095FDFFFFF3FF040001F1
+FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01
+F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF
+01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1
+FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01F1FF01
+F1FF01F1FF01F1FF01F1FF01F1FF01F1F5011003CD1501
+00D9045E206028200AA1068000EA0001007FB8C0FF0812
+B71012FC0812CD0820060E010100BEE7AEFF0812E31012
+20081013C1BE8100E4080100D5BD8100180A0100293280
+00905012F90812E00810078D0380001018010079081007
+9C19010011048000D408100845B58100D02B010009B640
+10022C0100810813642D181003B48100142E701110101B
+6830010091B18100E845010001B28100A84901003DBB81
+008C520100B90812B00812FD081003385301006108100B
+A0540100EDBA81002C6F01000510123C0810085DC38100
+9480010099C2401002A10100E50812E408120D28101098
+AF010051B8810000B00100BDC1810044B42012BF5012C2
+981110136CC36011081324FC7012B92810220402000D46
+82009CD7020081628000EC1703007D678000503703000D
+F18000284303002D0810033C4503007908100344460300
+C108100304470300F508140488490300F1F25010124A03
+0009F38000304B03003DC581000486030055081014C48B
+030061298200B4C50300352A8200D4C60300992B08100B
+C80300152D8200C8D70300EDEBF81003F00300C9F23810
+0A09040041DC8100283104008508100484530400C11830
+102B5404004919820060550400551A8200A05A0400891C
+820010610400A5F38100C073040001223846FC99040061
+3A30129F201006C6810080B404001108100B9CBD040095
+E9810074CD040065081330CE081006E48100203F0500F5
+0810235441050031E5810010430500AD0D8200BC610500
+25278200FC6E05000905820004760500E1081404147D05
+00D9DE68140B890500BDDF8100708A0500EDE3E810138E
+05008D28820094970500A50C8200F89A0500291348100A
+A205007D1482006CB40500A9A8101070BE050075F58100
+40CD0500D1F78100BCDF2812F8101002E40500F19403D0
+4B8200E5F0100880060600E5438200C02108124580100B
+DC06004DFA810060E30600B9FB281006E5060009FC8100
+58081B41FE7011081018A11082002003070049168200DC
+710700A90B8200889F07005D25481023AA07002D208200
+4CC507007D22820030D1070075008200F0710800A90382
+008C7808004D1960140B91080059248100DC9F0800B926
+881803AB0800712B3012AF081016438000B0B508000944
+800008BB080039F580000C0309004D08122408126D0812
+58081B25E440100A26090061E88000783109007D08100B
+7C400900A1E98000A84A0900FD08140C044B090071EA80
+005459090081D478180395090035D6A810029809005D08
+1004E49A09003944C81003D80900153CD81002130A00B1
+081403D81C0A00A910180C14300A0059F680008C750A00
+81FAA014027B0A001900100B88D70A0065B28000BCE40A
+008D0812F4081C2045398100F4C90B00A13B8100F0CF0B
+00B93C8100D8D20B00554B8100E0EA0B0021529003200D
+F20B00496D81006EF60B00204684F8081B395428100202
+0C00F908140424060C00B956E018030B0C00795948100B
+1C0C00404600BFF0240C00DD5D60110812FD0810040026
+0C00D95E281F270C480330138100A4360C0095648100C8
+370C00A5658100B83C0C68100884600C00E19D8100AC89
+2019F81403489D0C003180100F14AF0C00913882000CE4
+0C0011398200840817B1922012F5381293B812F6381C0F
+0E820090080D00D1968100CC100D009597A0041C03120D
+003D98680311081BAD9AD8180A150D002135810088280D
+002D5013EC941016771010029A0D00E9081C04C09B0D00
+0578C804110810018D79808010010D00DD08128C081004
+7D7B800098A6381C077F80001CA90D001D80080412AA68
+1108100314AB0D00FD08123C081004F5818000F0AC7810
+06848000ACAE0D00C90812F8081BC185201003B00D00B9
+86601007B10D007987800084B3481006888000A4B40D00
+590812CC081008418E800074B80D001192681007BB0D00
+F19680005CC828129A48100FCE0D0091A3800094D60D00
+29A5800064D73812A67812D8F811081C048CD90D00A1A7
+90051003DA0D009DAB081006DD0D0055AC8000D8081B81
+AD5812E0481EAEA00512E3101003AF8000C8ECB8100717
+820044000E007133901003050E00696A20100B070E0041
+20A388140D0E00F9C2281C031F0E0089C4D0041003230E
+0081C8081803270E00D1C950100A280E002DCE8000E42D
+0E0055081404542E0E0065CF101C03310E00F19403604F
+8200BD41C0041C03420E0035141004100F500E0091D380
+0070580E004DD48000B45D2016D5201403610E0059D630
+1262601C07DA8000806D0E0015DC30051273201EFC2803
+1295701006FE8000C4960E00FD0812FC081F1500780310
+02980E00610812900810071D01810050990E002908129C
+081F818AF8051002A40E008D081804E0A70E00518B7010
+07A80E00C58D81007CADD8128E381803B10E004991F810
+02B40E00A50810033CB50E00C10812800812E108100390
+B60E00E508180344B90E000D68126C081EADA80410089C
+C30E002515820000C4481A7C981003CB0E00C981081C02
+D00E00F558031C0424080F00B92F200418030C0F00E131
+8018030F0F007D32D01003180F005534101003220F0015
+E6A01002280F00A508100338290F00A908124C0812AD08
+12880812B9081C040C2A0F0045E818031002310F004908
+1C0340340F00359805100354350F003908133C37201AD2
+D81003520F0041D3E01002550F0065E01C04D8630F0081
+3D5006100A6C0F005D3E8200A46D0F00B1081003846F0F
+00DD0812BC081007153F820098700F00790810037C710F
+00C50812B4081F2940300612721011081290081635C010
+08A8740F006D128200E48B0811F81C043CA00F001934B0
+0412C148110812EC082271101C03C30F001D0AD0041C03
+C50F00A15AF8071C03C60F00B55B40031403C70F00D55D
+E01403C80F00855EE01C02C90F009DD80713D8D22016B3
+0012D4701A60A012D95012D8F01002DC0F00E90813BCDE
+1016D9381002DF0F005180400CB8510000F93B8200D0C9
+0000050004C301000CF1CB0492030C520904F2F6010452
+0D04E118F32103004CF19F04F1D3E4F14F0410032C0200
+0028042D70351214112BA0BB4E300100003206E3010001
+211212FF01000000000000000000000000000000000000
+0000000000000010007300BF16F1019E020400B3491B27
+EBE6FFFF52E7EBCA236D59C02E0BF09D1E4D2FFFB6F9E1
+FF28FFFFFF020000001300730022F87C009E0204008035
+5F27ABB6FFFF61EB14A5462C1E99289744D465DF178030
+EB1C007C0000000200000014007300521572009E020400
+9D2B5F27FBB6FFFF6FF014A571AA249985ADFBE45BD64A
+8E1D94E3FF70000000020000001500730082B668009E02
+0400EBAB572734B7FFFF26ED14A5D20A36998239C8DDE2
+C08336CC5BE1FF040000000200000016007300F74A5900
+9E0204006CC2572750B6FFFFECEB14A5412A359921A508
+F6B51C163E22E5E0FF0900000002000000F19403F05282
+0017007300EF9B28009E0204005FB2B12670B8FFFFED07
+15A5A455EFEE9973ECB673A79AA8920BE1FF8EFFFFFF02
+000000180073006CF032009E020400519DB12618B8FFFF
+35FC14A5B06BEDEEAAE10D04BA916D9C9E55E2FF69FFFF
+FF020000001900730037952F009E0204002FBFBE26A7B7
+FFFF810C15A545B8E5ED634E78057CB45C79AE9CE2FF33
+000000020000001A007300ADA355009E020400CE52BF26
+E5B8FFFF7B0F15A5CAA1EBED5DC5360805514AB67E201D
+00D1FFFFFF020000001B007300F05764009E0204006F78
+5E27E4B0FFFF32F214A5B6C9A4444F5CF32EF9823ABA6C
+1C120036000000020000001C0073002B6613009E020400
+03625D2793B1FFFFB7F714A575F3A2449C1D2D6853D420
+A10910FEFF29000000020000001D0073008BFC2E009E02
+04003AE351270FB0FFFF4EF514A5357D1243C1F7243D71
+2E2D6C7D6D0D002E000000020000001E00730053714100
+9E020400004A5127DDAFFFFF8BF714A5570F184399C578
+197C93B0B008740F000C0000000200000020007300AFAF
+4E009E020400F371512757B6FFFF3AE614A55982E69805
+5493D4DA1DC0BFE7B4E1FF080000000200000021007300
+402C42009E02040089C35127C2B5FFFF82EE14A53CF5E4
+98C23634EAD4284AEA0E43E1FFF0FFFFFF020000002200
+7300C9674F009E02040094CE3D278FB0FFFF95F414A58F
+4836430574521FF2E4832912E3EAFF4B00000002000000
+23007300BF805D009E020400B4863E2794AFFFFF36F414
+A5F6F834437CB7E9125C870677F0C4F8FF9C0000000200
+000024007300D9F170009E020400E056C02647B8FFFFD3
+0D15A5EBA2D5EECF01E5BC52289542A31FE8FFF2FFFFFF
+0200000025007300B4E05B009E020400B87AC026EDB8FF
+FF26FA14A5F9F5D3EE2B826AD00D9EAB6F416DE3FF2800
+00000200000026007300B9B4F4009E0204007879DD272F
+EEFFFF5210E8CAE3599669762F6184A0B0996E5D250500
+160000000200000027007300B1FB03019E020400A49D21
+27B7E6FFFFA5B0E9CAC40788BD89E8AF869BBE0115390C
+01000300000002000000280073003E3DFF009E020400B0
+F62529EAE7FFFF4052EBCA6052811634E7FA8AA4D371B7
+75B005002100000002000000290073000C7CC5009E0204
+00279A452761B5FFFF02E614A5F66910993D2903C01E35
+AAF476DBE0FFDDFFFFFF020000002A007300C90CB8009E
+02040046FE4527ABB6FFFFD9EE14A5E50A16999C27C0CB
+916DDE28F106E2FFF2FFFFFF02000000F1940380568200
+2B007300C8E748009E020400864F1E2784B0FFFF42F614
+A53EA34043106D321CB2060C0E7F27E6FF67FFFFFF0200
+00002C007300CA0061009E020400D2092327A3AFFFFFC4
+F614A52DD240432AA1F2162FFB9552EF4B0800A9000000
+020000002D0073004EF435009E0204008007E926F3B8FF
+FF090B15A59B25DDEE773B8AE29F4FBFFC118B0F005900
+0000020000002E007300777259009E0204001B58E9269E
+B8FFFFC11B15A51290E2EE457F26EC48E4853208F10600
+66FFFFFF020000000FFF00000000000000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000200000011FF0000000000000000000000
+0000000000000000000000000000000000000000000000
+00000000000000000200000012FF000000000000000000
+0000000000000000000000000000000000000000000000
+00000000000000000000020000001FFF00000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000200000020000000010073
+008AE30B0098090400324BDA2702C7FFFF89EA04AA59D5
+6D02C97F0EC2DBD9137DFFCEDAFFB9FFFFFF0200000002
+00730097951A00980904000561DA279EC6FFFFCAF404AA
+F68C6D024B1AB6F99E8B35C57578070017000000020000
+0003007300903B2A00980904005889E42668C0FFFFF1D5
+04AA2172EEAC4C34E8F060C1E622EA6BF1FFDBFFFFFF02
+000000040073009D0128009809040030FBE426AAC0FFFF
+8DD504AA1E47EFACF8BBF3C9830C43AA80D8E5FFB9FFFF
+FF02000000050073006CD01D009002040052AAE426E6BF
+FFFF06D604AAC579EEAC1E61EAD1315D0B593D20F7FF1A
+00000002000000070073001BC332009809040078F9E426
+1FC0FFFF00DE04AA91C0EEAC8E347DDBC86755F81EE0ED
+FFD8FFFFFF020000000800730000FD2B00980904000ACD
+2227A7C1FFFF32D804AA3763BDACF8A6CCE89B4EDE0A18
+02C400CBFFFFFF0200000009007300381C360098090400
+B81B23273AC1FFFF24D904AA9F93BDACF7728FE68042F9
+6CFA4DB8008FFFFFFF020000000B00730087E741009002
+0400BF8F6A2867C3FFFF08FE04AA1F7F5257485788260F
+7BD1798A92BE004BFEFFFF020000000C007300B44D3300
+98090400E8B16A286BC3FFFF62E204AA514C5257E50735
+16ED5227B464A5A8005AFFFFFF020000000D007300D6FB
+1100E8040400F9948B281CC4FFFFEFE204AA43862F57C6
+05A918A4436F0B41B30D0004000000F19403105A820002
+0000000E007300BEB49354980904003419E723AE7CFFFF
+4B9B4AA5EB8CF536A490DA4F412E7AEE50A6CFFF8BFFFF
+FF020000000F0073005DF20B009809040071248B2887C3
+FFFFAEE504AA27122F57A70B2A0AD103244083741A00EE
+FFFFFF0200000012007300E1E7BA5498090400EC83E123
+A8B9FFFF491A4BA5879BA23732D0474FFAACB76BB108CB
+FF7EFFFFFF020000001300730021D9250098090400423B
+202710C0FFFF6DCD04AAF518F4AC9959CBC1E468B3D561
+200A00540000000200000015007300C94B060040070400
+B2D6D52759C6FFFF4D0305AAC51A5002496570A1E1005F
+B924F9E9FFECFFFFFF0200000018007300FB2237009809
+0400B64CC02789C5FFFF97F504AAAE5681021081161BBE
+4C6BE4273CE0FF4CFFFFFF0200000019007300D9101C00
+980904004DE5D527B0C5FFFFA60005AAD00350021A04DF
+BE38034E1FEE60EEFFF6FFFFFF020000001A00730005D2
+0D00980904001D2845288FC3FFFF3A0305AA296F6157D9
+B6E24B6254D1BC607536007DFEFFFF020000001B007300
+C11A160098090400978AD52701C6FFFF94F204AA7A0B50
+0289B652D44F0AC9A97907FEFFB7FFFFFF020000001E00
+730067FF1E00980904008924C02775C6FFFF74F004AA28
+A680023C7FE11E1376D480FE1D5D00F2FEFFFF02000000
+1F007300B3C1220090020400E694D5279FC6FFFF26FA04
+AA3FA84F02BAB983BA2A2D795A8E30F0FFFDFFFFFF0200
+000021007300DA16150098090400A6878B2804C4FFFF1F
+E304AAB0092F5741B989115429D3D8CBA3F0FF05000000
+0200000024007300CEF8160040070400189F8B2874C3FF
+FF95E804AADE6B2F57DDF306196EEC0A6E8DA3F8FFD2FF
+FFFF0200000006FF000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+00000000020000000AFF00000000000000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000200000010FF0000000000000000000000
+0000000000000000000000000000000000000000000000
+00000000000000000200000011FF000000000000000000
+0000000000000000000000000000000000000000000000
+000000000000000000000200000014FF00000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000200000016FF0000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000000F19403A05D82000200
+000017FF00000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+020000001CFF0000000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+0000020000001DFF000000000000000000000000000000
+0000000000000000000000000000000000000000000000
+000000000200000020FF00000000000000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000200000022FF0000000000000000000000
+0000000000000000000000000000000000000000000000
+00000000000000000200000023FF000000000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000002000000240000000100730100
+203A0000000400CDBCB42D09B5FFFFF394D49DD2AB05A0
+00003AEF58C0F40500A002000000000002000000020073
+FC0020010100200400CD5C082E48B6FFFFBF6ED49D051B
+22A1000073A68CB3AD5C00C00F00000000000200000003
+0073050060FB0000300400CD3CEA2DD5B5FFFF146FD49D
+380AE2A00000DCA99D1883530040010000000000020000
+000400730600008F0000400400CD84232EB0B6FFFF416C
+D49D3D64FAA0000095BECDE17D39000003000000000002
+000000050073010040530000600400CC54262EBBB6FFFF
+7068D49DF25113A1000097A6AD46186600600200000000
+0002000000060073FC00C0370000D00300CD8CB12DFCB4
+FFFFBE70D49D1488F19F0000D56B48AC3E940080060000
+000000020000000700730500A0DA0000E00300CD94EB2D
+DAB5FFFF1370D49D538CEEA00000A4AA2AE7375000A0FE
+FF0000000002000000080073060080120100F00300CDEC
+EC2DDFB5FFFF186BD49D0827EFA0000066B97C773C3D00
+20FEFF0000000002000000090073FE0000D80000000400
+CD345D2DBBB3FFFF4667D49D8DEEA1F500004E91213846
+690000000000000000020000000A0073F900C0BE000010
+0400CD34DC2D9FB5FFFF5556D49DCD72A0F500001C0409
+736CF200C0FDFF00000000020000000B01730000E04500
+00300400CCC40C2E59B6FFFF2B55D49D1E6486F5000052
+AB517C415E00A0FFFF00000000020000000C0073FF0020
+900000400400CD9CE42DBFB5FFFF7166D49DF71D02F600
+005ECE84D9FA3300C0070000000000020000000D0073FE
+00C0370000500400CD8CDA2D98B5FFFF2C54D49D539295
+F5000048441C8EEBB80040FEFFF1940330618200000000
+00020000000E0073F90060520000600400CDA4B02DF8B4
+FFFF9E64D49DE6AEF4F500003DA8ECC38C4D0020020000
+000000020000000F00730000006A0000E00300CDCCD72D
+8EB5FFFF9D65D49D10DD1EF6000039BE03381149006003
+000000000002000000100073FF00006C0100F00300CD9C
+912D82B4FFFFE376D49D0A9A0FF5000094099B2A83F500
+80FFFF0000000002000000110073040000660000000400
+CD449E2E89B8FFFFC666D49DF9DEBB4B0000FA80898C89
+8500400E000000000002000000120073FD00C093000010
+0400CD44CD2E3EB9FFFF1E64D49D37E1F74B00008BF796
+256A0A00A0020000000000020000001300730300A02500
+00200400CDB4F72EE2B9FFFFFF56D49D54E9FA4C000090
+48622069B60020FBFF0000000002000000140073020080
+750000300400CD0CFA2EEBB9FFFFCB61D49D7CE80B4D00
+00D000972BF5F30060FEFF000000000200000015007304
+00C04D0000500400CD54C22E14B9FFFF3F6FD49DD146E2
+4B0000E56B2EFEB29900E0F8FF00000000020000001600
+73FD00001D0100600400CDECE32E96B9FFFFCF5CD49DBA
+332F4C0000000FEF8B68F20020FCFF0000000002000000
+170073030000470000E00300CDACE12E8CB9FFFF772FD4
+9D4BB1294C00006A3B77C1DFCF00C0FFFF000000000200
+00001800730200A0340000F00300CDFC242EB6B6FFFF76
+61D49DDFC0604C0000E0A3B90C29680080010000000000
+0200000018000000010073007625A505901004005F4B1F
+2824A9FFFFC07E0DA1CED3915FA54C23234DD0BAFA814D
+150099FFFFFF020000000200730020F3540AA010040064
+CA3F27CFA3FFFF3EA50DA159D1215C353568C285AE7606
+F1DDEBFFE7FFFFFF0200000003007300D2CFD901A01004
+00E18885274CABFFFF6B9B0CA16504D189224731234400
+98D0F674F9FFA1FFFFFF02000000040073008E2BA600A0
+10040048AE1D27ABA4FFFF0DC00DA18EB0D7B5FDFA5E88
+4CC4B63DF16CF9FFF7FFFFFF0200000005007300D85724
+03A0100400C9B0FD267AABFFFFF72E0FA19D244D881261
+30251E4681672780FEFFF6FFFFFF0200000006007300DD
+161501901004004F791928A3AAFFFF09520EA148C33B5F
+511D8FD860077203C4FE00002B00000002000000070073
+005697BB07A0100400DC74C42600A7FFFF490A0EA1CBE0
+78DF22A454A17C4DCAE291100600540000000200000008
+00730008AC4003A0100400AE5F652775A3FFFFDEE90CA1
+7B12BD338C987902B7F33A57F19403C0648200EA24FFFF
+F3FFFFFF0200000009007300D419F700A01004000B9FD3
+266BA4FFFF5B010EA16200C3B3EF8F774A06301767C573
+F4FFF0FFFFFF020000000A007300478C6D03A0100400D4
+33842779ACFFFF4B640DA1D714B38958505E97A68F22A9
+6E28FBFFBDFFFFFF020000000C0073009B4B4604A01004
+00ECAAAB272CA9FFFF2BDA0DA1AD82B50CE57FD731AB8B
+EDC35113FEFFD2FFFFFF020000000D00730025479502A0
+10040073F06C27F8A6FFFFCB590DA1D871D6B9167E1F27
+0048BB3EAADC04002B000000020000000E00730056686A
+00A0100400505BFF2641A9FFFF550F0EA18B40960B8732
+7F74845BACCB60150200BAFFFFFF020000000F007300EC
+87C806A0100400F59FD6254D9FFFFFA9F50CA1EEE0B1AF
+B9216E2845CDBD305765FBFF1700000002000000100073
+0032D23C06A0100400CE3EAC27BBABFFFF49C20DA16ECB
+780DDC20A91B76982C7ABCACF4FFCBFFFFFF0200000011
+007300C5CED506A0100400B29CFF27BCA7FFFF1CEF0CA1
+E2E0EE368E663EC07007FE55A5290F0034000000020000
+00120073006176CC00A01004007E8E752705A9FFFF4A55
+0DA1B9260860DC4F8475116EAE0804510B00EEFFFFFF02
+00000013007300E9EFC604A0100400FB60F02723A5FFFF
+93150DA1A7DAC538A44A0D4C86C27AB9258E00002C0000
+00020000001400730062471E0390100400999C412674A7
+FFFF55F3FDA053C7D6837BC4E97B619761199B111100FD
+FFFFFF0200000015007300ADE84A0CA0100400B8EF0227
+80ABFFFF0A6E0DA1ACD1205CD3FF3CD2F9A2345B8E2704
+00150000000200000016007300CA149503A01004004027
+1F2652A7FFFF84740EA1FBFFB985CBE6D9D97829AC2B27
+F1ECFF54000000020000001700730017D8AB00A01E0400
+C92550274EABFFFF7D430DA16A86BC882863A96AEDE01C
+00DB110300D8FFFFFF02000000180073008158B705A010
+04007B9B16267DA4FFFF30CF0DA1F7CD43DCFECD2F1EFB
+87E909BDBD0400950000000200000019007300A91E0B05
+A0100400A301282729AAFFFFA0F50CA1F3F3B309D0A38F
+2757872ABAB94405003C000000020000001A0073001D96
+0603A010040043FB6026ADA7FFFF0CB40CA1154DF8079D
+57620C13B1639EF05503002A000000020000001B007300
+19CED604A010040082E7BE2722A4FFFF87760DA1526173
+348B5BDD197F9B6C53AB08FBFFCAFFFFFF020000001C3F
+73005F1FF408A0100400F8D2A227ADADFFFFD8E50DA16B
+ED9D0DB7492FC9FB26436BF19403506882006B061200C9
+FFFFFF020000001D0073000D5CFF00A010040070221328
+EDA4FFFF43F40CA1008671371800055972CD125AECEBF3
+FFC9FFFFFF020000001E0073005C30B802A01004004C51
+2A26CBA7FFFF02830DA1F6C327E06A42C48FB5AE5FDCCF
+81F1FFD7FFFFFF020000001F0073009EA02305A0100400
+718DF1266AAAFFFFDB720CA14ED02BE0F6D6C80A26BC77
+CCB9EAFBFFEDFFFFFF0200000020007300B79A9102A010
+0400CDE4FC2609A7FFFF5B5E0DA170E92CB418F5D29FE1
+8A337235920000F2FFFFFF020000000BFF000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000002000000200000000200
+730010D73301000B04007293641498EBFFFF608DEACA4E
+C0F3012DC3D281B5A780B69F961B000000000002000000
+03007300B6EE0A01000B040005489D0194B6FEFF77E9EB
+CAB51E19AA72096908A837B09B81B9F6FFF80200000200
+000004007300A1C02D0180F4030020A1DD1414EBFFFFA3
+72EDCA5D4FFE011FABB4813579DBCD0A65FFFF35000000
+0200000005007300F347E900000B0400FA1CC614A4E1FF
+FF1D62EACA3BCF56814DEF9B7F7300BB61202E1500070A
+00000200000006007300C026020180F4030040725D01EC
+C7FEFF1D36EBCA01B475C6B70F5F87D1A450CB090AE7FF
+D502000002000000090073008B08EF0080F403002260B4
+1484DBFFFF89EDEBCA26FD8C8A4A88A5801E1F1D1EBF0E
+19000DFFFFFF0200000001FF0000000000000000000000
+0000000000000000000000000000000000000000000000
+00000000000000000200000007FF000000000000000000
+0000000000000000000000000000000000000000000000
+000000000000000000000200000008FF00000000000000
+0000000000000000000000000000000000000000000000
+0000000000000000000000000200000009000000C10073
+005C16DD26A0100400F4EAD31D5DDBFFFF9334ECCA3941
+8AA3F0299CC09C639B17ECDBF2FFC0FFFFFF02000000C2
+007300DB1AA426A01004009729291EB3F4FFFFAEBDE9CA
+1B00A100F0E37ABFEAD5EBBADDFCFFFFFEFFFFFF020000
+00C30073007AB14826A0100400574C041D9BE3FFFF7A0F
+EFCA86B3FA45862B05C125D8BC71A2B5FFFFF6FFFFFF02
+000000C7007300E92E2000A010040035740400040A0000
+A81BECCAED5DF8CDC1001DB99E4DBCEABBFFFFFF000000
+0002000000C4FF00000000000000000000000000000000
+00000000000000000000F17C00E06B8200000000000000
+0000000000000000000002000000C5FF00000000000000
+0000000000000000000000000000000000000000000000
+00000000000000000000000002000000C6FF0000000000
+0000000000000000000000000000000000000000000000
+00000000000000000000000000000200000007000000>
+
diff --git a/gnss/Android.mk b/gnss/Android.mk
new file mode 100644
index 0000000..12f46b7
--- /dev/null
+++ b/gnss/Android.mk
@@ -0,0 +1,40 @@
+# Copyright (C) 2010 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.
+
+
+# We're moving the emulator-specific platform libs to
+# development.git/tools/emulator/. The following test is to ensure
+# smooth builds even if the tree contains both versions.
+#
+
+ifeq ($(BOARD_USES_EXYNOS_GNSS_DUMMY), true)
+
+LOCAL_PATH := $(call my-dir)
+
+# HAL module implemenation stored in
+# hw/<GPS_HARDWARE_MODULE_ID>.<ro.hardware>.so
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware
+LOCAL_SRC_FILES := gps_dummy.c
+LOCAL_MODULE := gps.$(TARGET_BOARD_PLATFORM)
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE
+LOCAL_PROPRIETARY_MODULE := true
+
+include $(BUILD_SHARED_LIBRARY)
+
+endif
diff --git a/gnss/device-gnss.mk b/gnss/device-gnss.mk
new file mode 100644
index 0000000..18965d7
--- /dev/null
+++ b/gnss/device-gnss.mk
@@ -0,0 +1,37 @@
+PRODUCT_COPY_FILES += \
+	frameworks/native/data/etc/android.hardware.location.gps.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.location.gps.xml \
+	device/google/gs101/gnss/47765/config/lhd.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/lhd.conf \
+	device/google/gs101/gnss/47765/config/scd.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/scd.conf \
+	device/google/gs101/gnss/47765/config/gps.cer:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.cer \
+	device/google/gs101/gnss/47765/firmware/SensorHub.patch:$(TARGET_COPY_OUT_VENDOR)/firmware/SensorHub.patch
+
+ifneq (,$(filter raven, $(TARGET_PRODUCT)))
+PRODUCT_COPY_FILES += device/google/gs101/gnss/47765/config/gps.xml.raven:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml
+else ifneq (,$(filter oriole, $(TARGET_PRODUCT)))
+PRODUCT_COPY_FILES += device/google/gs101/gnss/47765/config/gps.xml.oriole:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml
+else
+PRODUCT_COPY_FILES += device/google/gs101/gnss/47765/config/gps.xml:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.xml
+endif
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+# userdebug specific
+PRODUCT_COPY_FILES += \
+	device/google/gs101/gnss/47765/config/lhd2.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/lhd2.conf \
+	device/google/gs101/gnss/47765/config/scd2.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/scd2.conf \
+	device/google/gs101/gnss/47765/config/gps2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps2.xml
+endif
+
+PRODUCT_SOONG_NAMESPACES += \
+	device/google/gs101/gnss/47765
+
+PRODUCT_PACKAGES += \
+	android.hardware.gnss@2.1-impl-google \
+	gps.default \
+	flp.default \
+	gpsd \
+	lhd \
+	scd \
+	android.hardware.gnss@2.1-service-brcm
+
+PRODUCT_PACKAGES_DEBUG += \
+	init.gps_log.rc
diff --git a/gnss/gps_dummy.c b/gnss/gps_dummy.c
new file mode 100644
index 0000000..9ccde1d
--- /dev/null
+++ b/gnss/gps_dummy.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+/* this implements a GPS hardware library for the Android emulator.
+ * the following code should be built as a shared library that will be
+ * placed into /system/lib/hw/gps.goldfish.so
+ *
+ * it will be loaded by the code in hardware/libhardware/hardware.c
+ * which is itself called from android_location_GpsLocationProvider.cpp
+ */
+
+
+#include <errno.h>
+#include <pthread.h>
+#include <fcntl.h>
+#include <sys/epoll.h>
+#include <math.h>
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define  LOG_TAG  "gps_dummy"
+#include <log/log.h>
+//#include <cutils/sockets.h>
+#include <hardware/gps.h>
+
+#define  GPS_DEBUG  0
+
+#if GPS_DEBUG
+#  define  D(...)   ALOGD(__VA_ARGS__)
+#else
+#  define  D(...)   ((void)0)
+#endif
+
+static int
+dummy_gps_init(GpsCallbacks* callbacks)
+{
+    return 0;
+}
+
+static void
+dummy_gps_cleanup(void)
+{
+}
+
+
+static int
+dummy_gps_start()
+{
+    return 0;
+}
+
+
+static int
+dummy_gps_stop()
+{
+    return 0;
+}
+
+
+static int
+dummy_gps_inject_time(GpsUtcTime __unused time,
+                     int64_t __unused timeReference,
+                     int __unused uncertainty)
+{
+    return 0;
+}
+
+static int
+dummy_gps_inject_location(double __unused latitude,
+                         double __unused longitude,
+                         float __unused accuracy)
+{
+    return 0;
+}
+
+static void
+dummy_gps_delete_aiding_data(GpsAidingData __unused flags)
+{
+}
+
+static int dummy_gps_set_position_mode(GpsPositionMode __unused mode,
+                                      GpsPositionRecurrence __unused recurrence,
+                                      uint32_t __unused min_interval,
+                                      uint32_t __unused preferred_accuracy,
+                                      uint32_t __unused preferred_time)
+{
+    // FIXME - support fix_frequency
+    return 0;
+}
+
+static const void*
+dummy_gps_get_extension(const char* __unused name)
+{
+    // no extensions supported
+    return NULL;
+}
+
+static const GpsInterface  dummyGpsInterface = {
+    sizeof(GpsInterface),
+    dummy_gps_init,
+    dummy_gps_start,
+    dummy_gps_stop,
+    dummy_gps_cleanup,
+    dummy_gps_inject_time,
+    dummy_gps_inject_location,
+    dummy_gps_delete_aiding_data,
+    dummy_gps_set_position_mode,
+    dummy_gps_get_extension,
+};
+
+const GpsInterface* gps__get_gps_interface(struct gps_device_t* __unused dev)
+{
+    return &dummyGpsInterface;
+}
+
+static int open_gps(const struct hw_module_t* module,
+                    char const* __unused name,
+                    struct hw_device_t** device)
+{
+    struct gps_device_t *dev = (struct gps_device_t *)malloc(sizeof(struct gps_device_t));
+    memset(dev, 0, sizeof(*dev));
+
+    dev->common.tag = HARDWARE_DEVICE_TAG;
+    dev->common.version = 0;
+    dev->common.module = (struct hw_module_t*)module;
+    dev->get_gps_interface = gps__get_gps_interface;
+
+    *device = (struct hw_device_t*)dev;
+    return 0;
+}
+
+static struct hw_module_methods_t gps_module_methods = {
+    .open = open_gps
+};
+
+struct hw_module_t HAL_MODULE_INFO_SYM = {
+    .tag = HARDWARE_MODULE_TAG,
+    .version_major = 1,
+    .version_minor = 0,
+    .id = GPS_HARDWARE_MODULE_ID,
+    .name = "Dummy GPS Module",
+    .author = "The Android Open Source Project",
+    .methods = &gps_module_methods,
+};
diff --git a/health/Android.bp b/health/Android.bp
new file mode 100644
index 0000000..41a0e12
--- /dev/null
+++ b/health/Android.bp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 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 {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.health@2.1-impl-gs101",
+    stem: "android.hardware.health@2.0-impl-2.1-gs101",
+
+    proprietary: true,
+    relative_install_path: "hw",
+    srcs: [
+        "Health.cpp",
+    ],
+
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+
+    static_libs: [
+        "android.hardware.health@1.0-convert",
+        "libbatterymonitor",
+        "libhealth2impl",
+        "libhealthloop",
+    ],
+
+    shared_libs: [
+        "libbase",
+        "libcutils",
+        "libhidlbase",
+        "libpixelhealth",
+        "libutils",
+        "android.hardware.health@2.0",
+        "android.hardware.health@2.1",
+    ],
+}
diff --git a/health/Health.cpp b/health/Health.cpp
new file mode 100644
index 0000000..fe8ad84
--- /dev/null
+++ b/health/Health.cpp
@@ -0,0 +1,266 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+#define LOG_TAG "android.hardware.health@2.1-impl-gs101"
+#include <android-base/logging.h>
+
+#include <android-base/file.h>
+#include <android-base/parseint.h>
+#include <android-base/strings.h>
+#include <android/hardware/health/2.0/types.h>
+#include <health2impl/Health.h>
+#include <health/utils.h>
+#include <hal_conversion.h>
+
+#include <pixelhealth/BatteryDefender.h>
+#include <pixelhealth/BatteryMetricsLogger.h>
+#include <pixelhealth/BatteryThermalControl.h>
+#include <pixelhealth/ChargerDetect.h>
+#include <pixelhealth/DeviceHealth.h>
+#include <pixelhealth/LowBatteryShutdownMetrics.h>
+
+#include <chrono>
+#include <fstream>
+#include <iomanip>
+#include <string>
+#include <vector>
+
+namespace {
+
+using namespace std::literals;
+
+using android::hardware::health::V1_0::hal_conversion::convertFromHealthInfo;
+using android::hardware::health::V1_0::hal_conversion::convertToHealthInfo;
+using android::hardware::health::V2_0::DiskStats;
+using android::hardware::health::V2_0::StorageAttribute;
+using android::hardware::health::V2_0::StorageInfo;
+using android::hardware::health::V2_0::Result;
+using ::android::hardware::health::V2_1::IHealth;
+using android::hardware::health::InitHealthdConfig;
+
+using hardware::google::pixel::health::BatteryDefender;
+using hardware::google::pixel::health::BatteryMetricsLogger;
+using hardware::google::pixel::health::BatteryThermalControl;
+using hardware::google::pixel::health::DeviceHealth;
+using hardware::google::pixel::health::LowBatteryShutdownMetrics;
+using hardware::google::pixel::health::ChargerDetect;
+
+#define FG_DIR "/sys/class/power_supply/battery"
+constexpr char kBatteryResistance[] {FG_DIR "/resistance"};
+constexpr char kBatteryOCV[] {FG_DIR "/voltage_ocv"};
+constexpr char kVoltageAvg[] {FG_DIR "/voltage_now"};
+
+#define WLC_DIR "/sys/class/power_supply/wireless"
+
+static BatteryDefender battDefender(WLC_DIR "/present",
+    "/sys/devices/platform/google,charger/charge_start_level",
+    "/sys/devices/platform/google,charger/charge_stop_level");
+static BatteryThermalControl battThermalControl(
+    "/dev/thermal/tz-by-name/soc/mode");
+static BatteryMetricsLogger battMetricsLogger(kBatteryResistance, kBatteryOCV);
+static LowBatteryShutdownMetrics shutdownMetrics(kVoltageAvg);
+static DeviceHealth deviceHealth;
+
+#define UFS_DIR "/dev/sys/block/bootdevice"
+constexpr char kUfsHealthEol[]{UFS_DIR "/health_descriptor/eol_info"};
+constexpr char kUfsHealthLifetimeA[]{UFS_DIR "/health_descriptor/life_time_estimation_a"};
+constexpr char kUfsHealthLifetimeB[]{UFS_DIR "/health_descriptor/life_time_estimation_b"};
+constexpr char kUfsVersion[]{UFS_DIR "/device_descriptor/specification_version"};
+constexpr char kDiskStatsFile[]{"/sys/block/sda/stat"};
+constexpr char kUFSName[]{"UFS0"};
+
+static std::string ufs_version;
+static uint16_t eol;
+static uint16_t lifetimeA;
+static uint16_t lifetimeB;
+static std::chrono::system_clock::time_point ufs_last_query_time;
+constexpr auto kUfsQueryIntervalHours = std::chrono::hours{24};
+
+static bool needs_wlc_updates = false;
+constexpr char kWlcCapacity[]{WLC_DIR "/capacity"};
+
+std::ifstream assert_open(const std::string &path) {
+  std::ifstream stream(path);
+  if (!stream.is_open()) {
+    LOG(WARNING) << "Cannot read " << path;
+  }
+  return stream;
+}
+
+template <typename T>
+void read_value_from_file(const std::string &path, T *field) {
+  auto stream = assert_open(path);
+  stream.unsetf(std::ios_base::basefield);
+  stream >> *field;
+}
+
+void read_ufs_version(StorageInfo *info) {
+  if (ufs_version.empty()) {
+    uint64_t value;
+    read_value_from_file(kUfsVersion, &value);
+    std::stringstream ss;
+    ss << "ufs " << std::hex << value;
+    ufs_version = ss.str();
+    LOG(INFO) << "ufs: " << ufs_version << " detected";
+  }
+  info->version = ufs_version;
+}
+
+void fill_ufs_storage_attribute(StorageAttribute *attr) {
+  attr->isInternal = true;
+  attr->isBootDevice = true;
+  attr->name = kUFSName;
+}
+
+static bool FileExists(const std::string &filename) {
+  struct stat buffer;
+
+  return stat(filename.c_str(), &buffer) == 0;
+}
+
+void private_healthd_board_init(struct healthd_config *hc) {
+  std::string tcpmPsyName;
+  ChargerDetect::populateTcpmPsyName(&tcpmPsyName);
+  hc->ignorePowerSupplyNames.push_back(android::String8(tcpmPsyName.c_str()));
+  needs_wlc_updates = FileExists(kWlcCapacity);
+  if (needs_wlc_updates == false) {
+    battDefender.setWirelessNotSupported();
+  }
+}
+
+int private_healthd_board_battery_update(struct android::BatteryProperties *props) {
+  deviceHealth.update(props);
+  battThermalControl.updateThermalState(props);
+  battMetricsLogger.logBatteryProperties(props);
+  shutdownMetrics.logShutdownVoltage(props);
+  // Allow BatteryDefender to override online properties
+  ChargerDetect::onlineUpdate(props);
+  battDefender.update(props);
+
+  if (needs_wlc_updates &&
+      !android::base::WriteStringToFile(std::to_string(props->batteryLevel), kWlcCapacity))
+      LOG(INFO) << "Unable to write battery level to wireless capacity";
+
+  return 0;
+}
+
+void private_get_storage_info(std::vector<StorageInfo> &vec_storage_info) {
+  vec_storage_info.resize(1);
+  StorageInfo *storage_info = &vec_storage_info[0];
+  fill_ufs_storage_attribute(&storage_info->attr);
+
+  read_ufs_version(storage_info);
+
+  auto time_now = std::chrono::system_clock::now();
+  auto time_delta = time_now - ufs_last_query_time;
+  auto hoursElapsed = std::chrono::duration_cast<std::chrono::hours>(time_delta);
+  if (hoursElapsed >= kUfsQueryIntervalHours) {
+    ufs_last_query_time = time_now;
+    read_value_from_file(kUfsHealthEol, &eol);
+    read_value_from_file(kUfsHealthLifetimeA, &lifetimeA);
+    read_value_from_file(kUfsHealthLifetimeB, &lifetimeB);
+    LOG(INFO) << "ufs: eol=" << eol << " lifetimeA=" << lifetimeA << " lifetimeB=" << lifetimeB;
+  }
+  storage_info->eol = eol;
+  storage_info->lifetimeA = lifetimeA;
+  storage_info->lifetimeB = lifetimeB;
+
+  return;
+}
+
+void private_get_disk_stats(std::vector<DiskStats> &vec_stats) {
+  vec_stats.resize(1);
+  DiskStats *stats = &vec_stats[0];
+  fill_ufs_storage_attribute(&stats->attr);
+
+  auto stream = assert_open(kDiskStatsFile);
+  // Regular diskstats entries
+  stream >> stats->reads >> stats->readMerges >> stats->readSectors >>
+      stats->readTicks >> stats->writes >> stats->writeMerges >>
+      stats->writeSectors >> stats->writeTicks >> stats->ioInFlight >>
+      stats->ioTicks >> stats->ioInQueue;
+  return;
+}
+}  // anonymous namespace
+
+namespace android {
+namespace hardware {
+namespace health {
+namespace V2_1 {
+namespace implementation {
+class HealthImpl : public Health {
+ public:
+  HealthImpl(std::unique_ptr<healthd_config>&& config)
+    : Health(std::move(config)) {}
+
+  Return<void> getStorageInfo(getStorageInfo_cb _hidl_cb) override;
+  Return<void> getDiskStats(getDiskStats_cb _hidl_cb) override;
+
+ protected:
+  void UpdateHealthInfo(HealthInfo* health_info) override;
+
+};
+
+void HealthImpl::UpdateHealthInfo(HealthInfo* health_info) {
+  struct BatteryProperties props;
+  convertFromHealthInfo(health_info->legacy.legacy, &props);
+  private_healthd_board_battery_update(&props);
+  convertToHealthInfo(&props, health_info->legacy.legacy);
+}
+
+Return<void> HealthImpl::getStorageInfo(getStorageInfo_cb _hidl_cb)
+{
+  std::vector<struct StorageInfo> info;
+  private_get_storage_info(info);
+  hidl_vec<struct StorageInfo> info_vec(info);
+  if (!info.size()) {
+      _hidl_cb(Result::NOT_SUPPORTED, info_vec);
+  } else {
+      _hidl_cb(Result::SUCCESS, info_vec);
+  }
+  return Void();
+}
+
+Return<void> HealthImpl::getDiskStats(getDiskStats_cb _hidl_cb)
+{
+  std::vector<struct DiskStats> stats;
+  private_get_disk_stats(stats);
+  hidl_vec<struct DiskStats> stats_vec(stats);
+  if (!stats.size()) {
+      _hidl_cb(Result::NOT_SUPPORTED, stats_vec);
+  } else {
+      _hidl_cb(Result::SUCCESS, stats_vec);
+  }
+  return Void();
+}
+
+}  // namespace implementation
+}  // namespace V2_1
+}  // namespace health
+}  // namespace hardware
+}  // namespace android
+
+extern "C" IHealth* HIDL_FETCH_IHealth(const char* instance) {
+  using ::android::hardware::health::V2_1::implementation::HealthImpl;
+  if (instance != "default"sv) {
+      return nullptr;
+  }
+  auto config = std::make_unique<healthd_config>();
+  InitHealthdConfig(config.get());
+
+  private_healthd_board_init(config.get());
+
+  return new HealthImpl(std::move(config));
+}
diff --git a/init.hardware.wlc.rc.userdebug b/init.hardware.wlc.rc.userdebug
new file mode 100644
index 0000000..dee7b6b
--- /dev/null
+++ b/init.hardware.wlc.rc.userdebug
@@ -0,0 +1,24 @@
+#
+# Copyright (C) 2018 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.
+#
+
+on property:sys.boot_completed=1 && property:persist.vendor.limit.wlc.current=1
+    write /sys/class/power_supply/dc/current_max 75000
+
+on property:sys.boot_completed=1 && property:persist.vendor.limit.wlc.current=0
+    write /sys/class/power_supply/dc/current_max 1100000
+
+on property:vendor.disable.wlc=1
+    write /sys/class/power_supply/wireless/online 0
diff --git a/init.insmod.gs101.cfg b/init.insmod.gs101.cfg
new file mode 100644
index 0000000..1eb29b9
--- /dev/null
+++ b/init.insmod.gs101.cfg
@@ -0,0 +1,12 @@
+####################################################
+#           init.insmod.common.cfg                 #
+# This file contains common kernel modules to load #
+# at init time by init.insmod.sh script            #
+####################################################
+
+# Load common kernel modules
+# Modules here will be loaded *before* device specific modules
+install_display_drivers
+modprobe|-b *
+# All common modules loaded
+setprop|vendor.common.modules.ready
diff --git a/init.insmod.sh b/init.insmod.sh
new file mode 100755
index 0000000..97ae7bc
--- /dev/null
+++ b/init.insmod.sh
@@ -0,0 +1,76 @@
+#!/vendor/bin/sh
+
+#############################################################
+### init.insmod.cfg format:                               ###
+### ----------------------------------------------------- ###
+### [insmod|setprop|enable/moprobe|wait] [path|prop name] ###
+### ...                                                   ###
+#############################################################
+
+modules_dir=
+
+for f in /vendor/lib/modules/*/modules.dep /vendor/lib/modules/modules.dep; do
+  if [[ -f "$f" ]]; then
+    modules_dir="$(dirname "$f")"
+    break
+  fi
+done
+
+if [[ -z "${modules_dir}" ]]; then
+  echo "Unable to locate kernel modules directory" 2>&1
+  exit 1
+fi
+
+# imitates wait_for_file() in init
+wait_for_file()
+{
+    filename="${1}"
+    timeout="${2:-5}"
+
+    expiry=$(($(date "+%s")+timeout))
+    while [[ ! -e "${filename}" ]] && [[ "$(date "+%s")" -le "${expiry}" ]]
+    do
+        sleep 0.01
+    done
+}
+
+install_display_drivers()
+{
+  panel_drv=`getprop ro.boot.primary_panel_drv`
+  if [[ -z "$panel_drv" ]]; then
+    panel_drv="panel-samsung-emul"
+  fi
+  modprobe -d "${modules_dir}" exynos-drm.ko
+  modprobe -d "${modules_dir}" $panel_drv.ko
+}
+
+if [ $# -eq 1 ]; then
+  cfg_file=$1
+else
+  # Set property even if there is no insmod config
+  # to unblock early-boot trigger
+  setprop vendor.common.modules.ready
+  setprop vendor.device.modules.ready
+  exit 1
+fi
+
+if [ -f $cfg_file ]; then
+  while IFS="|" read -r action arg
+  do
+    case $action in
+      "insmod") insmod $arg ;;
+      "setprop") setprop $arg 1 ;;
+      "enable") echo 1 > $arg ;;
+      "modprobe")
+        case ${arg} in
+          "-b *" | "-b")
+            arg="-b --all=${modules_dir}/modules.load" ;;
+          "*" | "")
+            arg="--all=${modules_dir}/modules.load" ;;
+        esac
+        modprobe -a -d "${modules_dir}" $arg ;;
+      "wait") wait_for_file $arg ;;
+      "install_display_drivers") install_display_drivers ;;
+    esac
+  done < $cfg_file
+fi
diff --git a/interfaces/boot/1.0/Android.bp b/interfaces/boot/1.0/Android.bp
new file mode 100644
index 0000000..179a6f9
--- /dev/null
+++ b/interfaces/boot/1.0/Android.bp
@@ -0,0 +1,66 @@
+//
+// Copyright (C) 2019 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 {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+cc_binary {
+    name: "android.hardware.boot@1.0-service-gs101",
+    defaults: ["hidl_defaults"],
+    relative_install_path: "hw",
+    vendor: true,
+    init_rc: ["android.hardware.boot@1.0-service-gs101.rc"],
+    srcs: [
+        "BootControl.cpp",
+        "GptUtils.cpp",
+        "service.cpp"
+    ],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libhidlbase",
+        "libutils",
+        "libcutils",
+        "libz",
+        "android.hardware.boot@1.0",
+    ],
+}
+
+cc_library {
+    name: "android.hardware.boot@1.0-impl-gs101",
+    recovery: true,
+    srcs: [
+        "BootControl.cpp",
+        "GptUtils.cpp",
+    ],
+    relative_install_path: "hw",
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libhidlbase",
+        "libutils",
+        "libcutils",
+        "libz",
+        "android.hardware.boot@1.0",
+    ],
+}
diff --git a/interfaces/boot/1.0/BootControl.cpp b/interfaces/boot/1.0/BootControl.cpp
new file mode 100644
index 0000000..1f155c9
--- /dev/null
+++ b/interfaces/boot/1.0/BootControl.cpp
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#define LOG_TAG "bootcontrolhal"
+
+#include "BootControl.h"
+#include "GptUtils.h"
+
+#include <android-base/file.h>
+#include <cutils/properties.h>
+#include <log/log.h>
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_0 {
+namespace implementation {
+
+namespace {
+
+#define BOOT_A_PATH     "/dev/block/by-name/boot_a"
+#define BOOT_B_PATH     "/dev/block/by-name/boot_b"
+
+// slot flags
+#define AB_ATTR_PRIORITY_SHIFT      52
+#define AB_ATTR_PRIORITY_MASK       (3UL << AB_ATTR_PRIORITY_SHIFT)
+#define AB_ATTR_ACTIVE_SHIFT        54
+#define AB_ATTR_ACTIVE              (1UL << AB_ATTR_ACTIVE_SHIFT)
+#define AB_ATTR_RETRY_COUNT_SHIFT   (55)
+#define AB_ATTR_RETRY_COUNT_MASK    (7UL << AB_ATTR_RETRY_COUNT_SHIFT)
+#define AB_ATTR_SUCCESSFUL          (1UL << 58)
+#define AB_ATTR_UNBOOTABLE          (1UL << 59)
+
+#define AB_ATTR_MAX_PRIORITY        3UL
+#define AB_ATTR_MAX_RETRY_COUNT     3UL
+
+static std::string getDevPath(uint32_t slot) {
+    char real_path[PATH_MAX];
+
+    const char *path = slot == 0 ? BOOT_A_PATH : BOOT_B_PATH;
+
+    int ret = readlink(path, real_path, sizeof real_path);
+    if (ret < 0) {
+        ALOGE("readlink failed for boot device %s\n", strerror(errno));
+        return std::string();
+    }
+
+    std::string dp(real_path);
+    // extract /dev/sda.. part
+    return dp.substr(0, sizeof "/dev/block/sdX" - 1);
+}
+
+static bool isSlotFlagSet(uint32_t slot, uint64_t flag) {
+    std::string dev_path = getDevPath(slot);
+    if (dev_path.empty()) {
+        ALOGI("Could not get device path for slot %d\n", slot);
+        return false;
+    }
+
+    GptUtils gpt(dev_path);
+    if (gpt.Load()) {
+        ALOGI("failed to load gpt data\n");
+        return false;
+    }
+
+    gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a");
+    if (e == nullptr) {
+        ALOGI("failed to get gpt entry\n");
+        return false;
+    }
+
+    return !!(e->attr & flag);
+}
+
+static int setSlotFlag(uint32_t slot, uint64_t flag) {
+    std::string dev_path = getDevPath(slot);
+    if (dev_path.empty()) {
+        ALOGI("Could not get device path for slot %d\n", slot);
+        return -1;
+    }
+
+    GptUtils gpt(dev_path);
+    if (gpt.Load()) {
+        ALOGI("failed to load gpt data\n");
+        return -1;
+    }
+
+    gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a");
+    if (e == nullptr) {
+        ALOGI("failed to get gpt entry\n");
+        return -1;
+    }
+
+    e->attr |= flag;
+    gpt.Sync();
+
+    return 0;
+}
+
+}
+
+// Methods from ::android::hardware::boot::V1_0::IBootControl follow.
+Return<uint32_t> BootControl::getNumberSlots() {
+    uint32_t slots = 0;
+
+    if (access(BOOT_A_PATH, F_OK) == 0)
+      slots++;
+
+    if (access(BOOT_B_PATH, F_OK) == 0)
+      slots++;
+
+    return slots;
+}
+
+Return<uint32_t> BootControl::getCurrentSlot() {
+    char suffix[PROPERTY_VALUE_MAX];
+    property_get("ro.boot.slot_suffix", suffix, "_a");
+    return std::string(suffix) == "_b" ? 1 : 0;
+}
+
+Return<void> BootControl::markBootSuccessful(markBootSuccessful_cb _hidl_cb) {
+    if (getNumberSlots() == 0) {
+        // no slots, just return true otherwise Android keeps trying
+        _hidl_cb({true, ""});
+        return Void();
+    }
+    int ret = setSlotFlag(getCurrentSlot(), AB_ATTR_SUCCESSFUL);
+    ret ? _hidl_cb({false, "Failed to set successfull flag"}) : _hidl_cb({true, ""});
+    return Void();
+}
+
+Return<void> BootControl::setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) {
+    if (slot >= 2) {
+        _hidl_cb({false, "Invalid slot"});
+        return Void();
+    }
+
+    std::string dev_path = getDevPath(slot);
+    if (dev_path.empty()) {
+        _hidl_cb({false, "Could not get device path for slot"});
+        return Void();
+    }
+
+    GptUtils gpt(dev_path);
+    if (gpt.Load()) {
+        _hidl_cb({false, "failed to load gpt data"});
+        return Void();
+    }
+
+    gpt_entry *active_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_a" : "boot_b");
+    gpt_entry *inactive_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_b" : "boot_a");
+    if (active_entry == nullptr || inactive_entry == nullptr) {
+        _hidl_cb({false, "failed to get entries for boot partitions"});
+        return Void();
+    }
+
+    ALOGV("slot active attributes %lx\n", active_entry->attr);
+    ALOGV("slot inactive attributes %lx\n", inactive_entry->attr);
+
+    char boot_dev[PROPERTY_VALUE_MAX];
+    property_get("ro.boot.bootdevice", boot_dev, "");
+    if (boot_dev[0] == '\0') {
+        _hidl_cb({false, "invalid ro.boot.bootdevice prop"});
+        return Void();
+    }
+
+    std::string boot_lun_path = std::string("/sys/devices/platform/") +
+                                boot_dev + "/pixel/boot_lun_enabled";
+    int fd = open(boot_lun_path.c_str(), O_RDWR);
+    if (fd < 0) {
+        // Try old path for kernels < 5.4
+        // TODO: remove once kernel 4.19 support is deprecated
+        std::string boot_lun_path = std::string("/sys/devices/platform/") +
+                                    boot_dev + "/attributes/boot_lun_enabled";
+        fd = open(boot_lun_path.c_str(), O_RDWR);
+        if (fd < 0) {
+            _hidl_cb({false, "failed to open ufs attr boot_lun_enabled"});
+            return Void();
+        }
+    }
+
+    // update attributes for active and inactive
+    inactive_entry->attr &= ~AB_ATTR_ACTIVE;
+    active_entry->attr = AB_ATTR_ACTIVE | (AB_ATTR_MAX_PRIORITY << AB_ATTR_PRIORITY_SHIFT) |
+                         (AB_ATTR_MAX_RETRY_COUNT << AB_ATTR_RETRY_COUNT_SHIFT);
+
+    //
+    // bBootLunEn
+    // 0x1  => Boot LU A = enabled, Boot LU B = disable
+    // 0x2  => Boot LU A = disable, Boot LU B = enabled
+    //
+    int ret = android::base::WriteStringToFd(slot == 0 ? "1" : "2", fd);
+    close(fd);
+    if (ret < 0) {
+        _hidl_cb({false, "faied to write boot_lun_enabled attribute"});
+        return Void();
+    }
+
+    _hidl_cb({true, ""});
+    return Void();
+}
+
+Return<void> BootControl::setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) {
+    if (slot >= 2) {
+        _hidl_cb({false, "Invalid slot"});
+        return Void();
+    }
+
+    std::string dev_path = getDevPath(slot);
+    if (dev_path.empty()) {
+        _hidl_cb({false, "Could not get device path for slot"});
+        return Void();
+    }
+
+    GptUtils gpt(dev_path);
+    gpt.Load();
+
+    gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a");
+    e->attr |= AB_ATTR_UNBOOTABLE;
+
+    gpt.Sync();
+
+    _hidl_cb({true, ""});
+    return Void();
+}
+
+Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotBootable(uint32_t slot) {
+    if (getNumberSlots() == 0)
+        return BoolResult::FALSE;
+    if (slot >= getNumberSlots())
+        return BoolResult::INVALID_SLOT;
+    return isSlotFlagSet(slot, AB_ATTR_UNBOOTABLE) ? BoolResult::FALSE : BoolResult::TRUE;
+}
+
+Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotMarkedSuccessful(uint32_t slot) {
+    if (getNumberSlots() == 0) {
+        // just return true so that we don't we another call trying to mark it as successful
+        // when there is no slots
+        return BoolResult::TRUE;
+    }
+    if (slot >= getNumberSlots())
+        return BoolResult::INVALID_SLOT;
+    return isSlotFlagSet(slot, AB_ATTR_SUCCESSFUL) ? BoolResult::TRUE : BoolResult::FALSE;
+}
+
+Return<void> BootControl::getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) {
+    _hidl_cb(slot == 0 ? "_a" : slot == 1 ? "_b" : "");
+    return Void();
+}
+
+extern "C" IBootControl* HIDL_FETCH_IBootControl(const char*) {
+    return new BootControl();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.0/BootControl.h b/interfaces/boot/1.0/BootControl.h
new file mode 100644
index 0000000..eb81cb0
--- /dev/null
+++ b/interfaces/boot/1.0/BootControl.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+#include <android/hardware/boot/1.0/IBootControl.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct BootControl : public IBootControl {
+    // Methods from ::android::hardware::boot::V1_0::IBootControl follow.
+    Return<uint32_t> getNumberSlots() override;
+    Return<uint32_t> getCurrentSlot() override;
+    Return<void> markBootSuccessful(markBootSuccessful_cb _hidl_cb) override;
+    Return<void> setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) override;
+    Return<void> setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) override;
+    Return<::android::hardware::boot::V1_0::BoolResult> isSlotBootable(uint32_t slot) override;
+    Return<::android::hardware::boot::V1_0::BoolResult> isSlotMarkedSuccessful(uint32_t slot) override;
+    Return<void> getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+
+};
+
+// FIXME: most likely delete, this is only for passthrough implementations
+extern "C" IBootControl* HIDL_FETCH_IBootControl(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.0/GptUtils.cpp b/interfaces/boot/1.0/GptUtils.cpp
new file mode 100644
index 0000000..f893617
--- /dev/null
+++ b/interfaces/boot/1.0/GptUtils.cpp
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#define LOG_TAG "bootcontrolhal"
+
+#include "GptUtils.h"
+
+#include <errno.h>
+#include <log/log.h>
+#include <android-base/file.h>
+#include <linux/fs.h>
+#include <zlib.h>
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_0 {
+namespace implementation {
+
+namespace {
+
+static int ValidateGptHeader(gpt_header *gpt)
+{
+    if (gpt->signature != GPT_SIGNATURE) {
+        ALOGE("invalid gpt signature 0x%lx\n", gpt->signature);
+        return -1;
+    }
+
+    if (gpt->header_size != sizeof(gpt_header)) {
+        ALOGE("invalid gpt header size %u\n", gpt->header_size);
+        return -1;
+    }
+
+    if (gpt->entry_size != sizeof(gpt_entry)) {
+        ALOGE("invalid gpt entry size %u\n", gpt->entry_size);
+        return -1;
+    }
+
+    return 0;
+}
+
+}
+
+GptUtils::GptUtils(const std::string dev_path) : dev_path(dev_path), fd(0) {}
+
+int GptUtils::Load(void)
+{
+    fd = open(dev_path.c_str(), O_RDWR);
+    if (fd < 0) {
+        ALOGE("failed to open block dev %s, %d\n", dev_path.c_str(), errno);
+        return -1;
+    }
+
+    int ret = ioctl(fd, BLKSSZGET, &block_size);
+    if (ret < 0) {
+        ALOGE("failed to get block size %d\n", errno);
+        return -1;
+    }
+
+    // read primary header
+    lseek64(fd, block_size, SEEK_SET);
+    ret = read(fd, &gpt_primary, sizeof gpt_primary);
+    if (ret < 0) {
+        ALOGE("failed to read gpt primary header %d\n", errno);
+        return -1;
+    }
+
+    if (ValidateGptHeader(&gpt_primary)) {
+        ALOGE("error validating gpt header\n");
+        return -1;
+    }
+
+    // read partition entries
+    entry_array.resize(gpt_primary.entry_count);
+    uint32_t entries_size = gpt_primary.entry_size * gpt_primary.entry_count;
+    lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET);
+    ret = read(fd, entry_array.data(), entries_size);
+    if (ret < 0) {
+        ALOGE("failed to read gpt partition entries %d\n", errno);
+        return -1;
+    }
+
+    // read gpt back header
+    lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET);
+    ret = read(fd, &gpt_backup, sizeof gpt_backup);
+    if (ret < 0) {
+        ALOGE("failed to read gpt backup header %d\n", errno);
+        return -1;
+    }
+
+    if (ValidateGptHeader(&gpt_backup)) {
+        ALOGW("error validating gpt backup\n"); // just warn about it, not fail
+    }
+
+    // Create map <partition name, gpt_entry pointer>
+    auto get_name = [](const uint16_t *efi_name) {
+        char name[37] = {};
+        for (int i = 0; efi_name[i] && i < sizeof name - 1; ++i)
+            name[i] = efi_name[i];
+        return std::string(name);
+    };
+
+    for (auto const &e: entry_array) {
+        if (e.name[0] == 0)
+            break;   // stop at the first partition with no name
+        std::string s = get_name(e.name);
+        entries[s] = const_cast<gpt_entry *>(&e);
+    }
+
+    return 0;
+}
+
+gpt_entry *GptUtils::GetPartitionEntry(std::string name)
+{
+    return entries.find(name) != entries.end() ?  entries[name] : nullptr;
+}
+
+int GptUtils::Sync(void)
+{
+    if (!fd)
+        return -1;
+
+    // calculate crc and check if we need to update gpt
+    gpt_primary.entries_crc32 = crc32(0, reinterpret_cast<uint8_t *>(entry_array.data()),
+                                entry_array.size() * sizeof(gpt_entry));
+
+    // save old crc
+    uint32_t crc = gpt_primary.crc32;
+    gpt_primary.crc32 = 0;
+
+    gpt_primary.crc32 = crc32(0, reinterpret_cast<uint8_t *>(&gpt_primary), sizeof gpt_primary);
+    if (crc == gpt_primary.crc32)
+        return 0; // nothing to do (no changes)
+
+    ALOGI("updating GPT\n");
+
+    lseek64(fd, block_size * gpt_primary.current_lba, SEEK_SET);
+    int ret = write(fd, &gpt_primary, sizeof gpt_primary);
+    if (ret < 0) {
+        ALOGE("failed to write gpt primary header %d\n", errno);
+        return -1;
+    }
+
+    lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET);
+    ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry));
+    if (ret < 0) {
+        ALOGE("failed to write gpt partition entries %d\n", errno);
+        return -1;
+    }
+
+    //update GPT backup entries and backup
+    lseek64(fd, block_size * gpt_backup.start_lba, SEEK_SET);
+    ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry));
+    if (ret < 0) {
+        ALOGE("failed to write gpt backup partition entries %d\n", errno);
+        return -1;
+    }
+
+    gpt_backup.entries_crc32 = gpt_primary.entries_crc32;
+    gpt_backup.crc32 = 0;
+    gpt_backup.crc32 = crc32(0, reinterpret_cast<uint8_t *>(&gpt_backup), sizeof gpt_backup);
+    lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET);
+    ret = write(fd, &gpt_backup, sizeof gpt_backup);
+    if (ret < 0) {
+        ALOGE("failed to write gpt backup header %d\n", errno);
+        return -1;
+    }
+
+    fsync(fd);
+
+    return 0;
+}
+
+GptUtils::~GptUtils()
+{
+    if (fd) {
+        Sync();
+        close(fd);
+    }
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.0/GptUtils.h b/interfaces/boot/1.0/GptUtils.h
new file mode 100644
index 0000000..d969d9d
--- /dev/null
+++ b/interfaces/boot/1.0/GptUtils.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <map>
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_0 {
+namespace implementation {
+
+#define GPT_SIGNATURE       0x5452415020494645UL
+
+typedef struct {
+    uint8_t type_guid[16];
+    uint8_t guid[16];
+    uint64_t first_lba;
+    uint64_t last_lba;
+    uint64_t attr;
+    uint16_t name[36];
+} __attribute__((packed)) gpt_entry;
+
+typedef struct {
+    uint64_t signature;
+    uint32_t revision;
+    uint32_t header_size;
+    uint32_t crc32;
+    uint32_t reserved;
+    uint64_t current_lba;
+    uint64_t backup_lba;
+    uint64_t first_usable_lba;
+    uint64_t last_usable_lba;
+    uint8_t disk_guid[16];
+    uint64_t start_lba;
+    uint32_t entry_count;
+    uint32_t entry_size;
+    uint32_t entries_crc32;
+} __attribute__((packed)) gpt_header;
+
+class GptUtils {
+   public:
+    GptUtils(const std::string dev_path);
+    int Load(void);
+    gpt_entry *GetPartitionEntry(std::string name);
+    int Sync(void);
+    ~GptUtils();
+
+   private:
+    std::string dev_path;
+    int fd;
+    uint32_t block_size;
+    gpt_header gpt_primary;
+    gpt_header gpt_backup;
+    std::vector<gpt_entry> entry_array;
+    std::map<std::string, gpt_entry *>entries;
+};
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.0/android.hardware.boot@1.0-service-gs101.rc b/interfaces/boot/1.0/android.hardware.boot@1.0-service-gs101.rc
new file mode 100644
index 0000000..24a4b45
--- /dev/null
+++ b/interfaces/boot/1.0/android.hardware.boot@1.0-service-gs101.rc
@@ -0,0 +1,4 @@
+service vendor.boot-hal-1-0 /vendor/bin/hw/android.hardware.boot@1.0-service-gs101
+    class early_hal
+    user root
+    group root
diff --git a/interfaces/boot/1.0/service.cpp b/interfaces/boot/1.0/service.cpp
new file mode 100644
index 0000000..9dcd78c
--- /dev/null
+++ b/interfaces/boot/1.0/service.cpp
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+#define LOG_TAG "android.hardware.boot@1.0-service"
+
+#include <log/log.h>
+#include <hidl/HidlTransportSupport.h>
+#include <hidl/Status.h>
+#include <android/hardware/boot/1.0/IBootControl.h>
+#include "BootControl.h"
+
+using ::android::status_t;
+
+using ::android::hardware::boot::V1_0::IBootControl;
+
+using ::android::hardware::boot::V1_0::implementation::BootControl;
+
+int main (int /* argc */, char * /* argv */ []) {
+    // This function must be called before you join to ensure the proper
+    // number of threads are created. The threadpool will never exceed
+    // size one because of this call.
+    ::android::hardware::configureRpcThreadpool(1 /*threads*/, true /*willJoin*/);
+
+    ::android::sp bootctrl = new BootControl();
+    const status_t status = bootctrl->registerAsService();
+    if (status != ::android::OK) {
+        return 1; // or handle error
+    }
+
+    // Adds this thread to the threadpool, resulting in one total
+    // thread in the threadpool. We could also do other things, but
+    // would have to specify 'false' to willJoin in configureRpcThreadpool.
+    ::android::hardware::joinRpcThreadpool();
+    return 1; // joinRpcThreadpool should never return
+}
diff --git a/interfaces/boot/1.2/Android.bp b/interfaces/boot/1.2/Android.bp
new file mode 100644
index 0000000..982a543
--- /dev/null
+++ b/interfaces/boot/1.2/Android.bp
@@ -0,0 +1,81 @@
+//
+// Copyright (C) 2020 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 {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+cc_binary {
+    name: "android.hardware.boot@1.2-service-gs101",
+    defaults: ["hidl_defaults"],
+    relative_install_path: "hw",
+    vendor: true,
+    init_rc: ["android.hardware.boot@1.2-service-gs101.rc"],
+    srcs: [
+        "BootControl.cpp",
+        "GptUtils.cpp",
+        "service.cpp"
+    ],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libhidlbase",
+        "libutils",
+        "libcutils",
+        "libz",
+        "android.hardware.boot@1.0",
+        "android.hardware.boot@1.1",
+        "android.hardware.boot@1.2",
+    ],
+    static_libs: [
+        "libboot_control",
+        "libbootloader_message_vendor",
+        "libfstab",
+    ],
+}
+
+cc_library {
+    name: "android.hardware.boot@1.2-impl-gs101",
+    stem: "android.hardware.boot@1.0-impl-1.2-impl-gs101",
+    recovery: true,
+    srcs: [
+        "BootControl.cpp",
+        "GptUtils.cpp",
+    ],
+    relative_install_path: "hw",
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libhidlbase",
+        "libutils",
+        "libcutils",
+        "libz",
+        "android.hardware.boot@1.0",
+        "android.hardware.boot@1.1",
+        "android.hardware.boot@1.2",
+    ],
+    static_libs: [
+        "libboot_control",
+        "libbootloader_message_vendor",
+        "libfstab",
+    ],
+}
diff --git a/interfaces/boot/1.2/BootControl.cpp b/interfaces/boot/1.2/BootControl.cpp
new file mode 100644
index 0000000..70b9594
--- /dev/null
+++ b/interfaces/boot/1.2/BootControl.cpp
@@ -0,0 +1,420 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#define LOG_TAG "bootcontrolhal"
+
+#include "BootControl.h"
+
+#include <android-base/file.h>
+#include <android-base/unique_fd.h>
+#include <bootloader_message/bootloader_message.h>
+#include <cutils/properties.h>
+#include <libboot_control/libboot_control.h>
+#include <log/log.h>
+
+#include "DevInfo.h"
+#include "GptUtils.h"
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_2 {
+namespace implementation {
+
+using android::bootable::GetMiscVirtualAbMergeStatus;
+using android::bootable::InitMiscVirtualAbMessageIfNeeded;
+using android::bootable::SetMiscVirtualAbMergeStatus;
+using android::hardware::boot::V1_0::BoolResult;
+using android::hardware::boot::V1_0::CommandResult;
+using android::hardware::boot::V1_1::MergeStatus;
+
+namespace {
+
+// clang-format off
+
+#define BOOT_A_PATH     "/dev/block/by-name/boot_a"
+#define BOOT_B_PATH     "/dev/block/by-name/boot_b"
+#define DEVINFO_PATH    "/dev/block/by-name/devinfo"
+
+// slot flags
+#define AB_ATTR_PRIORITY_SHIFT      52
+#define AB_ATTR_PRIORITY_MASK       (3UL << AB_ATTR_PRIORITY_SHIFT)
+#define AB_ATTR_ACTIVE_SHIFT        54
+#define AB_ATTR_ACTIVE              (1UL << AB_ATTR_ACTIVE_SHIFT)
+#define AB_ATTR_RETRY_COUNT_SHIFT   (55)
+#define AB_ATTR_RETRY_COUNT_MASK    (7UL << AB_ATTR_RETRY_COUNT_SHIFT)
+#define AB_ATTR_SUCCESSFUL          (1UL << 58)
+#define AB_ATTR_UNBOOTABLE          (1UL << 59)
+
+#define AB_ATTR_MAX_PRIORITY        3UL
+#define AB_ATTR_MAX_RETRY_COUNT     3UL
+
+// clang-format on
+
+static std::string getDevPath(uint32_t slot) {
+    char real_path[PATH_MAX];
+
+    const char *path = slot == 0 ? BOOT_A_PATH : BOOT_B_PATH;
+
+    int ret = readlink(path, real_path, sizeof real_path);
+    if (ret < 0) {
+        ALOGE("readlink failed for boot device %s\n", strerror(errno));
+        return std::string();
+    }
+
+    std::string dp(real_path);
+    // extract /dev/sda.. part
+    return dp.substr(0, sizeof "/dev/block/sdX" - 1);
+}
+
+static bool isSlotFlagSet(uint32_t slot, uint64_t flag) {
+    std::string dev_path = getDevPath(slot);
+    if (dev_path.empty()) {
+        ALOGI("Could not get device path for slot %d\n", slot);
+        return false;
+    }
+
+    GptUtils gpt(dev_path);
+    if (gpt.Load()) {
+        ALOGI("failed to load gpt data\n");
+        return false;
+    }
+
+    gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a");
+    if (e == nullptr) {
+        ALOGI("failed to get gpt entry\n");
+        return false;
+    }
+
+    return !!(e->attr & flag);
+}
+
+static bool setSlotFlag(uint32_t slot, uint64_t flag) {
+    std::string dev_path = getDevPath(slot);
+    if (dev_path.empty()) {
+        ALOGI("Could not get device path for slot %d\n", slot);
+        return false;
+    }
+
+    GptUtils gpt(dev_path);
+    if (gpt.Load()) {
+        ALOGI("failed to load gpt data\n");
+        return false;
+    }
+
+    gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a");
+    if (e == nullptr) {
+        ALOGI("failed to get gpt entry\n");
+        return false;
+    }
+
+    e->attr |= flag;
+    gpt.Sync();
+
+    return true;
+}
+
+static bool is_devinfo_valid;
+static bool is_devinfo_initialized;
+static std::mutex devinfo_lock;
+static devinfo_t devinfo;
+
+static bool isDevInfoValid() {
+    const std::lock_guard<std::mutex> lock(devinfo_lock);
+
+    if (is_devinfo_initialized) {
+        return is_devinfo_valid;
+    }
+
+    is_devinfo_initialized = true;
+
+    android::base::unique_fd fd(open(DEVINFO_PATH, O_RDONLY));
+    android::base::ReadFully(fd, &devinfo, sizeof devinfo);
+
+    if (devinfo.magic != DEVINFO_MAGIC) {
+        return is_devinfo_valid;
+    }
+
+    uint32_t version = ((uint32_t)devinfo.ver_major << 16) | devinfo.ver_minor;
+    // only version 3.3+ supports A/B data
+    if (version >= 0x0003'0003) {
+        is_devinfo_valid = true;
+    }
+
+    return is_devinfo_valid;
+}
+
+static bool DevInfoSync() {
+    if (!isDevInfoValid()) {
+        return false;
+    }
+
+    android::base::unique_fd fd(open(DEVINFO_PATH, O_WRONLY));
+    return android::base::WriteFully(fd, &devinfo, sizeof devinfo);
+}
+
+static void DevInfoInitSlot(devinfo_ab_slot_data_t &slot_data) {
+    slot_data.retry_count = AB_ATTR_MAX_RETRY_COUNT;
+    slot_data.unbootable = 0;
+    slot_data.successful = 0;
+    slot_data.active = 1;
+    slot_data.fastboot_ok = 0;
+}
+
+}  // namespace
+
+// Methods from ::android::hardware::boot::V1_0::IBootControl follow.
+Return<uint32_t> BootControl::getNumberSlots() {
+    uint32_t slots = 0;
+
+    if (access(BOOT_A_PATH, F_OK) == 0)
+        slots++;
+
+    if (access(BOOT_B_PATH, F_OK) == 0)
+        slots++;
+
+    return slots;
+}
+
+Return<uint32_t> BootControl::getCurrentSlot() {
+    char suffix[PROPERTY_VALUE_MAX];
+    property_get("ro.boot.slot_suffix", suffix, "_a");
+    return std::string(suffix) == "_b" ? 1 : 0;
+}
+
+Return<void> BootControl::markBootSuccessful(markBootSuccessful_cb _hidl_cb) {
+    if (getNumberSlots() == 0) {
+        // no slots, just return true otherwise Android keeps trying
+        _hidl_cb({true, ""});
+        return Void();
+    }
+
+    bool ret;
+    if (isDevInfoValid()) {
+        auto const slot = getCurrentSlot();
+        devinfo.ab_data.slots[slot].successful = 1;
+        ret = DevInfoSync();
+    } else {
+        ret = setSlotFlag(getCurrentSlot(), AB_ATTR_SUCCESSFUL);
+    }
+
+    !ret ? _hidl_cb({false, "Failed to set successful flag"}) : _hidl_cb({true, ""});
+    return Void();
+}
+
+Return<void> BootControl::setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) {
+    if (slot >= 2) {
+        _hidl_cb({false, "Invalid slot"});
+        return Void();
+    }
+
+    if (isDevInfoValid()) {
+        auto &active_slot_data = devinfo.ab_data.slots[slot];
+        auto &inactive_slot_data = devinfo.ab_data.slots[!slot];
+
+        inactive_slot_data.active = 0;
+        DevInfoInitSlot(active_slot_data);
+
+        if (!DevInfoSync()) {
+            _hidl_cb({false, "Could not update DevInfo data"});
+            return Void();
+        }
+    } else {
+        std::string dev_path = getDevPath(slot);
+        if (dev_path.empty()) {
+            _hidl_cb({false, "Could not get device path for slot"});
+            return Void();
+        }
+
+        GptUtils gpt(dev_path);
+        if (gpt.Load()) {
+            _hidl_cb({false, "failed to load gpt data"});
+            return Void();
+        }
+
+        gpt_entry *active_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_a" : "boot_b");
+        gpt_entry *inactive_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_b" : "boot_a");
+        if (active_entry == nullptr || inactive_entry == nullptr) {
+            _hidl_cb({false, "failed to get entries for boot partitions"});
+            return Void();
+        }
+
+        ALOGV("slot active attributes %lx\n", active_entry->attr);
+        ALOGV("slot inactive attributes %lx\n", inactive_entry->attr);
+
+        // update attributes for active and inactive
+        inactive_entry->attr &= ~AB_ATTR_ACTIVE;
+        active_entry->attr = AB_ATTR_ACTIVE | (AB_ATTR_MAX_PRIORITY << AB_ATTR_PRIORITY_SHIFT) |
+                             (AB_ATTR_MAX_RETRY_COUNT << AB_ATTR_RETRY_COUNT_SHIFT);
+    }
+
+    char boot_dev[PROPERTY_VALUE_MAX];
+    property_get("ro.boot.bootdevice", boot_dev, "");
+    if (boot_dev[0] == '\0') {
+        _hidl_cb({false, "invalid ro.boot.bootdevice prop"});
+        return Void();
+    }
+
+    std::string boot_lun_path =
+            std::string("/sys/devices/platform/") + boot_dev + "/pixel/boot_lun_enabled";
+    int fd = open(boot_lun_path.c_str(), O_RDWR);
+    if (fd < 0) {
+        // Try old path for kernels < 5.4
+        // TODO: remove once kernel 4.19 support is deprecated
+        std::string boot_lun_path =
+                std::string("/sys/devices/platform/") + boot_dev + "/attributes/boot_lun_enabled";
+        fd = open(boot_lun_path.c_str(), O_RDWR);
+        if (fd < 0) {
+            _hidl_cb({false, "failed to open ufs attr boot_lun_enabled"});
+            return Void();
+        }
+    }
+
+    //
+    // bBootLunEn
+    // 0x1  => Boot LU A = enabled, Boot LU B = disable
+    // 0x2  => Boot LU A = disable, Boot LU B = enabled
+    //
+    int ret = android::base::WriteStringToFd(slot == 0 ? "1" : "2", fd);
+    close(fd);
+    if (ret < 0) {
+        _hidl_cb({false, "faied to write boot_lun_enabled attribute"});
+        return Void();
+    }
+
+    _hidl_cb({true, ""});
+    return Void();
+}
+
+Return<void> BootControl::setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) {
+    if (slot >= 2) {
+        _hidl_cb({false, "Invalid slot"});
+        return Void();
+    }
+
+    if (isDevInfoValid()) {
+        auto &slot_data = devinfo.ab_data.slots[slot];
+        slot_data.unbootable = 1;
+        if (!DevInfoSync()) {
+            _hidl_cb({false, "Could not update DevInfo data"});
+            return Void();
+        }
+    } else {
+        std::string dev_path = getDevPath(slot);
+        if (dev_path.empty()) {
+            _hidl_cb({false, "Could not get device path for slot"});
+            return Void();
+        }
+
+        GptUtils gpt(dev_path);
+        gpt.Load();
+
+        gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a");
+        e->attr |= AB_ATTR_UNBOOTABLE;
+
+        gpt.Sync();
+    }
+
+    _hidl_cb({true, ""});
+    return Void();
+}
+
+Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotBootable(uint32_t slot) {
+    if (getNumberSlots() == 0)
+        return BoolResult::FALSE;
+    if (slot >= getNumberSlots())
+        return BoolResult::INVALID_SLOT;
+
+    bool unbootable;
+    if (isDevInfoValid()) {
+        auto &slot_data = devinfo.ab_data.slots[slot];
+        unbootable = !!slot_data.unbootable;
+    } else {
+        unbootable = isSlotFlagSet(slot, AB_ATTR_UNBOOTABLE);
+    }
+
+    return unbootable ? BoolResult::FALSE : BoolResult::TRUE;
+}
+
+Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotMarkedSuccessful(
+        uint32_t slot) {
+    if (getNumberSlots() == 0) {
+        // just return true so that we don't we another call trying to mark it as successful
+        // when there is no slots
+        return BoolResult::TRUE;
+    }
+    if (slot >= getNumberSlots())
+        return BoolResult::INVALID_SLOT;
+
+    bool successful;
+    if (isDevInfoValid()) {
+        auto &slot_data = devinfo.ab_data.slots[slot];
+        successful = !!slot_data.successful;
+    } else {
+        successful = isSlotFlagSet(slot, AB_ATTR_SUCCESSFUL);
+    }
+
+    return successful ? BoolResult::TRUE : BoolResult::FALSE;
+}
+
+Return<void> BootControl::getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) {
+    _hidl_cb(slot == 0 ? "_a" : slot == 1 ? "_b" : "");
+    return Void();
+}
+
+// Methods from ::android::hardware::boot::V1_1::IBootControl follow.
+bool BootControl::Init() {
+    return InitMiscVirtualAbMessageIfNeeded();
+}
+
+Return<bool> BootControl::setSnapshotMergeStatus(
+        ::android::hardware::boot::V1_1::MergeStatus status) {
+    return SetMiscVirtualAbMergeStatus(getCurrentSlot(), status);
+}
+
+Return<::android::hardware::boot::V1_1::MergeStatus> BootControl::getSnapshotMergeStatus() {
+    MergeStatus status;
+    if (!GetMiscVirtualAbMergeStatus(getCurrentSlot(), &status)) {
+        return MergeStatus::UNKNOWN;
+    }
+    return status;
+}
+
+// Methods from ::android::hardware::boot::V1_2::IBootControl follow.
+Return<uint32_t> BootControl::getActiveBootSlot() {
+    if (getNumberSlots() == 0)
+        return 0;
+
+    if (isDevInfoValid())
+        return devinfo.ab_data.slots[1].active ? 1 : 0;
+    return isSlotFlagSet(1, AB_ATTR_ACTIVE) ? 1 : 0;
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+IBootControl *HIDL_FETCH_IBootControl(const char * /* name */) {
+    auto module = new BootControl();
+
+    module->Init();
+
+    return module;
+}
+
+}  // namespace implementation
+}  // namespace V1_2
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.2/BootControl.h b/interfaces/boot/1.2/BootControl.h
new file mode 100644
index 0000000..17b5f0f
--- /dev/null
+++ b/interfaces/boot/1.2/BootControl.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#pragma once
+
+#include <android/hardware/boot/1.2/IBootControl.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_2 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+
+struct BootControl : public IBootControl {
+    bool Init();
+
+    // Methods from ::android::hardware::boot::V1_0::IBootControl follow.
+    Return<uint32_t> getNumberSlots() override;
+    Return<uint32_t> getCurrentSlot() override;
+    Return<void> markBootSuccessful(markBootSuccessful_cb _hidl_cb) override;
+    Return<void> setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) override;
+    Return<void> setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) override;
+    Return<::android::hardware::boot::V1_0::BoolResult> isSlotBootable(uint32_t slot) override;
+    Return<::android::hardware::boot::V1_0::BoolResult> isSlotMarkedSuccessful(
+            uint32_t slot) override;
+    Return<void> getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) override;
+
+    // Methods from ::android::hardware::boot::V1_1::IBootControl follow.
+    Return<bool> setSnapshotMergeStatus(
+            ::android::hardware::boot::V1_1::MergeStatus status) override;
+    Return<::android::hardware::boot::V1_1::MergeStatus> getSnapshotMergeStatus() override;
+
+    // Methods from ::android::hardware::boot::V1_2::IBootControl follow.
+    Return<uint32_t> getActiveBootSlot() override;
+
+    // Methods from ::android::hidl::base::V1_0::IBase follow.
+};
+
+// FIXME: most likely delete, this is only for passthrough implementations
+extern "C" IBootControl *HIDL_FETCH_IBootControl(const char *name);
+
+}  // namespace implementation
+}  // namespace V1_2
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.2/DevInfo.h b/interfaces/boot/1.2/DevInfo.h
new file mode 100644
index 0000000..a09a83a
--- /dev/null
+++ b/interfaces/boot/1.2/DevInfo.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+#pragma once
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_2 {
+namespace implementation {
+
+//
+// definitions taken from ABL code
+//
+
+constexpr uint32_t DEVINFO_MAGIC = 0x49564544;
+constexpr size_t DEVINFO_AB_SLOT_COUNT = 2;
+
+struct devinfo_ab_slot_data_t {
+    uint8_t retry_count;
+    uint8_t unbootable : 1;
+    uint8_t successful : 1;
+    uint8_t active : 1;
+    uint8_t fastboot_ok : 1;
+    uint8_t : 4;
+    uint8_t unused[2];
+} __attribute__((packed));
+
+typedef struct {
+    devinfo_ab_slot_data_t slots[DEVINFO_AB_SLOT_COUNT];
+} __attribute__((packed)) devinfo_ab_data_t;
+
+struct devinfo_t {
+    uint32_t magic;
+    uint16_t ver_major;
+    uint16_t ver_minor;
+    uint8_t unused[40];
+    devinfo_ab_data_t ab_data;
+    uint8_t unused1[72];  // use remaining up to complete 128 bytes
+} __attribute__((packed));
+
+static_assert(sizeof(devinfo_t) == 128, "invalid devinfo struct size");
+
+}  // namespace implementation
+}  // namespace V1_2
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.2/GptUtils.cpp b/interfaces/boot/1.2/GptUtils.cpp
new file mode 100644
index 0000000..25088e7
--- /dev/null
+++ b/interfaces/boot/1.2/GptUtils.cpp
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#define LOG_TAG "bootcontrolhal"
+
+#include "GptUtils.h"
+
+#include <android-base/file.h>
+#include <errno.h>
+#include <linux/fs.h>
+#include <log/log.h>
+#include <zlib.h>
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_2 {
+namespace implementation {
+
+namespace {
+
+static int ValidateGptHeader(gpt_header *gpt) {
+    if (gpt->signature != GPT_SIGNATURE) {
+        ALOGE("invalid gpt signature 0x%lx\n", gpt->signature);
+        return -1;
+    }
+
+    if (gpt->header_size != sizeof(gpt_header)) {
+        ALOGE("invalid gpt header size %u\n", gpt->header_size);
+        return -1;
+    }
+
+    if (gpt->entry_size != sizeof(gpt_entry)) {
+        ALOGE("invalid gpt entry size %u\n", gpt->entry_size);
+        return -1;
+    }
+
+    return 0;
+}
+
+}  // namespace
+
+GptUtils::GptUtils(const std::string dev_path) : dev_path(dev_path), fd(0) {}
+
+int GptUtils::Load(void) {
+    fd = open(dev_path.c_str(), O_RDWR);
+    if (fd < 0) {
+        ALOGE("failed to open block dev %s, %d\n", dev_path.c_str(), errno);
+        return -1;
+    }
+
+    int ret = ioctl(fd, BLKSSZGET, &block_size);
+    if (ret < 0) {
+        ALOGE("failed to get block size %d\n", errno);
+        return -1;
+    }
+
+    // read primary header
+    lseek64(fd, block_size, SEEK_SET);
+    ret = read(fd, &gpt_primary, sizeof gpt_primary);
+    if (ret < 0) {
+        ALOGE("failed to read gpt primary header %d\n", errno);
+        return -1;
+    }
+
+    if (ValidateGptHeader(&gpt_primary)) {
+        ALOGE("error validating gpt header\n");
+        return -1;
+    }
+
+    // read partition entries
+    entry_array.resize(gpt_primary.entry_count);
+    uint32_t entries_size = gpt_primary.entry_size * gpt_primary.entry_count;
+    lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET);
+    ret = read(fd, entry_array.data(), entries_size);
+    if (ret < 0) {
+        ALOGE("failed to read gpt partition entries %d\n", errno);
+        return -1;
+    }
+
+    // read gpt back header
+    lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET);
+    ret = read(fd, &gpt_backup, sizeof gpt_backup);
+    if (ret < 0) {
+        ALOGE("failed to read gpt backup header %d\n", errno);
+        return -1;
+    }
+
+    if (ValidateGptHeader(&gpt_backup)) {
+        ALOGW("error validating gpt backup\n");  // just warn about it, not fail
+    }
+
+    // Create map <partition name, gpt_entry pointer>
+    auto get_name = [](const uint16_t *efi_name) {
+        char name[37] = {};
+        for (int i = 0; efi_name[i] && i < sizeof name - 1; ++i) name[i] = efi_name[i];
+        return std::string(name);
+    };
+
+    for (auto const &e : entry_array) {
+        if (e.name[0] == 0)
+            break;  // stop at the first partition with no name
+        std::string s = get_name(e.name);
+        entries[s] = const_cast<gpt_entry *>(&e);
+    }
+
+    return 0;
+}
+
+gpt_entry *GptUtils::GetPartitionEntry(std::string name) {
+    return entries.find(name) != entries.end() ? entries[name] : nullptr;
+}
+
+int GptUtils::Sync(void) {
+    if (!fd)
+        return -1;
+
+    // calculate crc and check if we need to update gpt
+    gpt_primary.entries_crc32 = crc32(0, reinterpret_cast<uint8_t *>(entry_array.data()),
+                                      entry_array.size() * sizeof(gpt_entry));
+
+    // save old crc
+    uint32_t crc = gpt_primary.crc32;
+    gpt_primary.crc32 = 0;
+
+    gpt_primary.crc32 = crc32(0, reinterpret_cast<uint8_t *>(&gpt_primary), sizeof gpt_primary);
+    if (crc == gpt_primary.crc32)
+        return 0;  // nothing to do (no changes)
+
+    ALOGI("updating GPT\n");
+
+    lseek64(fd, block_size * gpt_primary.current_lba, SEEK_SET);
+    int ret = write(fd, &gpt_primary, sizeof gpt_primary);
+    if (ret < 0) {
+        ALOGE("failed to write gpt primary header %d\n", errno);
+        return -1;
+    }
+
+    lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET);
+    ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry));
+    if (ret < 0) {
+        ALOGE("failed to write gpt partition entries %d\n", errno);
+        return -1;
+    }
+
+    // update GPT backup entries and backup
+    lseek64(fd, block_size * gpt_backup.start_lba, SEEK_SET);
+    ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry));
+    if (ret < 0) {
+        ALOGE("failed to write gpt backup partition entries %d\n", errno);
+        return -1;
+    }
+
+    gpt_backup.entries_crc32 = gpt_primary.entries_crc32;
+    gpt_backup.crc32 = 0;
+    gpt_backup.crc32 = crc32(0, reinterpret_cast<uint8_t *>(&gpt_backup), sizeof gpt_backup);
+    lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET);
+    ret = write(fd, &gpt_backup, sizeof gpt_backup);
+    if (ret < 0) {
+        ALOGE("failed to write gpt backup header %d\n", errno);
+        return -1;
+    }
+
+    fsync(fd);
+
+    return 0;
+}
+
+GptUtils::~GptUtils() {
+    if (fd) {
+        Sync();
+        close(fd);
+    }
+}
+
+}  // namespace implementation
+}  // namespace V1_2
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.2/GptUtils.h b/interfaces/boot/1.2/GptUtils.h
new file mode 100644
index 0000000..a2bed33
--- /dev/null
+++ b/interfaces/boot/1.2/GptUtils.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+#include <map>
+#include <string>
+#include <vector>
+
+namespace android {
+namespace hardware {
+namespace boot {
+namespace V1_2 {
+namespace implementation {
+
+#define GPT_SIGNATURE 0x5452415020494645UL
+
+typedef struct {
+    uint8_t type_guid[16];
+    uint8_t guid[16];
+    uint64_t first_lba;
+    uint64_t last_lba;
+    uint64_t attr;
+    uint16_t name[36];
+} __attribute__((packed)) gpt_entry;
+
+typedef struct {
+    uint64_t signature;
+    uint32_t revision;
+    uint32_t header_size;
+    uint32_t crc32;
+    uint32_t reserved;
+    uint64_t current_lba;
+    uint64_t backup_lba;
+    uint64_t first_usable_lba;
+    uint64_t last_usable_lba;
+    uint8_t disk_guid[16];
+    uint64_t start_lba;
+    uint32_t entry_count;
+    uint32_t entry_size;
+    uint32_t entries_crc32;
+} __attribute__((packed)) gpt_header;
+
+class GptUtils {
+  public:
+    GptUtils(const std::string dev_path);
+    int Load(void);
+    gpt_entry *GetPartitionEntry(std::string name);
+    int Sync(void);
+    ~GptUtils();
+
+  private:
+    std::string dev_path;
+    int fd;
+    uint32_t block_size;
+    gpt_header gpt_primary;
+    gpt_header gpt_backup;
+    std::vector<gpt_entry> entry_array;
+    std::map<std::string, gpt_entry *> entries;
+};
+
+}  // namespace implementation
+}  // namespace V1_2
+}  // namespace boot
+}  // namespace hardware
+}  // namespace android
diff --git a/interfaces/boot/1.2/android.hardware.boot@1.2-service-gs101.rc b/interfaces/boot/1.2/android.hardware.boot@1.2-service-gs101.rc
new file mode 100644
index 0000000..b0b14dc
--- /dev/null
+++ b/interfaces/boot/1.2/android.hardware.boot@1.2-service-gs101.rc
@@ -0,0 +1,7 @@
+service vendor.boot-hal-1-2 /vendor/bin/hw/android.hardware.boot@1.2-service-gs101
+    interface android.hardware.boot@1.0::IBootControl default
+    interface android.hardware.boot@1.1::IBootControl default
+    interface android.hardware.boot@1.2::IBootControl default
+    class early_hal
+    user root
+    group root
diff --git a/interfaces/boot/1.2/service.cpp b/interfaces/boot/1.2/service.cpp
new file mode 100644
index 0000000..f07682e
--- /dev/null
+++ b/interfaces/boot/1.2/service.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#define LOG_TAG "android.hardware.boot@1.2-service"
+
+#include <android/hardware/boot/1.2/IBootControl.h>
+#include <hidl/HidlTransportSupport.h>
+#include <hidl/Status.h>
+#include <log/log.h>
+
+#include "BootControl.h"
+
+using ::android::status_t;
+
+using ::android::hardware::boot::V1_2::IBootControl;
+
+using ::android::hardware::boot::V1_2::implementation::BootControl;
+// using ::android::hardware::boot::implementation::BootControl;
+
+int main(int /* argc */, char * /* argv */[]) {
+    // This function must be called before you join to ensure the proper
+    // number of threads are created. The threadpool will never exceed
+    // size one because of this call.
+    ::android::hardware::configureRpcThreadpool(1 /*threads*/, true /*willJoin*/);
+
+    ::android::sp bootctrl = new BootControl();
+    const status_t status = bootctrl->registerAsService();
+    if (status != ::android::OK) {
+        return 1;  // or handle error
+    }
+
+    // Adds this thread to the threadpool, resulting in one total
+    // thread in the threadpool. We could also do other things, but
+    // would have to specify 'false' to willJoin in configureRpcThreadpool.
+    ::android::hardware::joinRpcThreadpool();
+    return 1;  // joinRpcThreadpool should never return
+}
diff --git a/manifest-gralloc3.xml b/manifest-gralloc3.xml
new file mode 100644
index 0000000..c8cd74b
--- /dev/null
+++ b/manifest-gralloc3.xml
@@ -0,0 +1,240 @@
+<manifest version="1.0" type="device" target-level="5">
+   <hal format="hidl">
+        <name>android.hardware.audio</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IDevicesFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.audio.effect</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IEffectsFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.soundtrigger</name>
+        <transport>hwbinder</transport>
+        <version>2.3</version>
+        <interface>
+            <name>ISoundTriggerHw</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.media.omx</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IOmx</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IOmxStore</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+	<hal format="hidl">
+		<name>android.hardware.graphics.allocator</name>
+		<transport>hwbinder</transport>
+		<version>2.0</version>
+		<interface>
+			<name>IAllocator</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+	<hal format="hidl">
+		<name>android.hardware.graphics.mapper</name>
+		<transport arch="32+64">passthrough</transport>
+		<version>2.0</version>
+		<interface>
+			<name>IMapper</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+	<hal format="hidl">
+		<name>android.hardware.graphics.composer</name>
+		<transport>hwbinder</transport>
+		<version>2.4</version>
+		<interface>
+			<name>IComposer</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+    <hal format="hidl">
+        <name>android.hardware.memtrack</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IMemtrack</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+	<hal format="hidl">
+		<name>android.hardware.renderscript</name>
+		<transport arch="32+64">passthrough</transport>
+		<version>1.0</version>
+		<interface>
+			<name>IDevice</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+    <hal format="hidl">
+        <name>android.hardware.drm</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>ICryptoFactory</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IDrmFactory</name>
+            <instance>default</instance>
+        </interface>
+	<fqname>@1.3::ICryptoFactory/clearkey</fqname>
+        <fqname>@1.3::IDrmFactory/clearkey</fqname>
+        <fqname>@1.3::ICryptoFactory/widevine</fqname>
+        <fqname>@1.3::IDrmFactory/widevine</fqname>
+    </hal>
+    <hal format = "hidl">
+        <name>android.hardware.dumpstate</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IDumpstateDevice</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothHci</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth.audio</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IBluetoothAudioProvidersFactory</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.boot</name>
+        <transport>hwbinder</transport>
+        <fqname>@1.2::IBootControl/default</fqname>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.sensors</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>ISensors</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.neuralnetworks</name>
+        <transport>hwbinder</transport>
+        <version>1.2</version>
+        <interface>
+            <name>IDevice</name>
+            <instance>armnn</instance>
+        </interface>
+        <fqname>@1.2::IDevice/armnn</fqname>
+    </hal>
+    <hal format="hidl">
+       <name>android.hardware.neuralnetworks</name>
+       <transport>hwbinder</transport>
+       <fqname>@1.3::IDevice/google-edgetpu</fqname>
+    </hal>
+    <hal format="hidl">
+       <name>android.hardware.nfc</name>
+       <transport>hwbinder</transport>
+       <version>1.2</version>
+       <interface>
+           <name>INfc</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.health</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IHealth</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl">
+        <name>com.google.input</name>
+        <interface>
+            <name>ITouchContextService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.bt_channel_avoidance</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBTChannelAvoidance</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.sar</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothSar</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.ccc</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBluetoothCcc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+      <name>vendor.google.google_battery</name>
+      <transport>hwbinder</transport>
+      <version>1.1</version>
+      <interface>
+        <name>IGoogleBattery</name>
+        <instance>default</instance>
+      </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.whitechapel.audio.audioext</name>
+       <transport>hwbinder</transport>
+       <version>2.0</version>
+       <interface>
+           <name>IAudioExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.audiometricext</name>
+       <transport>hwbinder</transport>
+       <version>1.0</version>
+       <interface>
+           <name>IAudioMetricExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <kernel target-level="6"/>
+</manifest>
diff --git a/manifest.xml b/manifest.xml
new file mode 100644
index 0000000..9a98b4d
--- /dev/null
+++ b/manifest.xml
@@ -0,0 +1,191 @@
+<manifest version="1.0" type="device" target-level="6">
+   <hal format="hidl">
+        <name>android.hardware.audio</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IDevicesFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.audio.effect</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IEffectsFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.soundtrigger</name>
+        <transport>hwbinder</transport>
+        <version>2.3</version>
+        <interface>
+            <name>ISoundTriggerHw</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.media.omx</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IOmx</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IOmxStore</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.graphics.allocator</name>
+        <transport>hwbinder</transport>
+        <version>4.0</version>
+        <interface>
+            <name>IAllocator</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.graphics.mapper</name>
+        <transport arch="32+64">passthrough</transport>
+        <version>4.0</version>
+        <interface>
+            <name>IMapper</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.graphics.composer</name>
+        <transport>hwbinder</transport>
+        <version>2.4</version>
+        <interface>
+            <name>IComposer</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format = "hidl">
+        <name>android.hardware.dumpstate</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IDumpstateDevice</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothHci</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth.audio</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IBluetoothAudioProvidersFactory</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.boot</name>
+        <transport>hwbinder</transport>
+        <fqname>@1.2::IBootControl/default</fqname>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.neuralnetworks</name>
+        <transport>hwbinder</transport>
+        <version>1.3</version>
+        <interface>
+            <name>IDevice</name>
+            <instance>google-armnn</instance>
+        </interface>
+        <fqname>@1.3::IDevice/google-armnn</fqname>
+    </hal>
+    <hal format="hidl">
+       <name>android.hardware.nfc</name>
+       <transport>hwbinder</transport>
+       <version>1.2</version>
+       <interface>
+           <name>INfc</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.health</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IHealth</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl">
+        <name>com.google.input</name>
+        <interface>
+            <name>ITouchContextService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.bt_channel_avoidance</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBTChannelAvoidance</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.sar</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothSar</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.ccc</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBluetoothCcc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+      <name>vendor.google.google_battery</name>
+      <transport>hwbinder</transport>
+      <version>1.1</version>
+      <interface>
+        <name>IGoogleBattery</name>
+        <instance>default</instance>
+      </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.whitechapel.audio.audioext</name>
+       <transport>hwbinder</transport>
+       <version>2.0</version>
+       <interface>
+           <name>IAudioExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.audiometricext</name>
+       <transport>hwbinder</transport>
+       <version>1.0</version>
+       <interface>
+           <name>IAudioMetricExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <kernel target-level="6"/>
+</manifest>
diff --git a/manifest_64-gralloc3.xml b/manifest_64-gralloc3.xml
new file mode 100644
index 0000000..579e5e5
--- /dev/null
+++ b/manifest_64-gralloc3.xml
@@ -0,0 +1,229 @@
+<manifest version="1.0" type="device" target-level="5">
+   <hal format="hidl">
+        <name>android.hardware.audio</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IDevicesFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.audio.effect</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IEffectsFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.soundtrigger</name>
+        <transport>hwbinder</transport>
+        <version>2.3</version>
+        <interface>
+            <name>ISoundTriggerHw</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+	<hal format="hidl">
+		<name>android.hardware.graphics.allocator</name>
+		<transport>hwbinder</transport>
+		<version>2.0</version>
+		<interface>
+			<name>IAllocator</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+	<hal format="hidl">
+		<name>android.hardware.graphics.mapper</name>
+		<transport arch="32+64">passthrough</transport>
+		<version>2.1</version>
+		<interface>
+			<name>IMapper</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+	<hal format="hidl">
+		<name>android.hardware.graphics.composer</name>
+		<transport>hwbinder</transport>
+		<version>2.4</version>
+		<interface>
+			<name>IComposer</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+    <hal format="hidl">
+        <name>android.hardware.memtrack</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IMemtrack</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+	<hal format="hidl">
+		<name>android.hardware.renderscript</name>
+		<transport arch="32+64">passthrough</transport>
+		<version>1.0</version>
+		<interface>
+			<name>IDevice</name>
+			<instance>default</instance>
+		</interface>
+	</hal>
+    <hal format="hidl">
+        <name>android.hardware.drm</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>ICryptoFactory</name>
+            <instance>default</instance>
+        </interface>
+        <interface>
+            <name>IDrmFactory</name>
+            <instance>default</instance>
+        </interface>
+	<fqname>@1.3::ICryptoFactory/clearkey</fqname>
+        <fqname>@1.3::IDrmFactory/clearkey</fqname>
+        <fqname>@1.3::ICryptoFactory/widevine</fqname>
+        <fqname>@1.3::IDrmFactory/widevine</fqname>
+    </hal>
+    <hal format = "hidl">
+        <name>android.hardware.dumpstate</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IDumpstateDevice</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothHci</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth.audio</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IBluetoothAudioProvidersFactory</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.boot</name>
+        <transport>hwbinder</transport>
+        <fqname>@1.2::IBootControl/default</fqname>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.sensors</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>ISensors</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+<!--
+    <hal format="hidl">
+        <name>android.hardware.neuralnetworks</name>
+        <transport>hwbinder</transport>
+        <version>1.2</version>
+        <interface>
+            <name>IDevice</name>
+            <instance>armnn</instance>
+        </interface>
+        <fqname>@1.2::IDevice/armnn</fqname>
+    </hal>
+-->
+    <hal format="hidl">
+       <name>android.hardware.neuralnetworks</name>
+       <transport>hwbinder</transport>
+       <fqname>@1.3::IDevice/google-edgetpu</fqname>
+    </hal>
+    <hal format="hidl">
+       <name>android.hardware.nfc</name>
+       <transport>hwbinder</transport>
+       <version>1.2</version>
+       <interface>
+           <name>INfc</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.health</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IHealth</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl">
+        <name>com.google.input</name>
+        <interface>
+            <name>ITouchContextService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.bt_channel_avoidance</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBTChannelAvoidance</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.sar</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothSar</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+   <hal format="hidl">
+        <name>hardware.google.bluetooth.ccc</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBluetoothCcc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+      <name>vendor.google.google_battery</name>
+      <transport>hwbinder</transport>
+      <version>1.1</version>
+      <interface>
+        <name>IGoogleBattery</name>
+        <instance>default</instance>
+      </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.whitechapel.audio.audioext</name>
+       <transport>hwbinder</transport>
+       <version>2.0</version>
+       <interface>
+           <name>IAudioExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.audiometricext</name>
+       <transport>hwbinder</transport>
+       <version>1.0</version>
+       <interface>
+           <name>IAudioMetricExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <kernel target-level="6"/>
+</manifest>
diff --git a/manifest_64.xml b/manifest_64.xml
new file mode 100644
index 0000000..1dd4333
--- /dev/null
+++ b/manifest_64.xml
@@ -0,0 +1,192 @@
+<manifest version="1.0" type="device" target-level="5">
+   <hal format="hidl">
+        <name>android.hardware.audio</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IDevicesFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.audio.effect</name>
+        <transport>hwbinder</transport>
+        <version>7.0</version>
+        <interface>
+            <name>IEffectsFactory</name>
+            <instance>default</instance>
+        </interface>
+   </hal>
+   <hal format="hidl">
+        <name>android.hardware.soundtrigger</name>
+        <transport>hwbinder</transport>
+        <version>2.3</version>
+        <interface>
+            <name>ISoundTriggerHw</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.graphics.allocator</name>
+        <transport>hwbinder</transport>
+        <version>4.0</version>
+        <interface>
+            <name>IAllocator</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.graphics.mapper</name>
+        <transport arch="32+64">passthrough</transport>
+        <version>4.0</version>
+        <interface>
+            <name>IMapper</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.graphics.composer</name>
+        <transport>hwbinder</transport>
+        <version>2.4</version>
+        <interface>
+            <name>IComposer</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.renderscript</name>
+        <transport arch="32+64">passthrough</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IDevice</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format = "hidl">
+        <name>android.hardware.dumpstate</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IDumpstateDevice</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothHci</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.bluetooth.audio</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IBluetoothAudioProvidersFactory</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.boot</name>
+        <transport>hwbinder</transport>
+        <fqname>@1.2::IBootControl/default</fqname>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.neuralnetworks</name>
+        <transport>hwbinder</transport>
+        <version>1.3</version>
+        <interface>
+            <name>IDevice</name>
+            <instance>google-armnn</instance>
+        </interface>
+        <fqname>@1.3::IDevice/google-armnn</fqname>
+    </hal>
+    <hal format="hidl">
+       <name>android.hardware.neuralnetworks</name>
+       <transport>hwbinder</transport>
+       <fqname>@1.3::IDevice/google-edgetpu</fqname>
+    </hal>
+    <hal format="hidl">
+       <name>android.hardware.nfc</name>
+       <transport>hwbinder</transport>
+       <version>1.2</version>
+       <interface>
+           <name>INfc</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+        <name>android.hardware.health</name>
+        <transport>hwbinder</transport>
+        <version>2.1</version>
+        <interface>
+            <name>IHealth</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="aidl">
+        <name>com.google.input</name>
+        <interface>
+            <name>ITouchContextService</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.bt_channel_avoidance</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBTChannelAvoidance</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.sar</name>
+        <transport>hwbinder</transport>
+        <version>1.1</version>
+        <interface>
+            <name>IBluetoothSar</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>hardware.google.bluetooth.ccc</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IBluetoothCcc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+      <name>vendor.google.google_battery</name>
+      <transport>hwbinder</transport>
+      <version>1.1</version>
+      <interface>
+        <name>IGoogleBattery</name>
+        <instance>default</instance>
+      </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.whitechapel.audio.audioext</name>
+       <transport>hwbinder</transport>
+       <version>2.0</version>
+       <interface>
+           <name>IAudioExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <hal format="hidl">
+       <name>vendor.google.audiometricext</name>
+       <transport>hwbinder</transport>
+       <version>1.0</version>
+       <interface>
+           <name>IAudioMetricExt</name>
+           <instance>default</instance>
+       </interface>
+    </hal>
+    <kernel target-level="6"/>
+</manifest>
diff --git a/manifest_media.xml b/manifest_media.xml
new file mode 100644
index 0000000..3ed9e24
--- /dev/null
+++ b/manifest_media.xml
@@ -0,0 +1,12 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.media.c2</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IComponentStore</name>
+            <instance>default</instance>
+            <instance>default1</instance>
+        </interface>
+    </hal>
+</manifest>
diff --git a/manifest_media_aosp.xml b/manifest_media_aosp.xml
new file mode 100644
index 0000000..3bc347c
--- /dev/null
+++ b/manifest_media_aosp.xml
@@ -0,0 +1,11 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.media.c2</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>IComponentStore</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</manifest>
diff --git a/media_codecs.xml b/media_codecs.xml
new file mode 100644
index 0000000..87a42ef
--- /dev/null
+++ b/media_codecs.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<!--
+<!DOCTYPE MediaCodecs [
+<!ELEMENT Include EMPTY>
+<!ATTLIST Include href CDATA #REQUIRED>
+<!ELEMENT MediaCodecs (Decoders|Encoders|Include)*>
+<!ELEMENT Decoders (MediaCodec|Include)*>
+<!ELEMENT Encoders (MediaCodec|Include)*>
+<!ELEMENT MediaCodec (Type|Quirk|Include)*>
+<!ATTLIST MediaCodec name CDATA #REQUIRED>
+<!ATTLIST MediaCodec type CDATA>
+<!ELEMENT Type EMPTY>
+<!ATTLIST Type name CDATA #REQUIRED>
+<!ELEMENT Quirk EMPTY>
+<!ATTLIST Quirk name CDATA #REQUIRED>
+]>
+
+There's a simple and a complex syntax to declare the availability of a
+media codec:
+
+A codec that properly follows the OpenMax spec and therefore doesn't have any
+quirks and that only supports a single content type can be declared like so:
+
+    <MediaCodec name="OMX.foo.bar" type="something/interesting" />
+
+If a codec has quirks OR supports multiple content types, the following syntax
+can be used:
+
+    <MediaCodec name="OMX.foo.bar" >
+        <Type name="something/interesting" />
+        <Type name="something/else" />
+        ...
+        <Quirk name="requires-allocate-on-input-ports" />
+        <Quirk name="requires-allocate-on-output-ports" />
+        <Quirk name="output-buffers-are-unreadable" />
+    </MediaCodec>
+
+Only the three quirks included above are recognized at this point:
+
+"requires-allocate-on-input-ports"
+    must be advertised if the component does not properly support specification
+    of input buffers using the OMX_UseBuffer(...) API but instead requires
+    OMX_AllocateBuffer to be used.
+
+"requires-allocate-on-output-ports"
+    must be advertised if the component does not properly support specification
+    of output buffers using the OMX_UseBuffer(...) API but instead requires
+    OMX_AllocateBuffer to be used.
+
+"output-buffers-are-unreadable"
+    must be advertised if the emitted output buffers of a decoder component
+    are not readable, i.e. use a custom format even though abusing one of
+    the official OMX colorspace constants.
+    Clients of such decoders will not be able to access the decoded data,
+    naturally making the component much less useful. The only use for
+    a component with this quirk is to render the output to the screen.
+    Audio decoders MUST NOT advertise this quirk.
+    Video decoders that advertise this quirk must be accompanied by a
+    corresponding color space converter for thumbnail extraction,
+    matching surfaceflinger support that can render the custom format to
+    a texture and possibly other code, so just DON'T USE THIS QUIRK.
+
+-->
+
+<MediaCodecs>
+    <Include href="media_codecs_google_telephony.xml" />
+</MediaCodecs>
diff --git a/media_codecs_aosp_c2.xml b/media_codecs_aosp_c2.xml
new file mode 100644
index 0000000..929ceb7
--- /dev/null
+++ b/media_codecs_aosp_c2.xml
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2018 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.
+-->
+<MediaCodecs>
+    <Settings>
+        <Setting name="supports-multiple-secure-codecs" value="true" />
+        <Setting name="supports-secure-with-non-secure-codec" value="true" />
+    </Settings>
+    <Decoders>
+        <MediaCodec name="c2.exynos.h264.decoder" type="video/avc">
+            <Limit name="size" min="32x32" max="3840x2160" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-32400" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-120000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="adaptive-playback" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.h264.decoder.secure" type="video/avc">
+            <Limit name="size" min="32x32" max="3840x2160" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-32400" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-120000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="2" />
+            <Feature name="adaptive-playback" />
+            <Feature name="secure-playback" required="true" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.hevc.decoder" type="video/hevc" >
+            <Limit name="size" min="64x64" max="3840x2160" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-32400" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-120000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="adaptive-playback" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.hevc.decoder.secure" type="video/hevc" >
+            <Limit name="size" min="64x64" max="3840x2160" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-32400" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-120000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="2" />
+            <Feature name="adaptive-playback" />
+            <Feature name="secure-playback" required="true" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.mpeg4.decoder" type="video/mp4v-es">
+            <Limit name="size" min="32x32" max="2048x2048" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-16384" />
+            <Limit name="blocks-per-second" min="1" max="979200" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-1920x1080" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="adaptive-playback" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.h263.decoder" type="video/3gpp">
+            <Limit name="size" min="32x32" max="2048x1152" />
+            <Limit name="alignment" value="4x4" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-9216" />
+            <Limit name="blocks-per-second" min="1" max="979200" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-1920x1080" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="adaptive-playback" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp8.decoder" type="video/x-vnd.on2.vp8" >
+            <Limit name="size" min="32x32" max="3840x2160" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-32400" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="adaptive-playback" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp9.decoder" type="video/x-vnd.on2.vp9" >
+            <Limit name="size" min="64x64" max="3840x2176" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="64x64" />
+            <Limit name="block-count" range="1-2025" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="adaptive-playback" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp9.decoder.secure" type="video/x-vnd.on2.vp9" >
+            <Limit name="size" min="64x64" max="3840x2176" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="64x64" />
+            <Limit name="block-count" range="1-2025" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="2" />
+            <Feature name="adaptive-playback" />
+            <Feature name="secure-playback" required="true" />
+            <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+    </Decoders>
+
+    <Encoders>
+        <MediaCodec name="c2.exynos.h264.encoder" type="video/avc">
+            <Limit name="size" min="32x32" max="3840x2160" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-32400" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-120000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="can-swap-width-height" value="1" />
+            <Feature name="vq-minimum-quality"/>
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.hevc.encoder" type="video/hevc" >
+            <Limit name="size" min="64x64" max="3840x2176" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="32x32" />
+            <Limit name="block-count" range="1-8100" />
+            <Limit name="blocks-per-second" min="1" max="979200" />
+            <Limit name="bitrate" range="1-120000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="can-swap-width-height" value="1" />
+            <Feature name="vq-minimum-quality"/>
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.mpeg4.encoder" type="video/mp4v-es">
+            <Limit name="size" min="32x32" max="2048x2048" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-16384" />
+            <Limit name="blocks-per-second" min="1" max="979200" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-1920x1080" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="can-swap-width-height" value="1" />
+            <Feature name="vq-minimum-quality"/>
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.h263.encoder" type="video/3gpp">
+            <Limit name="size" min="32x32" max="2048x1152" />
+            <Limit name="alignment" value="4x4" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-9216" />
+            <Limit name="blocks-per-second" min="1" max="979200" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-1920x1080" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="vq-minimum-quality"/>
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp8.encoder" type="video/x-vnd.on2.vp8" >
+            <Limit name="size" min="32x32" max="3840x2160" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="16x16" />
+            <Limit name="block-count" range="1-32400" />
+            <Limit name="blocks-per-second" min="1" max="3888000" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="can-swap-width-height" value="1" />
+            <Feature name="vq-minimum-quality"/>
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp9.encoder" type="video/x-vnd.on2.vp9" >
+            <Limit name="size" min="64x64" max="3840x2176" />
+            <Limit name="alignment" value="2x2" />
+            <Limit name="block-size" value="64x64" />
+            <Limit name="block-count" range="1-2025" />
+            <Limit name="blocks-per-second" min="1" max="243000" />
+            <Limit name="bitrate" range="1-80000000" />
+            <Limit name="performance-point-1280x720" range="240" />
+            <Limit name="performance-point-3840x2160" range="120" />
+            <Limit name="concurrent-instances" max="16" />
+            <Feature name="can-swap-width-height" value="1" />
+            <Feature name="vq-minimum-quality"/>
+        </MediaCodec>
+    </Encoders>
+</MediaCodecs>
diff --git a/media_codecs_bo_c2.xml b/media_codecs_bo_c2.xml
new file mode 100644
index 0000000..22ad88e
--- /dev/null
+++ b/media_codecs_bo_c2.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2018 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.
+-->
+<MediaCodecs>
+    <Include href="media_codecs_aosp_c2.xml" />
+    <Decoders>
+        <MediaCodec name="c2.google.av1.decoder" type="video/av01">
+          <Limit name="size" min="96x96" max="3840x2160" />
+          <Limit name="alignment" value="2x2" />
+          <Limit name="block-size" value="16x16" />
+          <Limit name="block-count" range="36-32400" />
+          <Limit name="blocks-per-second" min="24" max="1944000" />
+          <Limit name="bitrate" range="1-120000000" />
+          <Limit name="frame-rate" range="1-180" />
+          <Limit name="concurrent-instances" max="16" />
+          <Limit name="performance-point-1280x720" value="180" />
+          <Limit name="performance-point-1920x1080" value="120" />
+          <Limit name="performance-point-3840x2160" value="60" />
+          <Feature name="adaptive-playback" />
+          <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+        <MediaCodec name="c2.google.av1.decoder.secure" type="video/av01">
+          <Limit name="size" min="96x96" max="3840x2160" />
+          <Limit name="alignment" value="2x2" />
+          <Limit name="block-size" value="16x16" />
+          <Limit name="block-count" range="36-32400" />
+          <Limit name="blocks-per-second" min="24" max="1944000" />
+          <Limit name="bitrate" range="1-120000000" />
+          <Limit name="frame-rate" range="1-180" />
+          <Limit name="concurrent-instances" max="16" />
+          <Limit name="performance-point-1280x720" value="180" />
+          <Limit name="performance-point-1920x1080" value="120" />
+          <Limit name="performance-point-3840x2160" value="60" />
+          <Feature name="adaptive-playback" />
+          <Feature name="secure-playback" required="true" />
+          <Feature name="can-swap-width-height" value="1" />
+        </MediaCodec>
+    </Decoders>
+</MediaCodecs>
diff --git a/media_codecs_performance.xml b/media_codecs_performance.xml
new file mode 100644
index 0000000..9cb4210
--- /dev/null
+++ b/media_codecs_performance.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2016 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.
+-->
+
+<MediaCodecs>
+</MediaCodecs>
diff --git a/media_codecs_performance_c2.xml b/media_codecs_performance_c2.xml
new file mode 100644
index 0000000..a60791c
--- /dev/null
+++ b/media_codecs_performance_c2.xml
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2016 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.
+-->
+
+<MediaCodecs>
+    <Decoders>
+        <MediaCodec name="c2.exynos.h264.decoder" type="video/avc" update="true">
+            <!-- measured 90%:528-534 med:528 N=2 -->
+            <Limit name="measured-frame-rate-320x240" range="528-531" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:550-560 med:551 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="550-555" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:540-561 med:541 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="540-551" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:409-413 med:410 N=2 -->
+            <Limit name="measured-frame-rate-1920x1088" range="409-411" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.h264.decoder.secure" type="video/avc" update="true">
+            <!-- measured 90%:528-534 med:528 N=2 -->
+            <Limit name="measured-frame-rate-320x240" range="528-531" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:550-560 med:551 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="550-555" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:540-561 med:541 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="540-551" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:409-413 med:410 N=2 -->
+            <Limit name="measured-frame-rate-1920x1088" range="409-411" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.hevc.decoder" type="video/hevc" update="true">
+            <!-- measured 90%:529-530 med:529 N=2 -->
+            <Limit name="measured-frame-rate-352x288" range="1150-1250" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:528-530 med:529 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="528-529" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:546-549 med:546 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="546-548" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:547-560 med:547 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="547-553" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:569-574 med:570 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="569-572" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:159-160 med:159 N=2 -->
+            <Limit name="measured-frame-rate-3840x2160" range="159-159" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.hevc.decoder.secure" type="video/hevc" update="true">
+            <!-- measured 90%:529-530 med:529 N=2 -->
+            <Limit name="measured-frame-rate-352x288" range="1150-1250" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:528-530 med:529 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="528-529" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:546-549 med:546 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="546-548" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:547-560 med:547 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="547-553" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:569-574 med:570 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="569-572" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:159-160 med:159 N=2 -->
+            <Limit name="measured-frame-rate-3840x2160" range="159-159" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.mpeg4.decoder" type="video/mp4v-es" update="true">
+            <!-- measured 90%:527-537 med:528 N=2 -->
+            <Limit name="measured-frame-rate-176x144" range="527-532" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:387-391 med:387 N=2 -->
+            <Limit name="measured-frame-rate-480x360" range="387-389" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.h263.decoder" type="video/3gpp" update="true">
+            <!-- measured 90%:521-541 med:521 N=2 -->
+            <Limit name="measured-frame-rate-176x144" range="1300-1400" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:528-540 med:528 N=2 -->
+            <Limit name="measured-frame-rate-352x288" range="528-534" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
+            <!-- measured 90%:451-555 med:452 SLOW N=2 -->
+            <Limit name="measured-frame-rate-320x180" range="451-500" /> <!-- v90%=1.1 -->
+            <!-- measured 90%:486-504 med:486 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="486-495" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:518-566 med:518 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="518-542" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:386-387 med:386 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="386-386" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp9.decoder" type="video/x-vnd.on2.vp9" update="true">
+            <!-- measured 90%:523-536 med:524 N=2 -->
+            <Limit name="measured-frame-rate-320x180" range="523-529" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:503-506 med:504 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="503-505" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:510-518 med:511 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="510-514" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:349-351 med:350 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="349-350" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:100-101 med:100 N=2 -->
+            <Limit name="measured-frame-rate-3840x2160" range="100-100" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp9.decoder.secure" type="video/x-vnd.on2.vp9" update="true">
+            <!-- measured 90%:523-536 med:524 N=2 -->
+            <Limit name="measured-frame-rate-320x180" range="523-529" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:503-506 med:504 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="503-505" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:510-518 med:511 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="510-514" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:349-351 med:350 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="349-350" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:100-101 med:100 N=2 -->
+            <Limit name="measured-frame-rate-3840x2160" range="100-100" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+
+        <MediaCodec name="c2.android.h263.decoder" type="video/3gpp" update="true">
+            <Limit name="measured-frame-rate-176x144" range="849-1283" /> <!-- v90%=1.2 -->
+            <Limit name="measured-frame-rate-352x288" range="766-822" /> <!-- v90%=1.1 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.avc.decoder" type="video/avc" update="true">
+            <!-- measured 90%:342-360 med:343 N=2 -->
+            <Limit name="measured-frame-rate-320x240" range="342-351" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:142-147 med:143 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="142-145" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:54-56 med:55 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="54-55" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:25-26 med:26 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="25-26" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.hevc.decoder" type="video/hevc" update="true">
+            <Limit name="measured-frame-rate-352x288" range="583-674" /> <!-- N=20 v90%=1.0 -->
+            <Limit name="measured-frame-rate-640x360" range="337-352" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-720x480" range="312-324" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-1280x720" range="104-108" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-1920x1080" range="54-56" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.mpeg4.decoder" type="video/mp4v-es" update="true">
+            <Limit name="measured-frame-rate-176x144" range="846-1244" /> <!-- v90%=1.2 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
+            <Limit name="measured-frame-rate-320x180" range="873-1013" /> <!-- v90%=1.1 -->
+            <Limit name="measured-frame-rate-640x360" range="394-455" /> <!-- N=20 v90%=1.0 -->
+            <Limit name="measured-frame-rate-1280x720" range="105-109" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-1920x1080" range="38-41" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.vp9.decoder" type="video/x-vnd.on2.vp9" update="true">
+            <!-- measured 90%:440-463 med:441 N=2 -->
+            <Limit name="measured-frame-rate-320x180" range="440-452" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:232-234 med:233 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="232-233" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:63-64 med:63 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="63-63" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:39-40 med:39 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="39-40" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.google.av1.decoder" type="video/av01" update="true">
+            <!-- measured 90%:295-301 med:296 N=2 -->
+            <Limit name="measured-frame-rate-352x288" range="295-298" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:196-207 med:196 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="196-201" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:177-180 med:178 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="177-178" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:81-82 med:82 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="81-82" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:45-47 med:46 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="45-46" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.google.av1.decoder.secure" type="video/av01" update="true">
+            <!-- measured 90%:295-301 med:296 N=2 -->
+            <Limit name="measured-frame-rate-352x288" range="295-298" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:196-207 med:196 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="196-201" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:177-180 med:178 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="177-178" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:81-82 med:82 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="81-82" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:45-47 med:46 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="45-46" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+    </Decoders>
+
+    <Encoders>
+        <MediaCodec name="c2.exynos.h264.encoder" type="video/avc" update="true">
+            <!-- measured 90%:482-560 med:483 N=2 -->
+            <Limit name="measured-frame-rate-320x240" range="482-520" /> <!-- v90%=1.1 -->
+            <!-- measured 90%:301-313 med:302 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="301-307" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:181-201 med:181 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="181-190" /> <!-- v90%=1.1 -->
+            <!-- measured 90%:98-100 med:99 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="98-99" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.hevc.encoder" type="video/hevc" update="true">
+            <!-- measured 90%:589-597 med:589 N=2 -->
+            <Limit name="measured-frame-rate-320x240" range="589-593" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:291-304 med:292 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="291-298" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:195-201 med:196 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="195-198" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:94-96 med:95 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="94-95" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.mpeg4.encoder" type="video/mp4v-es" update="true">
+            <Limit name="measured-frame-rate-176x144" range="280-451" /> <!-- v90%=1.1 -->
+            <Limit name="measured-frame-rate-352x288" range="214-396" /> <!-- v90%=1.1 -->
+            <Limit name="measured-frame-rate-640x480" range="121-159" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.h263.encoder" type="video/3gpp" update="true">
+            <Limit name="measured-frame-rate-176x144" range="273-405" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-352x288" range="250-320" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-704x576" range="120-176" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
+            <!-- measured 90%:478-498 med:479 N=2 -->
+            <Limit name="measured-frame-rate-320x180" range="478-488" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:334-347 med:334 N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="334-341" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:142-143 med:142 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="142-142" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:69-70 med:69 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="69-69" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.exynos.vp9.encoder" type="video/x-vnd.on2.vp9" update="true">
+            <!-- measured 90%:474-485 med:474 N=2 -->
+            <Limit name="measured-frame-rate-320x180" range="474-479" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:192-267 med:193 SLOW N=2 -->
+            <Limit name="measured-frame-rate-640x360" range="192-227" /> <!-- v90%=1.2 -->
+            <!-- measured 90%:95-96 med:96 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="95-96" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:84-86 med:85 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="84-85" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+
+        <MediaCodec name="c2.android.h263.encoder" type="video/3gpp" update="true">
+            <!-- measured 90%:440-443 med:440 N=2 -->
+            <Limit name="measured-frame-rate-176x144" range="440-441" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.avc.encoder" type="video/avc" update="true">
+            <!-- measured 90%:345-350 med:345 N=2 -->
+            <Limit name="measured-frame-rate-320x240" range="345-347" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:101-103 med:101 N=2 -->
+            <Limit name="measured-frame-rate-720x480" range="101-102" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:54-55 med:54 N=2 -->
+            <Limit name="measured-frame-rate-1280x720" range="54-54" /> <!-- v90%=1.0 -->
+            <!-- measured 90%:28-30 med:29 N=2 -->
+            <Limit name="measured-frame-rate-1920x1080" range="28-29" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.hevc.encoder" type="video/hevc" update="true">
+            <!-- measured 90%:61-65 med:62 N=8 -->
+            <Limit name="measured-frame-rate-320x240" range="62-63" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.mpeg4.encoder" type="video/mp4v-es" update="true">
+            <!-- measured 90%:461-471 med:462 N=2 -->
+            <Limit name="measured-frame-rate-176x144" range="461-466" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+        <MediaCodec name="c2.android.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
+            <Limit name="measured-frame-rate-320x180" range="183-284" /> <!-- v90%=1.3 -->
+            <Limit name="measured-frame-rate-640x360" range="74-134" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-1280x720" range="34-38" /> <!-- v90%=1.0 -->
+            <Limit name="measured-frame-rate-1920x1080" range="29-31" /> <!-- v90%=1.0 -->
+        </MediaCodec>
+    </Encoders>
+</MediaCodecs>
diff --git a/media_profiles.xml b/media_profiles.xml
new file mode 100644
index 0000000..cc6e3f4
--- /dev/null
+++ b/media_profiles.xml
@@ -0,0 +1,895 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+<!DOCTYPE MediaSettings [
+<!ELEMENT MediaSettings (CamcorderProfiles,
+                         EncoderOutputFileFormat+,
+                         VideoEncoderCap+,
+                         AudioEncoderCap+,
+                         VideoDecoderCap,
+                         AudioDecoderCap)>
+<!ELEMENT CamcorderProfiles (EncoderProfile+, ImageEncoding+, ImageDecoding, Camera)>
+<!ELEMENT EncoderProfile (Video, Audio)>
+<!ATTLIST EncoderProfile quality (high|low) #REQUIRED>
+<!ATTLIST EncoderProfile fileFormat (mp4|3gp) #REQUIRED>
+<!ATTLIST EncoderProfile duration (30|60) #REQUIRED>
+<!ELEMENT Video EMPTY>
+<!ATTLIST Video codec (h264|h263|m4v) #REQUIRED>
+<!ATTLIST Video bitRate CDATA #REQUIRED>
+<!ATTLIST Video width CDATA #REQUIRED>
+<!ATTLIST Video height CDATA #REQUIRED>
+<!ATTLIST Video frameRate CDATA #REQUIRED>
+<!ELEMENT Audio EMPTY>
+<!ATTLIST Audio codec (amrnb|amrwb|aac) #REQUIRED>
+<!ATTLIST Audio bitRate CDATA #REQUIRED>
+<!ATTLIST Audio sampleRate CDATA #REQUIRED>
+<!ATTLIST Audio channels (1|2) #REQUIRED>
+<!ELEMENT ImageEncoding EMPTY>
+<!ATTLIST ImageEncoding quality (90|80|70|60|50|40) #REQUIRED>
+<!ELEMENT ImageDecoding EMPTY>
+<!ATTLIST ImageDecoding memCap CDATA #REQUIRED>
+<!ELEMENT Camera EMPTY>
+<!ATTLIST Camera previewFrameRate CDATA #REQUIRED>
+<!ELEMENT EncoderOutputFileFormat EMPTY>
+<!ATTLIST EncoderOutputFileFormat name (mp4|3gp) #REQUIRED>
+<!ELEMENT VideoEncoderCap EMPTY>
+<!ATTLIST VideoEncoderCap name (h264|h263|m4v|wmv) #REQUIRED>
+<!ATTLIST VideoEncoderCap enabled (true|false) #REQUIRED>
+<!ATTLIST VideoEncoderCap minBitRate CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxBitRate CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap minFrameWidth CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxFrameWidth CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap minFrameHeight CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxFrameHeight CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap minFrameRate CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxFrameRate CDATA #REQUIRED>
+<!ELEMENT AudioEncoderCap EMPTY>
+<!ATTLIST AudioEncoderCap name (amrnb|amrwb|aac|wma) #REQUIRED>
+<!ATTLIST AudioEncoderCap enabled (true|false) #REQUIRED>
+<!ATTLIST AudioEncoderCap minBitRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap maxBitRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap minSampleRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap maxSampleRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap minChannels (1|2) #REQUIRED>
+<!ATTLIST AudioEncoderCap maxChannels (1|2) #REQUIRED>
+<!ELEMENT VideoDecoderCap EMPTY>
+<!ATTLIST VideoDecoderCap name (wmv) #REQUIRED>
+<!ATTLIST VideoDecoderCap enabled (true|false) #REQUIRED>
+<!ELEMENT AudioDecoderCap EMPTY>
+<!ATTLIST AudioDecoderCap name (wma) #REQUIRED>
+<!ATTLIST AudioDecoderCap enabled (true|false) #REQUIRED>
+]>
+<!--
+     This file is used to declare the multimedia profiles and capabilities
+     on an android-powered device.
+-->
+<MediaSettings>
+    <!-- Each camcorder profile defines a set of predefined configuration parameters -->
+    <CamcorderProfiles cameraId="0">
+
+        <EncoderProfile quality="2160p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="3840"
+                   height="2160"
+                   frameRate="60" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="60" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse2160p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="3840"
+                   height="2160"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="highspeed1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="42000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="240" />
+
+            <!-- audio setting is ignored -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="48000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <ImageEncoding quality="90" />
+        <ImageEncoding quality="80" />
+        <ImageEncoding quality="70" />
+        <ImageDecoding memCap="20000000" />
+
+    </CamcorderProfiles>
+
+       <CamcorderProfiles cameraId="1">
+
+        <EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+        <EncoderProfile quality="480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <ImageEncoding quality="90" />
+        <ImageEncoding quality="80" />
+        <ImageEncoding quality="70" />
+        <ImageDecoding memCap="20000000" />
+
+      </CamcorderProfiles>
+
+       <CamcorderProfiles cameraId="2">
+
+        <EncoderProfile quality="2160p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="3840"
+                   height="2160"
+                   frameRate="60" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+        <EncoderProfile quality="480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="highspeed1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="42000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="240" />
+
+            <!-- audio setting is ignored -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="48000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <ImageEncoding quality="90" />
+        <ImageEncoding quality="80" />
+        <ImageEncoding quality="70" />
+        <ImageDecoding memCap="20000000" />
+
+    </CamcorderProfiles>
+
+       <CamcorderProfiles cameraId="3">
+
+        <EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+        <EncoderProfile quality="480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <ImageEncoding quality="90" />
+        <ImageEncoding quality="80" />
+        <ImageEncoding quality="70" />
+        <ImageDecoding memCap="20000000" />
+
+    </CamcorderProfiles>
+
+       <CamcorderProfiles cameraId="4">
+
+        <EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+        <EncoderProfile quality="480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <ImageEncoding quality="90" />
+        <ImageEncoding quality="80" />
+        <ImageEncoding quality="70" />
+        <ImageDecoding memCap="20000000" />
+
+    </CamcorderProfiles>
+
+    <CamcorderProfiles cameraId="5">
+
+        <EncoderProfile quality="2160p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="3840"
+                   height="2160"
+                   frameRate="60" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse2160p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="3840"
+                   height="2160"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="highspeed1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="42000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="240" />
+
+            <!-- audio setting is ignored -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="48000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <ImageEncoding quality="90" />
+        <ImageEncoding quality="80" />
+        <ImageEncoding quality="70" />
+        <ImageDecoding memCap="20000000" />
+
+    </CamcorderProfiles>
+
+       <CamcorderProfiles cameraId="6">
+
+        <EncoderProfile quality="1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+        <EncoderProfile quality="480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="12000000"
+                   width="1920"
+                   height="1080"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="8000000"
+                   width="1280"
+                   height="720"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="60">
+            <Video codec="h264"
+                   bitRate="3000000"
+                   width="720"
+                   height="480"
+                   frameRate="30" />
+
+            <!-- Audio settings are not used for timealpse video recording -->
+            <Audio codec="aac"
+                   bitRate="96000"
+                   sampleRate="16000"
+                   channels="1" />
+        </EncoderProfile>
+
+        <ImageEncoding quality="90" />
+        <ImageEncoding quality="80" />
+        <ImageEncoding quality="70" />
+        <ImageDecoding memCap="20000000" />
+
+      </CamcorderProfiles>
+
+
+
+    <EncoderOutputFileFormat name="3gp" />
+    <EncoderOutputFileFormat name="mp4" />
+
+    <!--
+         If a codec is not enabled, it is invisible to the applications
+         In other words, the applications won't be able to use the codec
+         or query the capabilities of the codec at all if it is disabled
+    -->
+
+    <!--
+         FIXME : we only check Mpeg4 encorder cap and other codec doesn't check
+                 codec cap
+    -->
+    <VideoEncoderCap name="h264" enabled="true"
+        minBitRate="64000" maxBitRate="12000000"
+        minFrameWidth="128" maxFrameWidth="3840"
+        minFrameHeight="96" maxFrameHeight="2160"
+        minFrameRate="15" maxFrameRate="30" />
+
+    <VideoEncoderCap name="h263" enabled="true"
+        minBitRate="64000" maxBitRate="1000000"
+        minFrameWidth="128" maxFrameWidth="1920"
+        minFrameHeight="96" maxFrameHeight="1080"
+        minFrameRate="15" maxFrameRate="30" />
+
+    <VideoEncoderCap name="m4v" enabled="true"
+        minBitRate="64000" maxBitRate="2000000"
+        minFrameWidth="128" maxFrameWidth="1920"
+        minFrameHeight="96" maxFrameHeight="1080"
+        minFrameRate="15" maxFrameRate="30" />
+
+    <AudioEncoderCap name="aac" enabled="true"
+        minBitRate="758" maxBitRate="288000"
+        minSampleRate="8000" maxSampleRate="48000"
+        minChannels="1" maxChannels="1" />
+
+    <AudioEncoderCap name="heaac" enabled="true"
+        minBitRate="8000" maxBitRate="64000"
+        minSampleRate="16000" maxSampleRate="48000"
+        minChannels="1" maxChannels="1" />
+
+    <AudioEncoderCap name="aaceld" enabled="true"
+        minBitRate="16000" maxBitRate="192000"
+        minSampleRate="16000" maxSampleRate="48000"
+        minChannels="1" maxChannels="1" />
+
+    <AudioEncoderCap name="amrwb" enabled="true"
+        minBitRate="6600" maxBitRate="23050"
+        minSampleRate="16000" maxSampleRate="16000"
+        minChannels="1" maxChannels="1" />
+
+    <AudioEncoderCap name="amrnb" enabled="true"
+        minBitRate="5525" maxBitRate="12200"
+        minSampleRate="8000" maxSampleRate="8000"
+        minChannels="1" maxChannels="1" />
+
+    <!--
+        FIXME:
+        We do not check decoder capabilities at present
+        At present, we only check whether windows media is visible
+        for TEST applications. For other applications, we do
+        not perform any checks at all.
+    -->
+    <VideoDecoderCap name="wmv" enabled="false"/>
+    <AudioDecoderCap name="wma" enabled="false"/>
+</MediaSettings>
diff --git a/modem/user.mk b/modem/user.mk
new file mode 100644
index 0000000..81f3773
--- /dev/null
+++ b/modem/user.mk
@@ -0,0 +1,2 @@
+PRODUCT_PACKAGES += dmd
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/modem/user
diff --git a/modem/userdebug.mk b/modem/userdebug.mk
new file mode 100644
index 0000000..87697a7
--- /dev/null
+++ b/modem/userdebug.mk
@@ -0,0 +1,2 @@
+PRODUCT_PACKAGES += vcd
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/modem/userdebug/
diff --git a/neuralnetwork/neuralnetwork.mk b/neuralnetwork/neuralnetwork.mk
new file mode 100644
index 0000000..1533d2a
--- /dev/null
+++ b/neuralnetwork/neuralnetwork.mk
@@ -0,0 +1,2 @@
+PRODUCT_PACKAGES += android.hardware.neuralnetworks@1.3-service-armnn
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/neuralnetworks/
diff --git a/nfc/libese-hal-st.conf b/nfc/libese-hal-st.conf
new file mode 100644
index 0000000..1954bf7
--- /dev/null
+++ b/nfc/libese-hal-st.conf
@@ -0,0 +1,6 @@
+########################### Start of libese-hal-st.conf ###########################
+###############################################################################
+###############################################################################
+# ST HAL trace log level
+STESE_HAL_LOGLEVEL=1
+ST_ESE_DEV_NODE="/dev/st54j_se"
diff --git a/nfc/libnfc-hal-st-gs101.conf b/nfc/libnfc-hal-st-gs101.conf
new file mode 100644
index 0000000..2b455df
--- /dev/null
+++ b/nfc/libnfc-hal-st-gs101.conf
@@ -0,0 +1,152 @@
+########################### Start of libnf-hal-st_aosp.conf ###########################
+
+###############################################################################
+###############################################################################
+# ST HAL trace log level
+STNFC_HAL_LOGLEVEL=4
+NFC_DEBUG_ENABLED=1
+
+###############################################################################
+# Vendor specific mode to enable FW (RF & SWP) traces.
+STNFC_FW_DEBUG_ENABLED=0
+
+###############################################################################
+# File used for NFA storage
+NFA_STORAGE="/data/nfc"
+
+###############################################################################
+# Dev Node used for ST HAL
+ST_NFC_DEV_NODE="/dev/st_no_such_device"
+
+###############################################################################
+# Keep the nfa storage file.
+PRESERVE_STORAGE=1
+
+###############################################################################
+# In Switch OFF mode (phone switched-off), specify the desired CE mode to
+# the controller.
+# 0: No card-emulation; DEFAULT
+# 1: Switch-off card-emulation enabled
+CE_ON_SWITCH_OFF_STATE=1
+
+###############################################################################
+# Vendor specific mode to support the USB charging mode if VPSIO=1 in switch off.
+STNFC_USB_CHARGING_MODE=1
+
+###############################################################################
+# Vendor Specific Proprietary Protocol & Discovery Configuration
+# Set to 0xFF if unsupported
+#  byte[0] NCI_PROTOCOL_18092_ACTIVE
+#  byte[1] NCI_PROTOCOL_B_PRIME
+#  byte[2] NCI_PROTOCOL_DUAL
+#  byte[3] NCI_PROTOCOL_15693
+#  byte[4] NCI_PROTOCOL_KOVIO
+#  byte[5] NCI_PROTOCOL_MIFARE
+#  byte[6] NCI_DISCOVERY_TYPE_POLL_KOVIO
+#  byte[7] NCI_DISCOVERY_TYPE_POLL_B_PRIME
+#  byte[8] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
+NFA_PROPRIETARY_CFG={05:FF:FF:06:8A:90:77:FF:FF}
+
+###############################################################################
+# Choose the presence-check algorithm for type-4 tag.  If not defined,
+# the default value is 1.
+# 0  NFA_RW_PRES_CHK_DEFAULT; Let stack selects an algorithm
+# 1  NFA_RW_PRES_CHK_I_BLOCK; ISO-DEP protocol's empty I-block
+# 2  NFA_RW_PRES_CHK_RESET; Deactivate to Sleep, then re-activate
+# 3  NFA_RW_PRES_CHK_RB_CH0; Type-4 tag protocol's ReadBinary command on channel 0
+# 4  NFA_RW_PRES_CHK_RB_CH3; Type-4 tag protocol's ReadBinary command on channel 3
+# 5  NFA_RW_PRES_CHK_ISO_DEP_NAK; presence check command ISO-DEP NAK as per NCI2.0
+PRESENCE_CHECK_ALGORITHM=5
+
+###############################################################################
+# Name of the NCI HAL module to use
+# If unset, falls back to nfc_nci.bcm2079x
+NCI_HAL_MODULE="nfc_nci.st21nfc"
+
+###############################################################################
+# White list to be set at startup.
+DEVICE_HOST_WHITE_LIST={02:C0}
+
+###############################################################################
+# BAIL OUT value for P2P
+# Implements algorithm for NFC-DEP protocol priority over ISO-DEP protocol.
+POLL_BAIL_OUT_MODE=1
+
+###############################################################################
+# Extended APDU length for ISO_DEP
+ISO_DEP_MAX_TRANSCEIVE=0xFEFF
+
+###############################################################################
+# Configure the NFC Extras to open and use a static pipe.  If the value is
+# not set or set to 0, then the default is use a dynamic pipe based on a
+# destination gate (see NFA_HCI_DEFAULT_DEST_GATE).  Note there is a value
+# for each EE (ESE/SIM)
+OFF_HOST_ESE_PIPE_ID=0x5E
+OFF_HOST_SIM_PIPE_ID=0x3E
+
+###############################################################################
+#Set the default Felica T3T System Code OffHost route Location :
+#This settings will be used when application does not set this parameter
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_SYS_CODE_ROUTE=0x86
+
+###############################################################################
+#Set the Felica T3T System Code supported power state:
+DEFAULT_SYS_CODE_PWR_STATE=0x3B
+
+###############################################################################
+# Path and Files used for FW update binaries storage
+STNFC_FW_PATH_STORAGE="/vendor/firmware"
+STNFC_FW_BIN_NAME="/st54j_fw.bin"
+STNFC_FW_CONF_NAME="/st54j_conf.bin"
+
+###############################################################################
+# Default off-host route for Felica.
+# This settings will be used when application does not set this parameter
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_NFCF_ROUTE=0x86
+
+###############################################################################
+# Configure the default off-host route.
+# used for technology A and B routing
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_OFFHOST_ROUTE=0x81
+
+###############################################################################
+# Configure the default AID route.
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_ROUTE=0x00
+
+###############################################################################
+# Configure the NFCEEIDs of offhost UICC.
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+OFFHOST_ROUTE_UICC={81}
+
+###############################################################################
+# Configure the NFCEEIDs of offhost eSEs.
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+OFFHOST_ROUTE_ESE={86}
+
+###############################################################################
+# Configure the list of NFCEE for the ISO-DEP routing.
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_ISODEP_ROUTE=0x81
+
+###############################################################################
+# Core configuration settings
+CORE_CONF_PROP={ 20, 02, 0a, 03,
+        a1, 01, 1e,
+        a2, 01, 19,
+        80, 01, 01
+}
+
+
diff --git a/nfc/libnfc-hal-st.conf b/nfc/libnfc-hal-st.conf
new file mode 100644
index 0000000..3774dcf
--- /dev/null
+++ b/nfc/libnfc-hal-st.conf
@@ -0,0 +1,148 @@
+########################### Start of libnf-hal-st_aosp.conf ###########################
+
+###############################################################################
+###############################################################################
+# ST HAL trace log level
+STNFC_HAL_LOGLEVEL=1
+NFC_DEBUG_ENABLED=1
+
+###############################################################################
+# Vendor specific mode to enable FW (RF & SWP) traces.
+STNFC_FW_DEBUG_ENABLED=0
+
+###############################################################################
+# File used for NFA storage
+NFA_STORAGE="/data/nfc"
+
+###############################################################################
+# Keep the nfa storage file.
+PRESERVE_STORAGE=1
+
+###############################################################################
+# In Switch OFF mode (phone switched-off), specify the desired CE mode to
+# the controller.
+# 0: No card-emulation; DEFAULT
+# 1: Switch-off card-emulation enabled
+CE_ON_SWITCH_OFF_STATE=1
+
+###############################################################################
+# Vendor specific mode to support the USB charging mode if VPSIO=1 in switch off.
+STNFC_USB_CHARGING_MODE=1
+
+###############################################################################
+# Vendor Specific Proprietary Protocol & Discovery Configuration
+# Set to 0xFF if unsupported
+#  byte[0] NCI_PROTOCOL_18092_ACTIVE
+#  byte[1] NCI_PROTOCOL_B_PRIME
+#  byte[2] NCI_PROTOCOL_DUAL
+#  byte[3] NCI_PROTOCOL_15693
+#  byte[4] NCI_PROTOCOL_KOVIO
+#  byte[5] NCI_PROTOCOL_MIFARE
+#  byte[6] NCI_DISCOVERY_TYPE_POLL_KOVIO
+#  byte[7] NCI_DISCOVERY_TYPE_POLL_B_PRIME
+#  byte[8] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
+NFA_PROPRIETARY_CFG={05:FF:FF:06:8A:90:77:FF:FF}
+
+###############################################################################
+# Choose the presence-check algorithm for type-4 tag.  If not defined,
+# the default value is 1.
+# 0  NFA_RW_PRES_CHK_DEFAULT; Let stack selects an algorithm
+# 1  NFA_RW_PRES_CHK_I_BLOCK; ISO-DEP protocol's empty I-block
+# 2  NFA_RW_PRES_CHK_RESET; Deactivate to Sleep, then re-activate
+# 3  NFA_RW_PRES_CHK_RB_CH0; Type-4 tag protocol's ReadBinary command on channel 0
+# 4  NFA_RW_PRES_CHK_RB_CH3; Type-4 tag protocol's ReadBinary command on channel 3
+# 5  NFA_RW_PRES_CHK_ISO_DEP_NAK; presence check command ISO-DEP NAK as per NCI2.0
+PRESENCE_CHECK_ALGORITHM=5
+
+###############################################################################
+# Name of the NCI HAL module to use
+# If unset, falls back to nfc_nci.bcm2079x
+NCI_HAL_MODULE="nfc_nci.st21nfc"
+
+###############################################################################
+# White list to be set at startup.
+DEVICE_HOST_WHITE_LIST={02:C0}
+
+###############################################################################
+# BAIL OUT value for P2P
+# Implements algorithm for NFC-DEP protocol priority over ISO-DEP protocol.
+POLL_BAIL_OUT_MODE=1
+
+###############################################################################
+# Extended APDU length for ISO_DEP
+ISO_DEP_MAX_TRANSCEIVE=0xFEFF
+
+###############################################################################
+# Configure the NFC Extras to open and use a static pipe.  If the value is
+# not set or set to 0, then the default is use a dynamic pipe based on a
+# destination gate (see NFA_HCI_DEFAULT_DEST_GATE).  Note there is a value
+# for each EE (ESE/SIM)
+OFF_HOST_ESE_PIPE_ID=0x5E
+OFF_HOST_SIM_PIPE_ID=0x3E
+
+###############################################################################
+#Set the default Felica T3T System Code OffHost route Location :
+#This settings will be used when application does not set this parameter
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_SYS_CODE_ROUTE=0x86
+
+###############################################################################
+#Set the Felica T3T System Code supported power state:
+DEFAULT_SYS_CODE_PWR_STATE=0x3B
+
+###############################################################################
+# Path and Files used for FW update binaries storage
+STNFC_FW_PATH_STORAGE="/vendor/firmware"
+STNFC_FW_BIN_NAME="/st54j_fw.bin"
+STNFC_FW_CONF_NAME="/st54j_conf.bin"
+
+###############################################################################
+# Default off-host route for Felica.
+# This settings will be used when application does not set this parameter
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_NFCF_ROUTE=0x86
+
+###############################################################################
+# Configure the default off-host route.
+# used for technology A and B routing
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_OFFHOST_ROUTE=0x81
+
+###############################################################################
+# Configure the default AID route.
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_ROUTE=0x00
+
+###############################################################################
+# Configure the NFCEEIDs of offhost UICC.
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+OFFHOST_ROUTE_UICC={81}
+
+###############################################################################
+# Configure the NFCEEIDs of offhost eSEs.
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+OFFHOST_ROUTE_ESE={86}
+
+###############################################################################
+# Configure the list of NFCEE for the ISO-DEP routing.
+# host  0x00
+# eSE   0x82 (eSE),    0x86 (eUICC/SPI-SE)
+# UICC  0x81 (UICC_1), 0x85 (UICC_2)
+DEFAULT_ISODEP_ROUTE=0x81
+
+###############################################################################
+# Core configuration settings
+CORE_CONF_PROP={ 20, 02, 0a, 03,
+        a1, 01, 1e,
+        a2, 01, 19,
+        80, 01, 01
+}
+
+
diff --git a/nfc/libse-gto-hal.conf b/nfc/libse-gto-hal.conf
new file mode 100644
index 0000000..f4e443d
--- /dev/null
+++ b/nfc/libse-gto-hal.conf
@@ -0,0 +1,2 @@
+#Gemalto SPI devnode
+GTO_DEV=/dev/st54spi;
diff --git a/nfc/libse-gto-hal2.conf b/nfc/libse-gto-hal2.conf
new file mode 100644
index 0000000..13ecd54
--- /dev/null
+++ b/nfc/libse-gto-hal2.conf
@@ -0,0 +1,2 @@
+#Gemalto SPI devnode
+GTO_DEV=/dev/st33spi;
diff --git a/nfc/manifest_se_gs101.xml b/nfc/manifest_se_gs101.xml
new file mode 100644
index 0000000..39fe63e
--- /dev/null
+++ b/nfc/manifest_se_gs101.xml
@@ -0,0 +1,7 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.secure_element</name>
+        <transport>hwbinder</transport>
+        <fqname>@1.2::ISecureElement/eSE1</fqname>
+    </hal>
+</manifest>
diff --git a/overlay-factory/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay-factory/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
new file mode 100644
index 0000000..3f3258f
--- /dev/null
+++ b/overlay-factory/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2009, 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>
+    <!-- Don't enable BT until user wants it -->
+    <bool name="def_bluetooth_on">false</bool>
+</resources>
+
diff --git a/overlay-factory/vendor/google/apps/PixelLogger/res/values/arrays.xml b/overlay-factory/vendor/google/apps/PixelLogger/res/values/arrays.xml
new file mode 100644
index 0000000..20a8365
--- /dev/null
+++ b/overlay-factory/vendor/google/apps/PixelLogger/res/values/arrays.xml
@@ -0,0 +1,7 @@
+<resources>
+    <string-array name="logger_entries">
+        <item>shannondm</item>
+        <item>cnss_diag</item>
+        <item>brcm_gps</item>
+    </string-array>
+</resources>
diff --git a/overlay-factory/vendor/google/apps/PixelLogger/res/values/config.xml b/overlay-factory/vendor/google/apps/PixelLogger/res/values/config.xml
new file mode 100644
index 0000000..ee2e1e8
--- /dev/null
+++ b/overlay-factory/vendor/google/apps/PixelLogger/res/values/config.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="config_logger_default_value" translatable="false">shannondm</string>
+    <string name="config_cfg_default_value" translatable="false">Built-in Mask #1</string>
+
+    <!-- default config file for cnss_diag logger -->
+    <string name="config_cfg_default_value_cnss_diag" translatable="false">cnss_diag.conf</string>
+    <!-- config file to enable brcm gps logger -->
+    <bool name="config_brcm_gps_enabled" translatable="false">true</bool>
+</resources>
diff --git a/overlay-factory/vendor/google/apps/PixelLogger/res/values/configmessages.xml b/overlay-factory/vendor/google/apps/PixelLogger/res/values/configmessages.xml
new file mode 100644
index 0000000..578cfc5
--- /dev/null
+++ b/overlay-factory/vendor/google/apps/PixelLogger/res/values/configmessages.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+  <string-array name="config_message_no_message">
+    <item></item>
+  </string-array>
+  <string-array name="config_message_audio_warning">
+    <item>This will collect audio from your voice calls. Would you like to proceed?</item>
+  </string-array>
+  <string-array name="config_message_possible_audio_warning">
+    <item>This may collect audio from your voice calls. Would you like to proceed?</item>
+    <item>Pixel_Default.nprf</item>
+    <item>Built-in Mask #0</item>
+    <item>Built-in Mask #1</item>
+    <item>Built-in Mask #2</item>
+    <item>Built-in Mask #3</item>
+  </string-array>
+  <string name="config_privacy_warning_title">Privacy Warning</string>
+  <string name="default_config_selection_message">You are loading a user defined logging config. This may collect audio from your voice calls. Would you like to proceed?</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/ModemService/res/values/config.xml b/overlay-vendor/vendor/google/apps/ModemService/res/values/config.xml
new file mode 100644
index 0000000..7266f91
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/ModemService/res/values/config.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- Antenna tuning by USB status -->
+    <bool name="config_tuner_by_usb">false</bool>
+    <integer name="config_proximity_values_usb_connected">1</integer>
+    <integer name="config_proximity_values_usb_disconnected">0</integer>
+
+    <!-- SAR cutback -->
+    <integer name="config_sar_comp_key">0</integer>
+    <integer name="config_sar_state_default">3</integer>
+
+    <!-- SAR cutback by USB device -->
+    <bool name="config_sar_by_usb_device">false</bool>
+    <string-array name="config_sar_usb_devices">
+        <!--
+        <item>6353,20521,Google,USB-C to 3.5mm-Headphone Adapter</item>
+         -->
+    </string-array>
+    <integer name="config_sar_state_usb_connected">3</integer>
+    <integer name="config_sar_state_usb_device_matched">4</integer>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/PixelLogger/res/values/arrays.xml b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/arrays.xml
new file mode 100644
index 0000000..79f0587
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/arrays.xml
@@ -0,0 +1,6 @@
+<resources>
+    <string-array name="logger_entries">
+        <item>qxdm</item>
+        <item>cnss_diag</item>
+    </string-array>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/PixelLogger/res/values/config.xml b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/config.xml
new file mode 100644
index 0000000..80c0abe
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/config.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+<!-- default config file for cnss_diag logger -->
+    <string name="config_cfg_default_value_cnss_diag" translatable="false">cnss_diag.conf</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-ldrtl/deferred_setup_closing_img.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-ldrtl/deferred_setup_closing_img.xml
new file mode 100644
index 0000000..983fc64
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-ldrtl/deferred_setup_closing_img.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="280dp"
+    android:height="280dp"
+    android:viewportWidth="228.0"
+    android:viewportHeight="228.0">
+    <path android:fillColor="#F7F8F9"
+        android:pathData="M114,114m-113,0a113,113 0,1 1,226 0a113,113 0,1 1,-226 0" />
+    <path android:fillColor="#78909C"
+        android:pathData="M204.11,178.51l-5.83,0.32l0.34,11.57c-0.71,0.18 -1.93,0.47 -2.13,0.65c-0.29,0.26 3.6,-0.02 3.6,-0.02l-0.09,-0.41l0.88,-9.58l1.91,9.19c-0.6,0.17 -2.17,0.51 -2.41,0.73c-0.29,0.26 3.6,-0.02 3.6,-0.02l0,-0.02l0.05,0L204.11,178.51z" />
+    <path android:fillColor="#A1887F"
+        android:pathData="M193.37,165.38c0,0 -0.45,-1.24 0,-1.35c0.45,-0.11 0.8,0.82 0.8,0.82L193.37,165.38z" />
+    <path android:fillColor="#A1887F"
+        android:pathData="M195.65,172.07c0,0 -0.9,-0.96 -0.53,-1.24s1.06,0.43 1.06,0.43L195.65,172.07z" />
+    <path android:fillColor="#F4B400"
+        android:pathData="M204.03,171.44c-0.76,-2.5 -3.63,-2.86 -3.63,-2.86l-4.58,-0.33l-1.65,-3.4l-1.19,0.79l1.35,3.49c0.23,0.6 0.76,1.02 1.39,1.12l3.69,0.55c-0.2,0.59 -0.39,1.26 -0.51,2c-0.04,0.26 -0.08,0.5 -0.11,0.74l-2.62,-2.27l-0.78,1.2l2.61,2.68c0.16,0.16 0.35,0.28 0.56,0.37c-0.12,1.16 -0.21,2.23 -0.39,3.45l6.29,0.44C204.47,179.4 204.79,173.93 204.03,171.44z" />
+    <path android:fillColor="#A1887F"
+        android:pathData="M200.78,168.91c0,0 0.54,-0.91 0.66,-1.36c0.12,-0.45 0.87,0.21 0.87,0.21s0.12,1.61 0,1.61S200.66,171.47 200.78,168.91z" />
+    <path android:fillColor="#8D6E63"
+        android:pathData="M202.28,167.73c-0.13,-0.11 -0.73,-0.58 -0.84,-0.18c-0.07,0.26 -0.28,0.68 -0.45,0.98C201.46,168.52 201.95,168.22 202.28,167.73z" />
+    <path android:fillColor="#A1887F"
+        android:pathData="M202.37,167.49c-0.45,0.79 -1.3,1.16 -1.91,0.82c0,0 -0.73,-1.26 -0.28,-2.05c0.45,-0.79 1.3,-1.16 1.91,-0.82C202.7,165.78 202.82,166.7 202.37,167.49z" />
+    <path android:fillColor="#231F20"
+        android:pathData="M200.52,165.78c0,0 -0.18,0.33 0.87,0.27c1.04,-0.06 0.82,1.05 0.82,1.05s-0.06,0.51 -0.02,0.68s0.54,-0.11 0.61,-1.05C202.87,165.79 201.93,164.53 200.52,165.78z" />
+    <path android:fillColor="#03A9F4"
+        android:pathData="M201.66,152.98c0,-4.92 -4,-8.91 -8.91,-8.91c-4.92,0 -8.91,3.99 -8.91,8.91c0,4.66 4.25,8.44 8.91,8.44l0,0v3.28C198.15,161.96 201.66,157.54 201.66,152.98z" />
+    <path android:fillColor="#EEEEEE"
+        android:pathData="M192.75,148.06c-1.55,0 -2.81,1.26 -2.81,2.81h1.41c0,-0.78 0.63,-1.41 1.41,-1.41c0.78,0 1.41,0.63 1.41,1.41c0,0.39 -0.16,0.74 -0.41,0.99l-0.87,0.89c-0.44,0.44 -0.87,1.09 -0.87,1.87h1.5c0,-0.43 0.32,-1.05 0.78,-1.5c0.27,-0.27 0.63,-0.67 0.63,-0.67c0.41,-0.4 0.66,-0.97 0.66,-1.58C195.56,149.32 194.3,148.06 192.75,148.06z" />
+    <path android:fillColor="#EEEEEE"
+        android:pathData="M192.75,156.5m-0.94,0a0.94,0.94 0,1 1,1.88 0a0.94,0.94 0,1 1,-1.88 0" />
+    <path android:fillColor="#E8EAED"
+        android:pathData="M147.87,200.12H79.03c-5.32,0 -9.64,-4.31 -9.64,-9.64V28.35c0,-5.32 4.31,-9.64 9.64,-9.64h68.84c5.32,0 9.64,4.31 9.64,9.64v162.14C157.51,195.81 153.19,200.12 147.87,200.12z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M147.87,19.85c4.69,0 8.5,3.81 8.5,8.5v162.14c0,4.69 -3.81,8.5 -8.5,8.5H79.03c-4.69,0 -8.5,-3.81 -8.5,-8.5V28.35c0,-4.69 3.81,-8.5 8.5,-8.5H147.87M147.87,18.71H79.03c-5.32,0 -9.64,4.31 -9.64,9.64v162.14c0,5.32 4.31,9.64 9.64,9.64h68.84c5.32,0 9.64,-4.31 9.64,-9.64V28.35C157.51,23.03 153.19,18.71 147.87,18.71L147.87,18.71z" />
+    <path android:fillColor="#FFFFFF"
+        android:pathData="M149.82,185.29H77.08c-1.68,0 -3.04,-1.36 -3.04,-3.04V36.58c0,-1.68 1.36,-3.04 3.04,-3.04h72.75c1.68,0 3.04,1.36 3.04,3.04v145.67C152.86,183.93 151.5,185.29 149.82,185.29z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M128.7,192.99H98.2c-0.46,0 -0.83,-0.37 -0.83,-0.83v-0.06c0,-0.46 0.37,-0.83 0.83,-0.83h30.5c0.46,0 0.83,0.37 0.83,0.83v0.06C129.53,192.62 129.16,192.99 128.7,192.99z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M128.7,27.55H98.2c-0.46,0 -0.83,-0.37 -0.83,-0.83v-0.06c0,-0.46 0.37,-0.83 0.83,-0.83h30.5c0.46,0 0.83,0.37 0.83,0.83v0.06C129.53,27.18 129.16,27.55 128.7,27.55z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M157.85,73.95h-0.35V62.33h0.35c0.42,0 0.75,0.34 0.75,0.75V73.2C158.61,73.61 158.27,73.95 157.85,73.95z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M157.55,110.43h-0.04V87.5h0.04c0.58,0 1.06,0.47 1.06,1.06v20.82C158.61,109.96 158.13,110.43 157.55,110.43z" />
+    <path android:fillColor="#2196F3"
+        android:pathData="M117.61,54.05c0.03,-0.21 0.04,-0.41 0.04,-0.63c0,-0.22 -0.02,-0.42 -0.04,-0.63l1.36,-1.06c0.12,-0.1 0.15,-0.27 0.08,-0.41l-1.28,-2.22c-0.08,-0.14 -0.25,-0.19 -0.39,-0.14l-1.6,0.64c-0.33,-0.26 -0.69,-0.47 -1.09,-0.63l-0.24,-1.7c-0.02,-0.15 -0.15,-0.27 -0.31,-0.27h-2.57c-0.16,0 -0.3,0.12 -0.31,0.27l-0.24,1.7c-0.39,0.16 -0.75,0.38 -1.09,0.63l-1.6,-0.64c-0.15,-0.06 -0.31,0 -0.39,0.14l-1.28,2.22c-0.08,0.14 -0.04,0.31 0.08,0.41l1.36,1.06c-0.03,0.21 -0.04,0.42 -0.04,0.63c0,0.21 0.02,0.42 0.04,0.63l-1.36,1.06c-0.12,0.1 -0.15,0.27 -0.08,0.41l1.28,2.22c0.08,0.14 0.25,0.19 0.39,0.14l1.6,-0.64c0.33,0.26 0.69,0.47 1.09,0.63l0.24,1.7c0.02,0.15 0.15,0.27 0.31,0.27h2.57c0.16,0 0.3,-0.12 0.31,-0.27l0.24,-1.7c0.39,-0.16 0.75,-0.38 1.09,-0.63l1.6,0.64c0.15,0.06 0.31,0 0.39,-0.14l1.28,-2.22c0.08,-0.14 0.04,-0.31 -0.08,-0.41L117.61,54.05zM112.83,55.67c-1.24,0 -2.25,-1.01 -2.25,-2.25c0,-1.24 1.01,-2.25 2.25,-2.25s2.25,1.01 2.25,2.25C115.08,54.66 114.07,55.67 112.83,55.67z" />
+    <path android:fillColor="#BDBDBD"
+        android:pathData="M29.76,167.09c0.02,0 0.04,0 0.04,0c0.03,0 -0.52,-0.32 -0.88,-0.53c4.08,-5.52 0.33,-13.14 0.33,-13.14l-0.5,0.6l0.2,-0.56l-1.25,-0.93l-2.17,1.38c0,0 0.85,9.51 -0.93,11.3c-0.11,0.02 -0.24,0.05 -0.38,0.08c-0.3,0.07 -0.53,0.32 -0.57,0.62l-0.26,1.74c0.02,0.02 0.03,0.05 0.05,0.06c0.14,0.02 0.31,-0.37 0.41,-0.89c0,0.02 0,0.03 0,0.03c-0.01,0.04 1.12,-0.92 1.35,-1.2c0,0 2.86,-4.5 2.99,-8.09c0.46,0.66 0.85,1.67 0.84,3.19c-0.02,3.13 -0.77,4.55 -1,4.9c-0.01,0 -0.02,-0.01 -0.03,-0.01c-0.18,0.08 0,0.84 0.4,1.78h2.26c0.02,-0.02 0.05,-0.04 0.05,-0.06C30.7,167.23 30.29,167.11 29.76,167.09zM23.92,166.2c0,-0.01 0,-0.03 0,-0.04l0,0C23.93,166.17 23.93,166.18 23.92,166.2zM29.09,167.1L29.09,167.1c0.01,0 0.03,0 0.04,0C29.12,167.1 29.11,167.1 29.09,167.1z" />
+    <path android:fillColor="#FFE1BD"
+        android:pathData="M28.64,150.06c0.99,1.9 2.51,3.87 4.53,4.7c0.42,0.17 0.6,-0.51 0.19,-0.68c-1.84,-0.75 -3.22,-2.66 -4.11,-4.38C29.04,149.31 28.43,149.66 28.64,150.06L28.64,150.06z" />
+    <path android:fillColor="#FFE1BD"
+        android:pathData="M29.08,145.76c-0.3,-0.84 -1.06,-1.34 -1.71,-1.12c-0.64,0.23 -0.92,1.1 -0.62,1.94c0.06,0.17 0.15,0.33 0.24,0.47c-0.08,0.44 -0.33,1.82 -0.26,1.82c0.08,0 1.29,0.53 1.09,-0.28c-0.1,-0.42 -0.08,-0.71 -0.04,-0.91c0.22,0.07 0.45,0.09 0.67,0.01C28.46,147.7 29.38,146.6 29.08,145.76z" />
+    <path android:fillColor="#DB4437"
+        android:pathData="M29.58,153.9c0,0 -0.99,-1.93 -1.19,-2.48c-0.12,-0.31 0.02,-0.69 0.17,-0.95l0.16,0.2c0,0 1.02,-0.92 0.69,-1.32c-0.33,-0.4 -1.56,-0.62 -1.56,-0.62l-0.02,0.14c-0.18,0.26 -1.44,-0.02 -1.44,-0.02c-0.79,0.13 -0.84,2.64 -0.73,2.94s-0.36,2.85 -0.43,2.88C25.15,154.7 29.58,153.9 29.58,153.9z" />
+    <path android:fillColor="#1565C0"
+        android:pathData="M36.91,156.12c0.09,-0.14 0.18,-0.29 0.25,-0.45c0.08,-0.16 0.13,-0.32 0.19,-0.48l1.38,-0.31c0.12,-0.03 0.21,-0.15 0.2,-0.28l-0.17,-2.1c-0.01,-0.13 -0.12,-0.23 -0.24,-0.24l-1.41,-0.09c-0.16,-0.31 -0.35,-0.59 -0.58,-0.85l0.42,-1.35c0.04,-0.12 -0.02,-0.25 -0.14,-0.31l-1.91,-0.9c-0.12,-0.06 -0.26,-0.02 -0.33,0.09l-0.78,1.18c-0.35,-0.02 -0.69,0.02 -1.03,0.08l-0.96,-1.04c-0.09,-0.09 -0.23,-0.11 -0.34,-0.03l-1.74,1.2c-0.11,0.08 -0.14,0.22 -0.09,0.33l0.63,1.26c-0.09,0.14 -0.18,0.29 -0.25,0.45c-0.07,0.16 -0.13,0.32 -0.19,0.48l-1.38,0.31c-0.12,0.03 -0.21,0.15 -0.2,0.28l0.17,2.1c0.01,0.13 0.12,0.23 0.24,0.24l1.41,0.09c0.16,0.31 0.35,0.59 0.58,0.85l-0.42,1.35c-0.04,0.12 0.02,0.25 0.14,0.31l1.91,0.9c0.12,0.06 0.26,0.02 0.33,-0.09l0.78,-1.18c0.35,0.02 0.69,-0.02 1.03,-0.08l0.96,1.04c0.09,0.09 0.23,0.11 0.34,0.03l1.74,-1.2c0.11,-0.08 0.14,-0.22 0.09,-0.33L36.91,156.12zM32.8,155.64c-0.92,-0.44 -1.31,-1.54 -0.88,-2.46c0.44,-0.92 1.54,-1.31 2.46,-0.88c0.92,0.44 1.31,1.54 0.88,2.46C34.82,155.68 33.72,156.08 32.8,155.64z" />
+    <path android:fillColor="#FFE1BD"
+        android:pathData="M25.35,150.61c0.36,1.86 1.15,3.95 2.65,5.17c0.35,0.28 0.85,-0.21 0.5,-0.5c-1.41,-1.15 -2.13,-3.11 -2.47,-4.86C25.95,149.98 25.27,150.17 25.35,150.61L25.35,150.61z" />
+    <path android:fillColor="#DB4437"
+        android:pathData="M25.14,150.83l1.45,-0.37l-0.36,-1.6C26.23,148.86 24.71,149.21 25.14,150.83z" />
+    <path android:fillColor="#263238"
+        android:pathData="M27.61,144.32c-0.41,0.17 -0.7,0.43 -0.79,0.51c-0.48,-0.08 -0.32,0.48 -1.52,2.25c-1.53,2.26 0.17,3.89 0.27,3.13c0.1,-0.76 1.41,-1.02 1.73,-2.46c0.26,-1.14 0.1,-2.73 0.47,-2.49l-0.09,-0.06l0.02,0.01c0,0 0.41,-0.46 0.88,-0.15C29.05,145.36 28.1,144.12 27.61,144.32z" />
+    <path android:fillColor="#8D6E63"
+        android:pathData="M168.92,195.59m-0.74,0a0.74,0.74 0,1 1,1.48 0a0.74,0.74 0,1 1,-1.48 0" />
+    <path android:fillColor="#FFCCBC"
+        android:pathData="M162.78,205.28c0,0 -1.22,0.5 -1.38,0.07c-0.15,-0.43 1.08,-0.91 1.08,-0.91L162.78,205.28z" />
+    <path android:fillColor="#0F9D58"
+        android:pathData="M166.17,199.51L166.17,199.51c-0.52,0.49 -0.83,1.17 -0.85,1.89l-0.03,1.15l-2.8,1.89l0.38,1.08l3.99,-1.24l1.37,-3.64L166.17,199.51z" />
+    <path android:fillColor="#FFCCBC"
+        android:pathData="M166.78,198a1.54,1.17 114.37,1 0,1.27 -2.81a1.54,1.17 114.37,1 0,-1.27 2.81z" />
+    <path android:fillColor="#FFCCBC"
+        android:pathData="M168.12,197.58c-0.03,-0.08 -0.4,0.96 -0.09,1.42c0.31,0.46 -1.15,-0.07 -1.15,-0.07s0.31,-0.97 0.15,-1.27C166.87,197.37 168.12,197.58 168.12,197.58z" />
+    <path android:fillColor="#8D6E63"
+        android:pathData="M167,195.29c0,0 0.8,-0.64 1.42,-0.06s0.81,2.02 -0.3,2.43c0,0 0.14,-0.9 0,-1.27S166.43,195.59 167,195.29z" />
+    <path android:fillColor="#BDBDBD"
+        android:pathData="M172.08,218.74l-2.1,-5.75l-0.6,-7.8l-2.29,-0.13l-1.15,-1.1c-3.18,5.85 -1.47,11.7 -0.77,13.58c-0.26,0.06 -0.92,0.24 -1.39,0.44c-0.38,0.16 -0.55,0.36 -0.55,0.36s3.04,0.03 3.6,-0.36l-0.66,-5.28c0.33,-1.03 0.61,-2.08 0.84,-3.03c0.22,1.18 0.44,2.29 0.75,3.21c0.94,2.84 1.96,4.68 2.51,5.56c-0.59,0.28 -1.36,0.67 -1.32,0.67c0.07,0 1.61,0.12 1.66,0.05c0.03,-0.04 0.41,-0.17 0.78,-0.27L172.08,218.74z" />
+    <path android:fillColor="#9AA0A6"
+        android:pathData="M159.53,197.06c-2.25,0.64 -3.54,2.98 -2.9,5.23c0.64,2.25 2.98,3.54 5.23,2.9s3.54,-2.98 2.9,-5.23C164.12,197.71 161.78,196.41 159.53,197.06zM159.88,198.28c0.67,-0.19 1.38,0.2 1.57,0.87c0.19,0.67 -0.2,1.38 -0.87,1.57c-0.67,0.19 -1.38,-0.2 -1.57,-0.87C158.82,199.17 159.21,198.47 159.88,198.28zM161.53,204.05c-1.02,0.29 -2.06,0.03 -2.81,-0.61c-0.22,-0.81 1.27,-1.72 2.08,-1.95c0.81,-0.23 2.55,-0.25 2.8,0.55C163.3,202.98 162.55,203.76 161.53,204.05z" />
+    <path android:fillColor="#FFCCBC"
+        android:pathData="M163.22,204.25c0,0 -1.29,-0.27 -1.17,-0.71c0.12,-0.44 1.41,-0.11 1.41,-0.11L163.22,204.25z" />
+    <path android:fillColor="#0F9D58"
+        android:pathData="M169.51,203.19c0.23,-1.42 0.92,-1.91 -0.51,-3.75l0,0l-0.48,-0.28c-0.13,-0.08 -0.28,-0.13 -0.44,-0.15l-0.79,-0.11c-0.51,-0.07 -0.99,0.23 -1.15,0.72c-0.26,0.76 -0.58,1.95 -0.63,3.12c-0.01,0.19 -0.03,0.38 -0.05,0.57l-1.98,0.11l-0.48,1.3l2.14,0.1c-0.18,0.65 -0.35,1.22 -0.38,1.61l4.98,0.76l-0.34,-3.63C169.44,203.44 169.49,203.32 169.51,203.19z" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M127.22,77.77H84.45c-1.27,0 -2.31,-1.04 -2.31,-2.31V75.3c0,-1.27 1.04,-2.31 2.31,-2.31h42.77c1.27,0 2.31,1.04 2.31,2.31v0.16C129.53,76.73 128.49,77.77 127.22,77.77z" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M127.22,115.23H84.45c-1.27,0 -2.31,-1.04 -2.31,-2.31v-0.16c0,-1.27 1.04,-2.31 2.31,-2.31h42.77c1.27,0 2.31,1.04 2.31,2.31v0.16C129.53,114.19 128.49,115.23 127.22,115.23z" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M127.22,96.5H84.45c-1.27,0 -2.31,-1.04 -2.31,-2.31v-0.16c0,-1.27 1.04,-2.31 2.31,-2.31h42.77c1.27,0 2.31,1.04 2.31,2.31v0.16C129.53,95.46 128.49,96.5 127.22,96.5z" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M127.22,133.96H84.45c-1.27,0 -2.31,-1.04 -2.31,-2.31v-0.16c0,-1.27 1.04,-2.31 2.31,-2.31h42.77c1.27,0 2.31,1.04 2.31,2.31v0.16C129.53,132.92 128.49,133.96 127.22,133.96z" />
+    <path android:fillColor="#999FA5"
+        android:pathData="M127.22,152.7H84.45c-1.27,0 -2.31,-1.04 -2.31,-2.31v-0.16c0,-1.27 1.04,-2.31 2.31,-2.31h42.77c1.27,0 2.31,1.04 2.31,2.31v0.16C129.53,151.66 128.49,152.7 127.22,152.7z" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M137.67,75.38m-4.54,0a4.54,4.54 0,1 1,9.08 0a4.54,4.54 0,1 1,-9.08 0" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M137.67,112.84m-4.54,0a4.54,4.54 0,1 1,9.08 0a4.54,4.54 0,1 1,-9.08 0" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M137.67,131.57m-4.54,0a4.54,4.54 0,1 1,9.08 0a4.54,4.54 0,1 1,-9.08 0" />
+    <path android:fillColor="#E7E9EC"
+        android:pathData="M137.67,94.11m-4.54,0a4.54,4.54 0,1 1,9.08 0a4.54,4.54 0,1 1,-9.08 0" />
+    <path android:fillColor="#F4B400"
+        android:pathData="M137.67,145.31c-2.76,0 -5,2.24 -5,5c0,2.76 2.24,5 5,5c2.76,0 5,-2.24 5,-5C142.67,147.55 140.43,145.31 137.67,145.31zM137.67,153.71c-0.36,0 -0.65,-0.29 -0.65,-0.65s0.29,-0.65 0.65,-0.65s0.65,0.29 0.65,0.65S138.03,153.71 137.67,153.71zM138.21,151.4c-0.04,0.26 -0.29,0.44 -0.57,0.4c-0.28,-0.04 -0.47,-0.33 -0.41,-0.62c0.26,-1.3 1.33,-1.42 1.43,-2.25c0.06,-0.48 -0.21,-0.93 -0.67,-1.08c-0.52,-0.17 -1.1,0.08 -1.28,0.68c-0.06,0.23 -0.26,0.37 -0.49,0.37c-0.33,0 -0.56,-0.31 -0.48,-0.63c0.32,-1.12 1.46,-1.69 2.53,-1.37c0.85,0.25 1.42,1.08 1.39,1.97C139.63,150.09 138.42,150.18 138.21,151.4z" />
+</vector>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-nodpi/placeholder.png b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-nodpi/placeholder.png
new file mode 100644
index 0000000..ec4f14d
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-nodpi/placeholder.png
Binary files differ
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_closing_img.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_closing_img.xml
new file mode 100644
index 0000000..284de8a
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_closing_img.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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.
+-->
+
+<!-- exit image for deferred setup.
+     (go/android-suw-assets-deferred-closing-img) -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="280dp"
+        android:height="280dp"
+        android:viewportHeight="228.0"
+        android:viewportWidth="228.0">
+    <path android:fillColor="#f7f8f9"
+        android:pathData="M114,114m-113,0a113,113 0,1 1,226 0a113,113 0,1 1,-226 0" />
+    <path android:fillColor="#78909c"
+        android:pathData="M204.11,178.51l-5.83,0.32 0.34,11.57a10.64,10.64 0,0 0,-2.13 0.65c-0.29,0.26 3.6,0 3.6,0l-0.09,-0.41 0.88,-9.58 1.91,9.19a14,14 0,0 0,-2.41 0.73c-0.29,0.26 3.6,0 3.6,0v0h0Z" />
+    <path android:fillColor="#a1887f"
+        android:pathData="M193.37,165.38s-0.45,-1.24 0,-1.35 0.8,0.82 0.8,0.82Z" />
+    <path android:fillColor="#a1887f"
+        android:pathData="M195.65,172.07s-0.9,-1 -0.53,-1.24 1.06,0.43 1.06,0.43Z" />
+    <path android:fillColor="#f4b400"
+        android:pathData="M204,171.44c-0.76,-2.5 -3.63,-2.86 -3.63,-2.86l-4.58,-0.33 -1.65,-3.4 -1.19,0.79 1.35,3.49a1.77,1.77 0,0 0,1.39 1.12l3.69,0.55a12.16,12.16 0,0 0,-0.51 2c0,0.26 -0.08,0.5 -0.11,0.74l-2.62,-2.27 -0.78,1.2 2.61,2.68a1.75,1.75 0,0 0,0.56 0.37c-0.12,1.16 -0.21,2.23 -0.39,3.45l6.29,0.44S204.79,173.93 204,171.44Z" />
+    <path android:fillColor="#a1887f"
+        android:pathData="M200.78,168.91a8.38,8.38 0,0 0,0.66 -1.36c0.12,-0.45 0.87,0.21 0.87,0.21a7,7 0,0 1,0 1.61C202.19,169.37 200.66,171.47 200.78,168.91Z" />
+    <path android:fillColor="#8d6e63"
+        android:pathData="M202.28,167.73c-0.13,-0.11 -0.73,-0.58 -0.84,-0.18a5.72,5.72 0,0 1,-0.45 1A1.68,1.68 0,0 0,202.28 167.73Z" />
+    <path android:fillColor="#a1887f"
+        android:pathData="M202.37,167.49a1.49,1.49 0,0 1,-1.91 0.82,2.54 2.54,0 0,1 -0.28,-2.05A1.3,1.3 0,1 1,202.37 167.49Z" />
+    <path android:fillColor="#231f20"
+        android:pathData="M200.52,165.78s-0.18,0.33 0.87,0.27a0.8,0.8 0,0 1,0.82 1.05,3.21 3.21,0 0,0 0,0.68c0,0.18 0.54,-0.11 0.61,-1.05S201.93,164.53 200.52,165.78Z" />
+    <path android:fillColor="#03a9f4"
+        android:pathData="M201.66,153a8.91,8.91 0,0 0,-17.82 0c0,4.66 4.25,8.44 8.91,8.44h0v3.28C198.15,162 201.66,157.54 201.66,153Z" />
+    <path android:fillColor="#eee"
+        android:pathData="M192.75,148.06a2.82,2.82 0,0 0,-2.81 2.81h1.41a1.41,1.41 0,1 1,2.4 1l-0.87,0.89a2.72,2.72 0,0 0,-0.87 1.87h1.5a2.49,2.49 0,0 1,0.78 -1.5c0.27,-0.27 0.63,-0.67 0.63,-0.67a2.22,2.22 0,0 0,0.66 -1.58A2.82,2.82 0,0 0,192.75 148.06Z" />
+    <path android:fillColor="#eee"
+        android:pathData="M192.75,156.5m-0.94,0a0.94,0.94 0,1 1,1.88 0a0.94,0.94 0,1 1,-1.88 0" />
+    <path android:fillColor="#e8eaed"
+        android:pathData="M79.03,18.71L147.86,18.71A9.64,9.64 0,0 1,157.5 28.35L157.5,190.48A9.64,9.64 0,0 1,147.86 200.12L79.03,200.12A9.64,9.64 0,0 1,69.39 190.48L69.39,28.35A9.64,9.64 0,0 1,79.03 18.71z" />
+    <path android:fillColor="#bdc1c6"
+        android:pathData="M147.87,19.85a8.51,8.51 0,0 1,8.5 8.5V190.49a8.51,8.51 0,0 1,-8.5 8.5H79a8.51,8.51 0,0 1,-8.5 -8.5V28.35a8.51,8.51 0,0 1,8.5 -8.5h68.84m0,-1.14H79a9.64,9.64 0,0 0,-9.64 9.64V190.49A9.64,9.64 0,0 0,79 200.12h68.84a9.64,9.64 0,0 0,9.64 -9.64V28.35a9.64,9.64 0,0 0,-9.64 -9.64h0Z" />
+    <path android:fillColor="#fff"
+        android:pathData="M77.08,33.54L149.83,33.54A3.04,3.04 0,0 1,152.87 36.58L152.87,182.25A3.04,3.04 0,0 1,149.83 185.29L77.08,185.29A3.04,3.04 0,0 1,74.04 182.25L74.04,36.58A3.04,3.04 0,0 1,77.08 33.54z" />
+    <path android:fillColor="#bdc1c6"
+        android:pathData="M98.2,191.29L128.69,191.29A0.83,0.83 0,0 1,129.52 192.12L129.52,192.17A0.83,0.83 0,0 1,128.69 193L98.2,193A0.83,0.83 0,0 1,97.37 192.17L97.37,192.12A0.83,0.83 0,0 1,98.2 191.29z" />
+    <path android:fillColor="#bdc1c6"
+        android:pathData="M98.2,25.84L128.69,25.84A0.83,0.83 0,0 1,129.52 26.67L129.52,26.72A0.83,0.83 0,0 1,128.69 27.55L98.2,27.55A0.83,0.83 0,0 1,97.37 26.72L97.37,26.67A0.83,0.83 0,0 1,98.2 25.84z" />
+    <path android:fillColor="#bdc1c6"
+        android:pathData="M157.51,62.33h0.35a0.75,0.75 0,0 1,0.75 0.75V73.2a0.75,0.75 0,0 1,-0.75 0.75h-0.35a0,0 0,0 1,0 0V62.33a0,0 0,0 1,0 0Z" />
+    <path android:fillColor="#bdc1c6"
+        android:pathData="M157.51,87.5h0a1.06,1.06 0,0 1,1.06 1.06v20.82a1.06,1.06 0,0 1,-1.06 1.06h0a0,0 0,0 1,0 0V87.5A0,0 0,0 1,157.51 87.5Z" />
+    <path android:fillColor="#2196f3"
+        android:pathData="M117.61,54.05a4.43,4.43 0,0 0,0 -1.26L119,51.73a0.32,0.32 0,0 0,0.08 -0.41l-1.28,-2.22a0.32,0.32 0,0 0,-0.39 -0.14l-1.6,0.64a4.69,4.69 0,0 0,-1.09 -0.63l-0.24,-1.7a0.31,0.31 0,0 0,-0.31 -0.27h-2.57a0.31,0.31 0,0 0,-0.31 0.27L111,49a4.94,4.94 0,0 0,-1.09 0.63L108.3,49a0.31,0.31 0,0 0,-0.39 0.14l-1.28,2.22a0.32,0.32 0,0 0,0.08 0.41l1.36,1.06a4.43,4.43 0,0 0,0 1.26l-1.36,1.06a0.32,0.32 0,0 0,-0.08 0.41l1.28,2.22a0.32,0.32 0,0 0,0.39 0.14l1.6,-0.64a4.69,4.69 0,0 0,1.09 0.63l0.24,1.7a0.31,0.31 0,0 0,0.31 0.27h2.57a0.31,0.31 0,0 0,0.31 -0.27l0.24,-1.7a4.94,4.94 0,0 0,1.09 -0.63l1.6,0.64a0.31,0.31 0,0 0,0.39 -0.14L119,55.52a0.32,0.32 0,0 0,-0.08 -0.41ZM112.84,55.67a2.25,2.25 0,1 1,2.25 -2.25A2.25,2.25 0,0 1,112.83 55.67Z" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M86.92,75.72m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M97.28,73.35L139.67,73.35A2.29,2.29 0,0 1,141.96 75.64L141.96,75.8A2.29,2.29 0,0 1,139.67 78.09L97.28,78.09A2.29,2.29 0,0 1,94.99 75.8L94.99,75.64A2.29,2.29 0,0 1,97.28 73.35z" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M86.92,112.85m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M86.92,131.42m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M97.28,110.48L139.67,110.48A2.29,2.29 0,0 1,141.96 112.77L141.96,112.93A2.29,2.29 0,0 1,139.67 115.22L97.28,115.22A2.29,2.29 0,0 1,94.99 112.93L94.99,112.77A2.29,2.29 0,0 1,97.28 110.48z" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M86.92,94.28m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M97.28,91.92L139.67,91.92A2.29,2.29 0,0 1,141.96 94.21L141.96,94.37A2.29,2.29 0,0 1,139.67 96.66L97.28,96.66A2.29,2.29 0,0 1,94.99 94.37L94.99,94.21A2.29,2.29 0,0 1,97.28 91.92z" />
+    <path android:fillColor="#e7e9ec"
+        android:pathData="M97.28,129.05L139.67,129.05A2.29,2.29 0,0 1,141.96 131.34L141.96,131.5A2.29,2.29 0,0 1,139.67 133.79L97.28,133.79A2.29,2.29 0,0 1,94.99 131.5L94.99,131.34A2.29,2.29 0,0 1,97.28 129.05z" />
+    <path android:fillColor="#999fa5"
+        android:pathData="M97.28,147.62L139.67,147.62A2.29,2.29 0,0 1,141.96 149.91L141.96,150.07A2.29,2.29 0,0 1,139.67 152.36L97.28,152.36A2.29,2.29 0,0 1,94.99 150.07L94.99,149.91A2.29,2.29 0,0 1,97.28 147.62z" />
+    <path android:fillColor="#f4b400"
+        android:pathData="M86.92,145a5,5 0,1 0,5 5A5,5 0,0 0,86.92 145ZM86.92,153.33a0.64,0.64 0,1 1,0.64 -0.64A0.64,0.64 0,0 1,86.92 153.36ZM87.45,151.04a0.49,0.49 0,0 1,-0.56 0.39,0.51 0.51,0 0,1 -0.41,-0.61c0.26,-1.29 1.32,-1.41 1.42,-2.23a1,1 0,0 0,-0.66 -1.08,1 1,0 0,0 -1.26,0.68 0.5,0.5 0,1 1,-1 -0.26,2 2,0 0,1 3.88,0.6C88.86,149.78 87.66,149.86 87.45,151.07Z" />
+    <path android:fillColor="#bdbdbd"
+        android:pathData="M29.76,167.09h0s-0.52,-0.32 -0.88,-0.53c4.08,-5.52 0.33,-13.14 0.33,-13.14l-0.5,0.6 0.2,-0.56 -1.25,-0.93 -2.17,1.38s0.85,9.51 -0.93,11.3l-0.38,0.08a0.76,0.76 0,0 0,-0.57 0.62l-0.26,1.74a0.14,0.14 0,0 0,0.05 0.06,1.14 1.14,0 0,0 0.41,-0.89v0a12.14,12.14 0,0 0,1.35 -1.2s2.86,-4.5 3,-8.09a5.36,5.36 0,0 1,0.84 3.19c0,3.13 -0.77,4.55 -1,4.9h0c-0.18,0.08 0,0.84 0.4,1.78h2.26a0.14,0.14 0,0 0,0 -0.06A1.14,1.14 0,0 0,29.76 167.09ZM23.93,166.2v0h0v0ZM29.1,167.1h0Z" />
+    <path android:fillColor="#ffe1bd"
+        android:pathData="M28.64,150.06a9.82,9.82 0,0 0,4.53 4.7c0.42,0.17 0.6,-0.51 0.19,-0.68 -1.84,-0.75 -3.22,-2.66 -4.11,-4.38a0.35,0.35 0,0 0,-0.61 0.35h0Z" />
+    <path android:fillColor="#ffe1bd"
+        android:pathData="M29.08,145.76a1.47,1.47 0,0 0,-1.71 -1.12,1.47 1.47,0 0,0 -0.62,1.94 2.06,2.06 0,0 0,0.24 0.47,12.38 12.38,0 0,0 -0.26,1.82c0.08,0 1.29,0.53 1.09,-0.28a2,2 0,0 1,0 -0.91,1 1,0 0,0 0.67,0A2.49,2.49 0,0 0,29.08 145.76Z" />
+    <path android:fillColor="#db4437"
+        android:pathData="M29.58,153.9s-1,-1.93 -1.19,-2.48a1.23,1.23 0,0 1,0.17 -1l0.16,0.2s1,-0.92 0.69,-1.32a3.62,3.62 0,0 0,-1.56 -0.62l0,0.14a2.62,2.62 0,0 1,-1.44 0c-0.79,0.13 -0.84,2.64 -0.73,2.94a12.58,12.58 0,0 1,-0.43 2.88C25.15,154.7 29.58,153.9 29.58,153.9Z" />
+    <path android:fillColor="#1565c0"
+        android:pathData="M36.91,156.12a3.64,3.64 0,0 0,0.44 -0.93l1.38,-0.31a0.27,0.27 0,0 0,0.2 -0.28l-0.17,-2.1a0.27,0.27 0,0 0,-0.24 -0.24l-1.41,-0.09a3.85,3.85 0,0 0,-0.58 -0.85L36.95,150a0.26,0.26 0,0 0,-0.14 -0.31l-1.91,-0.9a0.26,0.26 0,0 0,-0.33 0.09L33.79,150a4.05,4.05 0,0 0,-1 0.08l-1,-1a0.26,0.26 0,0 0,-0.34 0l-1.74,1.2a0.26,0.26 0,0 0,-0.09 0.33l0.63,1.26a3.64,3.64 0,0 0,-0.44 0.93l-1.38,0.31a0.27,0.27 0,0 0,-0.2 0.28l0.17,2.1a0.27,0.27 0,0 0,0.24 0.24l1.41,0.09a3.85,3.85 0,0 0,0.58 0.85L30.24,158a0.26,0.26 0,0 0,0.14 0.31l1.91,0.9a0.26,0.26 0,0 0,0.33 -0.09l0.78,-1.18a4.05,4.05 0,0 0,1 -0.08l1,1a0.26,0.26 0,0 0,0.34 0l1.74,-1.2a0.27,0.27 0,0 0,0.09 -0.33ZM32.8,155.64a1.85,1.85 0,1 1,2.46 -0.88A1.85,1.85 0,0 1,32.8 155.64Z" />
+    <path android:fillColor="#ffe1bd"
+        android:pathData="M25.35,150.61A8.85,8.85 0,0 0,28 155.78c0.35,0.28 0.85,-0.21 0.5,-0.5A8.26,8.26 0,0 1,26 150.43c-0.09,-0.44 -0.76,-0.26 -0.68,0.19h0Z" />
+    <path android:fillColor="#db4437"
+        android:pathData="M25.14,150.83l1.45,-0.37 -0.36,-1.6A1.52,1.52 0,0 0,25.14 150.83Z" />
+    <path android:fillColor="#263238"
+        android:pathData="M27.61,144.32a2.56,2.56 0,0 0,-0.79 0.51c-0.48,-0.08 -0.32,0.48 -1.52,2.25 -1.53,2.26 0.17,3.89 0.27,3.13s1.41,-1 1.73,-2.46c0.26,-1.14 0.1,-2.73 0.47,-2.49l-0.09,-0.06h0a0.7,0.7 0,0 1,0.88 -0.15C29.05,145.36 28.1,144.12 27.61,144.32Z" />
+    <path android:fillColor="#8d6e63"
+        android:pathData="M168.92,195.59m-0.74,0a0.74,0.74 0,1 1,1.48 0a0.74,0.74 0,1 1,-1.48 0" />
+    <path android:fillColor="#ffccbc"
+        android:pathData="M162.78,205.28s-1.22,0.5 -1.38,0.07 1.08,-0.91 1.08,-0.91Z" />
+    <path android:fillColor="#0f9d58"
+        android:pathData="M166.17,199.51h0a2.7,2.7 0,0 0,-0.85 1.89l0,1.15 -2.8,1.89 0.38,1.08 4,-1.24 1.37,-3.64Z" />
+    <path android:fillColor="#ffccbc"
+        android:pathData="M166.78,198.01a1.54,1.17 114.37,1 0,1.27 -2.81a1.54,1.17 114.37,1 0,-1.27 2.81z" />
+    <path android:fillColor="#ffccbc"
+        android:pathData="M168.12,197.58A1.76,1.76 0,0 0,168 199c0.31,0.46 -1.15,-0.07 -1.15,-0.07a2.85,2.85 0,0 0,0.15 -1.27C166.87,197.37 168.12,197.58 168.12,197.58Z" />
+    <path android:fillColor="#8d6e63"
+        android:pathData="M167,195.29a1.14,1.14 0,0 1,1.42 -0.06,1.48 1.48,0 0,1 -0.3,2.43 3.63,3.63 0,0 0,0 -1.27C168,196 166.43,195.59 167,195.29Z" />
+    <path android:fillColor="#bdbdbd"
+        android:pathData="M172.08,218.74L170,213l-0.6,-7.8 -2.29,-0.13 -1.15,-1.1a16.74,16.74 0,0 0,-0.77 13.58,10.59 10.59,0 0,0 -1.39,0.44 1.55,1.55 0,0 0,-0.55 0.36s3,0 3.6,-0.36l-0.66,-5.28c0.33,-1 0.61,-2.08 0.84,-3a25.33,25.33 0,0 0,0.75 3.21,26.53 26.53,0 0,0 2.51,5.56c-0.59,0.28 -1.36,0.67 -1.32,0.67a13.25,13.25 0,0 0,1.66 0,4.52 4.52,0 0,1 0.78,-0.27Z" />
+    <path android:fillColor="#9aa0a6"
+        android:pathData="M159.53,197.06a4.23,4.23 0,1 0,5.23 2.9A4.23,4.23 0,0 0,159.53 197.06ZM159.88,198.28a1.27,1.27 0,1 1,-0.87 1.57A1.27,1.27 0,0 1,159.88 198.28ZM161.53,204.05a3,3 0,0 1,-2.81 -0.61c-0.22,-0.81 1.27,-1.72 2.08,-1.95s2.55,-0.25 2.8,0.55A3,3 0,0 1,161.53 204Z" />
+    <path android:fillColor="#ffccbc"
+        android:pathData="M163.22,204.25s-1.29,-0.27 -1.17,-0.71 1.41,-0.11 1.41,-0.11Z" />
+    <path android:fillColor="#0f9d58"
+        android:pathData="M169.51,203.19c0.23,-1.42 0.92,-1.91 -0.51,-3.75h0l-0.48,-0.28a1.19,1.19 0,0 0,-0.44 -0.15l-0.79,-0.11a1.06,1.06 0,0 0,-1.15 0.72,11.85 11.85,0 0,0 -0.63,3.12c0,0.19 0,0.38 -0.05,0.57l-2,0.11 -0.48,1.3 2.14,0.1a10,10 0,0 0,-0.38 1.61l5,0.76 -0.34,-3.63A1.28,1.28 0,0 0,169.51 203.19Z" />
+</vector>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_welcome_img.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_welcome_img.xml
new file mode 100644
index 0000000..c2b0ba1
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_welcome_img.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="284dp"
+    android:height="284dp"
+    android:viewportWidth="284.0"
+    android:viewportHeight="284.0">
+    <path android:fillColor="#F7F8F9"
+        android:pathData="M142,142m-142,0a142,142 0,1 1,284 0a142,142 0,1 1,-284 0" />
+    <path android:fillColor="#F2CE8F"
+        android:pathData="M230.21,236.51c0,0 -0.73,-2.02 0,-2.2c0.73,-0.17 1.3,1.33 1.3,1.33L230.21,236.51z" />
+    <path android:fillColor="#F44336"
+        android:pathData="M241.67,241.72l-7.46,-0.53l-2.69,-5.54l-1.94,1.29l2.19,5.69c0.37,0.97 1.24,1.67 2.27,1.82l7.67,1.14c0,0 0.99,-0.46 0.97,-1.98C242.67,242.09 241.67,241.72 241.67,241.72z" />
+    <path android:fillColor="#8D6E63"
+        android:pathData="M238.79,278.14l-0.58,-19.71l9.5,-0.52l-0.16,20.23l-1.81,-0.14l-3.31,-15.95l-1.48,16.09z" />
+    <path android:fillColor="#F44336"
+        android:pathData="M247.58,246.38c-1.24,-4.07 -5.91,-4.66 -5.91,-4.66s-1.8,2.92 -2.43,6.87c-0.63,3.94 -0.69,6.64 -1.19,10.05l10.26,0.72C248.3,259.36 248.83,250.45 247.58,246.38z" />
+    <path android:fillColor="#E2BE83"
+        android:pathData="M242.29,242.27c0,0 0.88,-1.48 1.08,-2.22c0.2,-0.74 1.41,0.34 1.41,0.34s0.2,2.63 0,2.63S242.09,246.44 242.29,242.27z" />
+    <path android:fillColor="#D8B37D"
+        android:pathData="M244.74,240.34c-0.22,-0.18 -1.19,-0.95 -1.37,-0.3c-0.12,0.43 -0.46,1.11 -0.73,1.6C243.39,241.63 244.19,241.15 244.74,240.34z" />
+    <path android:fillColor="#F2CE8F"
+        android:pathData="M244.89,239.95c-0.73,1.29 -2.12,1.89 -3.11,1.33c0,0 -1.19,-2.06 -0.45,-3.35s2.12,-1.89 3.11,-1.33C245.42,237.16 245.62,238.66 244.89,239.95z" />
+    <path android:fillColor="#231F20"
+        android:pathData="M241.87,237.17c0,0 -0.29,0.54 1.41,0.44c1.7,-0.1 1.33,1.72 1.33,1.72s-0.1,0.83 -0.03,1.11c0.07,0.29 0.88,-0.19 0.99,-1.72S244.16,235.13 241.87,237.17z" />
+    <path android:fillColor="#8D6E63"
+        android:pathData="M239.61,277.02c-0.1,0.15 -3.86,0.9 -4.33,1.33c-0.47,0.43 5.86,-0.04 5.86,-0.04l-0.38,-1.68C240.77,276.64 239.7,276.89 239.61,277.02z" />
+    <path android:fillColor="#8D6E63"
+        android:pathData="M245.95,276.88c-0.1,0.15 -3.86,0.9 -4.33,1.33c-0.47,0.43 5.86,-0.04 5.86,-0.04l-0.38,-1.68C247.1,276.49 246.03,276.75 245.95,276.88z" />
+    <path android:fillColor="#767C80"
+        android:pathData="M223.64,227.57c-3.95,1.88 -5.63,6.61 -3.75,10.56c2.55,5.37 13.47,9.89 13.47,9.89s3.39,-11.32 0.84,-16.69C232.31,227.37 227.59,225.69 223.64,227.57zM228.25,237.28c-1.41,0.67 -3.1,0.07 -3.77,-1.34c-0.67,-1.41 -0.07,-3.1 1.34,-3.77c1.41,-0.67 3.1,-0.07 3.77,1.34C230.26,234.92 229.66,236.61 228.25,237.28z" />
+    <path android:fillColor="#E8EAED"
+        android:pathData="M184.41,255.58h-86.2c-6.66,0 -12.07,-5.4 -12.07,-12.07V40.48c0,-6.66 5.4,-12.07 12.07,-12.07h86.2c6.66,0 12.07,5.4 12.07,12.07v203.04C196.48,250.18 191.08,255.58 184.41,255.58z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M184.41,29.84c5.87,0 10.64,4.77 10.64,10.64v203.04c0,5.87 -4.77,10.64 -10.64,10.64h-86.2c-5.87,0 -10.64,-4.77 -10.64,-10.64V40.48c0,-5.87 4.77,-10.64 10.64,-10.64H184.41M184.41,28.41h-86.2c-6.66,0 -12.07,5.4 -12.07,12.07v203.04c0,6.66 5.4,12.07 12.07,12.07h86.2c6.66,0 12.07,-5.4 12.07,-12.07V40.48C196.48,33.82 191.08,28.41 184.41,28.41L184.41,28.41z" />
+    <path android:fillColor="#FFFFFF"
+        android:pathData="M186.86,237.01h-91.1c-2.1,0 -3.81,-1.7 -3.81,-3.81V50.79c0,-2.1 1.7,-3.81 3.81,-3.81h91.1c2.1,0 3.81,1.7 3.81,3.81v182.41C190.67,235.31 188.96,237.01 186.86,237.01z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M160.41,246.66h-38.2c-0.57,0 -1.03,-0.46 -1.03,-1.03v-0.07c0,-0.57 0.46,-1.03 1.03,-1.03h38.2c0.57,0 1.03,0.46 1.03,1.03v0.07C161.44,246.19 160.98,246.66 160.41,246.66z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M160.41,39.48h-38.2c-0.57,0 -1.03,-0.46 -1.03,-1.03v-0.07c0,-0.57 0.46,-1.03 1.03,-1.03h38.2c0.57,0 1.03,0.46 1.03,1.03v0.07C161.44,39.02 160.98,39.48 160.41,39.48z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M196.91,97.58h-0.43V83.03h0.43c0.52,0 0.94,0.42 0.94,0.94v12.67C197.86,97.16 197.43,97.58 196.91,97.58z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M196.53,143.27h-0.05v-28.72h0.05c0.73,0 1.32,0.59 1.32,1.32v26.07C197.86,142.68 197.26,143.27 196.53,143.27z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M128.28,89.34l2.37,2.37c5.89,-5.89 15.44,-5.89 21.32,0l2.37,-2.37C147.15,82.14 135.48,82.14 128.28,89.34zM137.76,98.81l3.55,3.55l3.55,-3.55C142.91,96.85 139.72,96.85 137.76,98.81zM133.02,94.08l2.37,2.37c3.27,-3.27 8.58,-3.27 11.85,0l2.37,-2.37C145.03,89.5 137.6,89.5 133.02,94.08z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M149.6,180.45h-1.18v-2.37h-2.37v2.37h-9.48v-2.37h-2.37v2.37h-1.18c-1.31,0 -2.36,1.06 -2.36,2.37l-0.01,16.58c0,1.31 1.06,2.37 2.37,2.37h16.58c1.31,0 2.37,-1.06 2.37,-2.37v-16.58C151.97,181.51 150.91,180.45 149.6,180.45zM149.6,199.4h-16.58v-13.03h16.58V199.4zM135.39,188.74h5.92v5.92h-5.92V188.74z" />
+    <path android:fillColor="#BDC1C6"
+        android:pathData="M151.97,150.29v-16.58c0,-1.31 -1.06,-2.37 -2.37,-2.37h-16.58c-1.31,0 -2.37,1.06 -2.37,2.37v16.58c0,1.31 1.06,2.37 2.37,2.37h16.58C150.91,152.66 151.97,151.6 151.97,150.29zM137.17,143.78l2.96,3.56l4.15,-5.34l5.33,7.11h-16.58L137.17,143.78z" />
+    <path android:fillColor="#EF6C51"
+        android:pathData="M51.67,203.92l-2.16,0l1.16,-5.15l1,0z" />
+    <path android:fillColor="#F4B400"
+        android:pathData="M56.59,203.04l10.17,7.23l-0.54,1.54l-11.09,-4.46l0.46,-4.93z" />
+    <path android:fillColor="#EF6C51"
+        android:pathData="M49.27,199.03a2.52,1.92 72.71,1 0,3.67 -1.14a2.52,1.92 72.71,1 0,-3.67 1.14z" />
+    <path android:fillColor="#FF000000"
+        android:pathData="M50.84,216.94c0,0 -1.12,6.31 -2.32,12.57l-4.19,6.89l1.01,0.58c0,0 8.25,-5.33 11.21,-19.42L50.84,216.94z" />
+    <path android:fillColor="#FF000000"
+        android:pathData="M53.42,219.21c0,0 0.99,3.03 3.43,8.92l1.19,9.16l0.94,0.46c0,0 3.58,-7.67 -1.69,-21.07L53.42,219.21z" />
+    <path android:fillColor="#F4B400"
+        android:pathData="M48.45,203.11l2.92,-0.92l3.03,-0.03l1.2,0.26c0,0 2.55,12.77 3.04,16.09l-8.7,1.92L48.45,203.11z" />
+    <path android:fillColor="#F4B400"
+        android:pathData="M48.45,203.11l0.65,6.1l0.28,2.08l4.17,2.87l-0.37,1.32l-0.33,0.9l-3.67,-1.9l-0.76,-0.3c-1.46,-0.58 -2.41,-2.01 -2.36,-3.58C46.13,208.3 45.9,205.32 48.45,203.11z" />
+    <path android:fillColor="#EF6C51"
+        android:pathData="M49.74,202.76c0,0 1.7,3.3 1.78,3.3c0.07,0 1.2,-3.82 1.12,-3.82s-1.72,-1 -1.72,-1l-1.11,1.47" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M46.67,240.71c-0.02,0 -0.04,0 -0.06,0c-0.31,-0.03 -0.53,-0.25 -0.5,-0.5L68.69,69.21c0.03,-0.25 0.34,-0.44 0.61,-0.4c0.31,0.03 0.53,0.25 0.5,0.5L47.22,240.31C47.19,240.54 46.95,240.71 46.67,240.71z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M64.48,240.71c-0.02,0 -0.04,0 -0.06,0c-0.31,-0.03 -0.53,-0.25 -0.5,-0.5L86.51,69.21c0.03,-0.25 0.32,-0.44 0.61,-0.4c0.31,0.03 0.53,0.25 0.5,0.5L65.03,240.31C65,240.54 64.76,240.71 64.48,240.71z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M86.35,75.11H68.54c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S86.66,75.11 86.35,75.11z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M85.34,82.73H67.53c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S85.65,82.73 85.34,82.73z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M84.34,90.36H66.52c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S84.64,90.36 84.34,90.36z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M83.33,97.99H65.52c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S83.64,97.99 83.33,97.99z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M82.32,105.62H64.51c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S82.63,105.62 82.32,105.62z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M81.31,113.25H63.5c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S81.62,113.25 81.31,113.25z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M80.31,120.88H62.49c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S80.61,120.88 80.31,120.88z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M79.3,128.51H61.49c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45H79.3c0.31,0 0.56,0.2 0.56,0.45S79.61,128.51 79.3,128.51z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M78.29,136.14H60.48c-0.31,0 -0.56,-0.2 -0.56,-0.45c0,-0.25 0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45C78.85,135.94 78.6,136.14 78.29,136.14z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M77.28,143.77H59.47c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S77.59,143.77 77.28,143.77z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M76.28,151.4H58.47c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S76.59,151.4 76.28,151.4z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M75.27,159.03H57.46c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S75.58,159.03 75.27,159.03z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M74.26,166.65H56.45c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S74.57,166.65 74.26,166.65z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M73.26,174.28H55.44c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S73.56,174.28 73.26,174.28z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M72.25,181.91H54.44c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S72.56,181.91 72.25,181.91z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M71.24,189.54H53.43c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S71.55,189.54 71.24,189.54z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M70.23,197.17H52.42c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S70.54,197.17 70.23,197.17z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M69.23,204.8H51.42c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S69.54,204.8 69.23,204.8z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M68.22,212.43H50.41c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S68.53,212.43 68.22,212.43z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M67.21,220.06H49.4c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S67.52,220.06 67.21,220.06z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M66.21,227.69H48.39c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45h17.81c0.31,0 0.56,0.2 0.56,0.45S66.51,227.69 66.21,227.69z" />
+    <path android:fillColor="#DFE1E5"
+        android:pathData="M65.2,235.32H47.39c-0.31,0 -0.56,-0.2 -0.56,-0.45s0.25,-0.45 0.56,-0.45H65.2c0.31,0 0.56,0.2 0.56,0.45S65.51,235.32 65.2,235.32z" />
+    <path android:fillColor="#EF6C51"
+        android:pathData="M66.37,211.2a0.69,1.62 0,1 0,1.38 0a0.69,1.62 0,1 0,-1.38 0z" />
+    <path android:fillColor="#424242"
+        android:pathData="M83.58,71.96l-7.39,15.76l0.99,0.35c0,0 5.23,-3.42 9.43,-13.01L83.58,71.96z" />
+    <path android:fillColor="#0F9D58"
+        android:pathData="M82.98,65.24l1.76,-0.54l2.85,-0.11l1.82,0.51c0,0 -1.72,5.43 -1.86,7.86l-3.97,-1L82.98,65.24z" />
+    <path android:fillColor="#424242"
+        android:pathData="M83.58,71.96c0,0 3.8,0.75 3.94,0.75c0.14,0 -0.8,2.01 -0.8,2.01s-1.41,0.65 -1.87,0.84C84.38,75.76 83.58,71.96 83.58,71.96z" />
+    <path android:fillColor="#424242"
+        android:pathData="M85.06,92.32c0,0 2.22,0.54 3.2,1.76s-3.61,-0.61 -3.61,-0.61S84.31,92.51 85.06,92.32z" />
+    <path android:fillColor="#424242"
+        android:pathData="M77.37,88.02c0,0 -1.79,4.04 -2.53,3.53c-1.64,-1.11 1.67,-3.96 1.67,-3.96L77.37,88.02z" />
+    <path android:fillColor="#BA7542"
+        android:pathData="M84.49,61.53c0.32,0.73 0.92,1.22 1.61,1.22c1.03,0 1.87,-1.1 1.88,-2.46c0,-0.49 -0.11,-0.94 -0.3,-1.33C86.73,60.7 85.42,61.32 84.49,61.53z" />
+    <path android:fillColor="#0F9D58"
+        android:pathData="M89.41,65.1c0,0 4.47,2.9 5.11,3.26c0,0 -0.12,1.35 -0.22,1.37c-0.1,0.02 -5.4,-1.99 -5.6,-2.41C88.49,66.89 88.31,64.94 89.41,65.1z" />
+    <path android:fillColor="#BA7542"
+        android:pathData="M94.38,68.38c-0.06,-0.02 2.88,-1.23 3.72,-0.34c0.6,0.64 -3.88,1.67 -3.88,1.67L94.38,68.38z" />
+    <path android:fillColor="#BA7542"
+        android:pathData="M79.69,71.21l0.86,-0.07l0.32,1.04c0,0 -1.66,2.82 -1.7,2.88c-0.48,0.68 -1.14,0.77 -0.95,-0.02C78.74,72.82 79.69,71.21 79.69,71.21z" />
+    <path android:fillColor="#0F9D58"
+        android:pathData="M82.98,65.24c0,0 -1.31,1.16 -3.29,5.97l1.18,0.97l3.08,-4.6L82.98,65.24z" />
+    <path android:fillColor="#FF000000"
+        android:pathData="M83.25,57.88a1.65,1.28 64.72,1 0,2.31 -1.09a1.65,1.28 64.72,1 0,-2.31 1.09z" />
+    <path android:fillColor="#FF000000"
+        android:pathData="M87.68,58.97c-0.33,-0.68 -0.91,-1.14 -1.57,-1.14c-1.03,0 -2.34,1.58 -2.34,2.94c0,0.45 0.8,0.9 0.96,1.27C85.66,61.82 86.73,60.7 87.68,58.97z" />
+    <path android:fillColor="#BA7542"
+        android:pathData="M84.94,62.03c0,0 0.29,2.19 -0.24,2.75c-0.58,0.62 2.53,0.22 2.47,0.2c-0.06,-0.02 -1.08,-1.89 -0.5,-2.89C87.25,61.09 84.94,62.03 84.94,62.03z" />
+    <path android:fillColor="#767C80"
+        android:pathData="M106,54.79c-4.84,-1.66 -10.11,0.91 -11.78,5.75c-1.66,4.84 0.91,10.11 5.75,11.78c4.84,1.66 10.11,-0.91 11.78,-5.75C113.42,61.73 110.84,56.46 106,54.79zM105.09,57.42c1.45,0.5 2.22,2.08 1.73,3.53c-0.5,1.46 -2.08,2.22 -3.53,1.73c-1.45,-0.5 -2.23,-2.08 -1.73,-3.53C102.06,57.7 103.64,56.92 105.09,57.42zM100.82,69.87c-2.2,-0.75 -3.74,-2.54 -4.29,-4.63c0.62,-1.73 4.44,-1.49 6.19,-0.89s4.9,2.76 4.33,4.51C105.33,70.17 103.01,70.62 100.82,69.87z" />
+    <path android:fillColor="#424242"
+        android:pathData="M84.38,75.76c0,0 0.2,2.93 1.25,8.55l-0.64,8.27l0.74,0.58c0,0 5.62,-10.7 1.78,-20.45L84.38,75.76z" />
+    <path android:fillColor="#F2CE8F"
+        android:pathData="M233.93,247.41c0,0 -1.47,-1.57 -0.87,-2.02c0.6,-0.45 1.72,0.71 1.72,0.71L233.93,247.41z" />
+    <path android:fillColor="#F44336"
+        android:pathData="M243.31,245.44l-3.86,4.69l-4.66,-4.03l-1.27,1.95l4.26,4.36c0.73,0.75 1.8,1.04 2.81,0.78l4.3,-4.22c0,0 0.73,-0.82 0.11,-2.2S243.31,245.44 243.31,245.44z" />
+</vector>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_deferred_setup_icon.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_deferred_setup_icon.xml
new file mode 100644
index 0000000..990ed48
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_deferred_setup_icon.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2016 Google Inc.
+
+    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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="@dimen/glif_icon_size"
+    android:height="@dimen/glif_icon_size"
+    android:viewportHeight="48.0"
+    android:viewportWidth="48.0">
+    <path
+        android:fillColor="#4285F4"
+        android:pathData="M45.12,24.5c0,-1.56 -0.14,-3.06 -0.4,-4.5H24v8.51h11.84c-0.51,2.75 -2.06,5.08 -4.39,6.64v5.52h7.11c4.16,-3.83 6.56,-9.47 6.56,-16.17z" />
+    <path
+        android:fillColor="#34A853"
+        android:pathData="M24,46c5.94,0 10.92,-1.97 14.56,-5.33l-7.11,-5.52c-1.97,1.32 -4.49,2.1 -7.45,2.1 -5.73,0 -10.58,-3.87 -12.31,-9.07H4.34v5.7C7.96,41.07 15.4,46 24,46z" />
+    <path
+        android:fillColor="#FBBC05"
+        android:pathData="M11.69,28.18C11.25,26.86 11,25.45 11,24s0.25,-2.86 0.69,-4.18v-5.7H4.34C2.85,17.09 2,20.45 2,24c0,3.55 0.85,6.91 2.34,9.88l7.35,-5.7z" />
+    <path
+        android:fillColor="#EA4335"
+        android:pathData="M24,10.75c3.23,0 6.13,1.11 8.41,3.29l6.31,-6.31C34.91,4.18 29.93,2 24,2 15.4,2 7.96,6.93 4.34,14.12l7.35,5.7c1.73,-5.2 6.58,-9.07 12.31,-9.07z" />
+</vector>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_language.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_language.xml
new file mode 100644
index 0000000..6cc9a72
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_language.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2016 Google Inc.
+
+    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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="@dimen/ic_welcome_bottom_button_intrinsic_size"
+        android:height="@dimen/ic_welcome_bottom_button_intrinsic_size"
+        android:viewportWidth="24"
+        android:viewportHeight="24">
+    <path
+        android:fillColor="?android:attr/colorControlNormal"
+        android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z" />
+</vector>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_logo_googleg.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_logo_googleg.xml
new file mode 100644
index 0000000..36454fa
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_logo_googleg.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2016 Google Inc.
+
+    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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportHeight="48.0"
+    android:viewportWidth="48.0">
+    <path
+        android:fillColor="#4285F4"
+        android:pathData="M45.12,24.5c0,-1.56 -0.14,-3.06 -0.4,-4.5H24v8.51h11.84c-0.51,2.75 -2.06,5.08 -4.39,6.64v5.52h7.11c4.16,-3.83 6.56,-9.47 6.56,-16.17z" />
+    <path
+        android:fillColor="#34A853"
+        android:pathData="M24,46c5.94,0 10.92,-1.97 14.56,-5.33l-7.11,-5.52c-1.97,1.32 -4.49,2.1 -7.45,2.1 -5.73,0 -10.58,-3.87 -12.31,-9.07H4.34v5.7C7.96,41.07 15.4,46 24,46z" />
+    <path
+        android:fillColor="#FBBC05"
+        android:pathData="M11.69,28.18C11.25,26.86 11,25.45 11,24s0.25,-2.86 0.69,-4.18v-5.7H4.34C2.85,17.09 2,20.45 2,24c0,3.55 0.85,6.91 2.34,9.88l7.35,-5.7z" />
+    <path
+        android:fillColor="#EA4335"
+        android:pathData="M24,10.75c3.23,0 6.13,1.11 8.41,3.29l6.31,-6.31C34.91,4.18 29.93,2 24,2 15.4,2 7.96,6.93 4.34,14.12l7.35,5.7c1.73,-5.2 6.58,-9.07 12.31,-9.07z" />
+</vector>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_network_signal.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_network_signal.xml
new file mode 100644
index 0000000..73bbac1
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_network_signal.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="32dp"
+    android:height="32dp"
+    android:viewportWidth="32"
+    android:viewportHeight="32">
+
+    <path
+        android:pathData="M 0 0 H 32 V 32 H 0 V 0 Z" />
+    <path
+        android:fillColor="?android:attr/colorPrimary"
+        android:pathData="M24,5.33h1.33c0.74,0,1.33,0.6,1.33,1.33v18.67c0,0.74-0.6,1.33-1.33,1.33H24c-0.74,0-1.33-0.6-1.33-1.33
+V6.67C22.67,5.93,23.26,5.33,24,5.33z" />
+    <path
+        android:fillColor="?android:attr/colorPrimary"
+        android:pathData="M8,18.67h1.33c0.74,0,1.33,0.6,1.33,1.33v5.33c0,0.74-0.6,1.33-1.33,1.33H8c-0.74,0-1.33-0.6-1.33-1.33V20
+C6.67,19.26,7.26,18.67,8,18.67z" />
+    <path
+        android:fillColor="?android:attr/colorPrimary"
+        android:pathData="M16,12h1.33c0.74,0,1.33,0.6,1.33,1.33v12c0,0.74-0.6,1.33-1.33,1.33H16c-0.74,0-1.33-0.6-1.33-1.33v-12
+C14.67,12.6,15.26,12,16,12z" />
+</vector>
+
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/esim_intro_activity.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/esim_intro_activity.xml
new file mode 100644
index 0000000..f35062b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/esim_intro_activity.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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.
+-->
+
+<com.android.setupwizardlib.GlifLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/setup_wizard_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:icon="@drawable/ic_sim_card"
+    app:suwFooter="@layout/footer_next_only"
+    app:suwHeaderText="@string/esim_warning_title">
+
+    <LinearLayout
+        style="@style/SuwContentFrame"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/esim_intro_description"
+            style="@style/SuwDescription.Glif"
+            android:text="@string/esim_warning_txt"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <com.android.setupwizardlib.view.FillContentLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_weight="1">
+
+            <com.android.setupwizardlib.view.IllustrationVideoView
+                android:id="@+id/background"
+                style="@style/SuwContentIllustration"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                app:suwVideo="@raw/esim_illustration" />
+        </com.android.setupwizardlib.view.FillContentLayout>
+    </LinearLayout>
+
+</com.android.setupwizardlib.GlifLayout>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/items_esim.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/items_esim.xml
new file mode 100644
index 0000000..1d60d9d
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/items_esim.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    style="@style/SuwItemContainer"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:baselineAligned="false"
+    android:paddingStart="0dp"
+    android:orientation="horizontal">
+
+    <FrameLayout
+        android:id="@+id/suw_items_icon_container"
+        android:layout_width="46dp"
+        android:paddingStart="4dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:gravity="start">
+
+        <ImageView
+            android:id="@+id/suw_items_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxHeight="24dp"
+            android:maxWidth="24dp"
+            android:adjustViewBounds="true"
+            tools:ignore="ContentDescription" />
+
+    </FrameLayout>
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:gravity="center_vertical"
+        android:orientation="vertical">
+
+        <com.android.setupwizardlib.view.RichTextView
+            android:id="@+id/suw_items_title"
+            style="@style/SuwItemTitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="start"
+            android:textAlignment="viewStart"
+            tools:ignore="UnusedAttribute" />
+
+        <com.android.setupwizardlib.view.RichTextView
+            android:id="@+id/suw_items_summary"
+            style="@style/SuwItemSummary"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/suw_items_padding_bottom_extra"
+            android:gravity="start"
+            android:textAlignment="viewStart"
+            android:visibility="gone"
+            tools:ignore="UnusedAttribute" />
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/sim_missing_activity.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/sim_missing_activity.xml
new file mode 100644
index 0000000..18d7447
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/sim_missing_activity.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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.
+-->
+
+<com.android.setupwizardlib.GlifLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/setup_wizard_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:icon="@drawable/ic_network_signal"
+    app:suwFooter="@layout/footer_skip_only">
+
+    <LinearLayout
+        style="@style/SuwContentFrame"
+        android:id="@+id/content_frame"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <!-- String will be set at runtime because it needs to first process the ICU syntax -->
+        <TextView
+            android:id="@+id/sim_missing_description"
+            style="@style/SuwDescription.Glif"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <com.android.setupwizardlib.view.FillContentLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:maxHeight="264dp"
+            android:maxWidth="264dp"
+            android:layout_weight="1">
+
+            <com.android.setupwizardlib.view.IllustrationVideoView
+                android:id="@+id/background"
+                style="@style/SuwContentIllustration"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:contentDescription="@string/sim_missing_content_description"
+                app:suwVideo="@raw/sim_illustration" />
+
+        </com.android.setupwizardlib.view.FillContentLayout>
+
+        <LinearLayout
+            android:id="@+id/esim_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:background="?android:attr/selectableItemBackground">
+
+            <View
+                android:background="?android:attr/listDivider"
+                android:layout_width="match_parent"
+                android:layout_height="1dp" />
+
+            <include layout="@layout/items_esim" />
+
+            <View
+                android:background="?android:attr/listDivider"
+                android:layout_width="match_parent"
+                android:layout_height="1dp" />
+        </LinearLayout>
+
+    </LinearLayout>
+
+</com.android.setupwizardlib.GlifLayout>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity.xml
new file mode 100644
index 0000000..060b38f
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (c) 2016 Google Inc.
+
+    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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:scaleType="centerInside"
+        android:src="@drawable/placeholder" />
+
+    <com.google.android.setupwizard.view.WelcomeVideoView
+        android:id="@+id/background"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        app:suwVideo="@raw/welcome_bg"
+        app:loopStartMs="4300" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:weightSum="1"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/welcome_title"
+            style="@style/WelcomeTitle"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight=".226"
+            android:gravity="center"
+            android:paddingBottom="8dp"
+            android:text="@string/welcome_message"
+            android:textColor="?android:attr/textColorPrimary" />
+
+        <!-- Placeholder view to align rest of the view with the circle in video -->
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight=".361" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight=".412"
+            android:clipChildren="false"
+            android:gravity="center_horizontal"
+            android:orientation="vertical">
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="1" />
+
+            <com.google.android.setupwizard.util.LanguagePicker
+                android:id="@+id/language_picker"
+                style="@style/WelcomeBottomButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/welcome_language_picker_margin_bottom"
+                android:drawableStart="@drawable/ic_language" />
+
+            <com.google.android.setupwizard.util.BlinkButton
+                android:id="@+id/welcome_accessibility"
+                style="@style/WelcomeBottomButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:drawableStart="@drawable/ic_accessibility"
+                android:text="@string/welcome_accessibility_button" />
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="1.3" />
+
+            <com.android.setupwizardlib.view.ButtonBarLayout
+                style="@style/SuwGlifButtonBar.Stackable"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <Button
+                    android:id="@+id/welcome_emergency_dial"
+                    style="@style/SuwGlifButton.Secondary"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/emergency_dial" />
+
+                <Space
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:layout_weight="1" />
+
+                <Button
+                    android:id="@+id/start"
+                    style="@style/SuwGlifButton.Primary"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/welcome_start_button_label" />
+
+            </com.android.setupwizardlib.view.ButtonBarLayout>
+
+        </LinearLayout>
+
+    </LinearLayout>
+
+</FrameLayout>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity_pre_transition.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity_pre_transition.xml
new file mode 100644
index 0000000..8a6c758
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity_pre_transition.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (c) 2016 Google Inc.
+
+    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.
+-->
+
+<ImageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:scaleType="centerInside"
+    android:src="@drawable/placeholder" />
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/esim_illustration.mp4 b/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/esim_illustration.mp4
new file mode 100644
index 0000000..5c0eb9b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/esim_illustration.mp4
Binary files differ
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/sim_illustration.mp4 b/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/sim_illustration.mp4
new file mode 100644
index 0000000..df50ecd
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/sim_illustration.mp4
Binary files differ
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/welcome_bg.mp4 b/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/welcome_bg.mp4
new file mode 100644
index 0000000..96b30b2
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/raw/welcome_bg.mp4
Binary files differ
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/transition/welcome_enter.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/transition/welcome_enter.xml
new file mode 100644
index 0000000..a25c93b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/transition/welcome_enter.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2016 Google Inc.
+
+    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.
+-->
+
+<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
+    <fade
+        android:duration="1267"
+        android:startDelay="3400">
+        <targets>
+            <target android:targetClass="android.widget.Button" />
+            <target android:targetId="@id/welcome_title" />
+        </targets>
+    </fade>
+</transitionSet>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-af/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-af/strings.xml
new file mode 100644
index 0000000..74da8e0
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-af/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Die SIM-kaartlaai is links onder aan die kant van jou foon.\n\nGebruik die SIM-uithaalnutsding wat jy saam met jou foon gekry het om die laai uit te haal en \'n nano-SIM-kaart in te sit.\n\nNadat jy jou SIM-kaart ingesit het, kan dit \'n paar sekondes neem om dit te aktiveer."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-am/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-am/strings.xml
new file mode 100644
index 0000000..bb5a21d
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-am/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"የሲም ካርዱ መያዣ በስልክዎ የታችኛው ግራ ጠርዝ ላይ ነው የሚገኘው።\n\nመያዣውን ለማስወጣት እና ናኖ ሲም ካርድ ለማስገባት ከስልክዎ ጋር የሚመጣውን የሲም ማስወጫ መሣሪያ ይጠቀሙ።\n\nአንዴ ሲም ካርድዎን ካስገቡ በኋላ ገቢር እስኪሆን ድረስ ጥቂት ሰከንዶች ሊወስድ ይችላል።"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ar/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ar/strings.xml
new file mode 100644
index 0000000..e3a83c3
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ar/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"‏حاوية شريحة SIM موجودة على الحافة العلوية اليسرى من الهاتف.\n\nاستخدم أداة إخراج شريحة SIM المرفقة مع هاتفك لإخراج الحاوية وإدخال شريحة SIM صغيرة جدًا.\n\nبعد إدخال شريحة SIM، يمكن أن يستغرق تنشيطها بضع ثوانٍ."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-as/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-as/strings.xml
new file mode 100644
index 0000000..8b384ac
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-as/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"ছিম কাৰ্ডৰ ট্ৰে আপোনাৰ ফ\'নৰ একেবাৰে তলৰ বাওঁ চুকত অৱস্থিত।\n\nকোনো নেন\' ছিম কাৰ্ড ভৰাবলৈ আপোনাৰ ফ\'নৰ লগতে অহা ছিম উলিয়াও সঁজুলি ব্য়ৱহাৰ কৰি ছিমৰ ট্ৰে বাহিৰলৈ উলিয়াওক।\n\nআপোনাৰ ছিম কাৰ্ডখন ভৰোৱাৰ পিছত সেইখন সক্ৰিয় হ\'বলৈ কিছু সময় লাগিব পাৰে।"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-az/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-az/strings.xml
new file mode 100644
index 0000000..6bf5f65
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-az/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM kart yeri telefonunuzun aşağı sol hissəsində yerləşir.\n\nKart yerini çıxarmaq və nano SIM kartı daxil etmək üçün telefonla birlikdə əldə etdiyiniz SIM çıxarma alətindən istifadə edin.\n\nSIM kartı daxil etdikdən sonra, aktivləşmə bir neçə saniyə çəkəcək."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-b+sr+Latn/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..926704f
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Držač za SIM karticu se nalazi u gornjem levom uglu telefona.\n\nPomoću alatke za izbacivanje SIM kartice koju dobijate uz telefon izbacite držač i umetnite nano SIM karticu.\n\nKada umetnete SIM karticu, potrebno je nekoliko sekundi da se aktivira."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-be/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-be/strings.xml
new file mode 100644
index 0000000..f93e99e
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-be/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Латок для SIM-карты размяшчаецца ў ніжняй частцы вашага тэлефона злева.\n\nВыцягніце SIM-карту з дапамогай спецыяльнага інструмента, які пастаўляецца ў камплекце з тэлефонам, і ўстаўце Nano-SIM-карту.\n\nПасля ўстаўкі для актывацыі SIM-карты можа спатрэбіцца некалькі секунд."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bg/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bg/strings.xml
new file mode 100644
index 0000000..e0b6b3e
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bg/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Поставката за SIM карта се намира в долната лява част на телефона ви.\n\nИзвадете поставката посредством съответния инструмент, който сте получили с телефона си, и поставете нано SIM карта.\n\nСлед като поставите SIM картата, активирането й може да отнеме няколко секунди."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bn/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bn/strings.xml
new file mode 100644
index 0000000..f924fb8
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"সিম কার্ডের ট্রে আপনার ফোনের নিচের বাঁদিকের প্রান্তে রয়েছে।\n\nট্রে বের করে ন্যানো সিম কার্ড ঢোকানোর জন্য, আপনার ফোনের সাথে যে সিম বের করে নেওয়ার সরঞ্জামটি দেওয়া হয়েছে সেটি ব্যবহার করুন।\n\nআপনার সিম কার্ডটি ঢোকানোর পর, সেটি চালু হতে কয়েক সেকেন্ড সময় লাগতে পারে।"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bs/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bs/strings.xml
new file mode 100644
index 0000000..194aba6
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-bs/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Ležište za SIM karticu se nalazi u donjem lijevom uglu telefona.\n\nPomoću alata za izbacivanje SIM-a koji ste dobili uz telefon izbacite ležište i ubacite nano SIM karticu.\n\nKada ubacite SIM karticu, može proći nekoliko sekundi dok se ne aktivira."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ca/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ca/strings.xml
new file mode 100644
index 0000000..05a0ef4
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ca/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"La safata de la targeta SIM es troba al lateral inferior esquerre del telèfon.\n\nUtilitza l\'eina per extreure la targeta SIM que es proporciona amb el telèfon per expulsar la safata i inserir-hi una targeta nano-SIM.\n\nUn cop introdueixis la targeta SIM, pot tardar uns quants segons a activar-se."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-cs/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-cs/strings.xml
new file mode 100644
index 0000000..f0de3fc
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-cs/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Držák SIM karty se nachází na levém dolním okraji telefonu.\n\nVložte nástroj na vysunutí SIM karty, který jste s telefonem obdrželi, vyjměte držák a vložte nano SIM kartu.\n\nPo vložení SIM karty může její aktivace několik sekund trvat."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-da/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-da/strings.xml
new file mode 100644
index 0000000..a6a6e01
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-da/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM-kortbakken er placeret nederst på telefonens venstre kant.\n\nBrug værktøjet til udskubning af SIM-kort, som fulgte med telefonen, til at åbne bakken, og indsæt et nano-SIM-kort.\n\nNår du har indsat dit SIM-kort, kan der gå et par sekunder, før det aktiveres."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-de/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-de/strings.xml
new file mode 100644
index 0000000..1865321
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-de/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Das SIM-Kartenfach befindet sich links unten an deinem Smartphone.\n\nNutze den im Lieferumfang des Smartphones enthaltenen SIM-Auswurfschlüssel, um das Kartenfach herauszunehmen, und lege eine Nano-SIM-Karte ein.\n\nNachdem du die SIM-Karte eingelegt hast, kann es einige Sekunden dauern, bis sie aktiviert wird."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-el/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-el/strings.xml
new file mode 100644
index 0000000..4de9500
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-el/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Η υποδοχή της κάρτας SIM βρίσκεται στο κάτω αριστερό άκρο του τηλεφώνου σας.\n\nΧρησιμοποιήστε το εργαλείο εξαγωγής κάρτας SIM που συνοδεύει το τηλέφωνό σας, για να αφαιρέσετε την υποδοχή και να τοποθετήσετε την κάρτα nano SIM.\n\nΑφού τοποθετήσετε την κάρτα SIM, μπορεί να χρειαστούν λίγα δευτερόλεπτα για να ενεργοποιηθεί."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rAU/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..baea219
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rAU/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"The SIM card tray is located on the bottom-left edge of your phone.\n\nUse the SIM ejection tool that comes with your phone to eject the tray and insert a nano SIM card.\n\nOnce you insert your SIM card, it may take a few seconds to activate."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rCA/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..baea219
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rCA/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"The SIM card tray is located on the bottom-left edge of your phone.\n\nUse the SIM ejection tool that comes with your phone to eject the tray and insert a nano SIM card.\n\nOnce you insert your SIM card, it may take a few seconds to activate."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rGB/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..baea219
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rGB/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"The SIM card tray is located on the bottom-left edge of your phone.\n\nUse the SIM ejection tool that comes with your phone to eject the tray and insert a nano SIM card.\n\nOnce you insert your SIM card, it may take a few seconds to activate."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rIN/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..baea219
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rIN/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"The SIM card tray is located on the bottom-left edge of your phone.\n\nUse the SIM ejection tool that comes with your phone to eject the tray and insert a nano SIM card.\n\nOnce you insert your SIM card, it may take a few seconds to activate."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rXC/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..92a91d3
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-en-rXC/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎Sprint‎‏‎‎‏‎"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎The SIM card tray is located on the bottom left edge of your phone.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Use the SIM ejection tool that comes with your phone to eject the tray and insert a nano SIM card.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Once you insert your SIM card, it may take a few seconds to activate.‎‏‎‎‏‎"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-es-rUS/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..da8ae14
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-es-rUS/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"La bandeja de la tarjeta SIM se encuentra en el lado inferior izquierdo del teléfono.\n\nUsa la herramienta de extracción de la tarjeta SIM que se incluye con el teléfono para extraer la bandeja y colocar una tarjeta SIM nano.\n\nUna vez que insertes la tarjeta SIM, es posible que tarde unos segundos en activarse."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-es/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-es/strings.xml
new file mode 100644
index 0000000..5aa3d28
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-es/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"La bandeja de la tarjeta SIM está situada en el borde inferior izquierdo del teléfono.\n\nUsa la herramienta incluida con el teléfono para extraer la bandeja e insertar una tarjeta nano SIM.\n\nEs posible que la tarjeta SIM tarde unos segundos en activarse después de insertarla."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-et/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-et/strings.xml
new file mode 100644
index 0000000..e016212
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-et/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM-kaardi salv asub telefoni vasakus ülaservas.\n\nSalve väljutamiseks ja nano-SIM-kaardi sisestamiseks kasutage telefoniga kaasasolevat SIM-kaardi väljutamistööriista.\n\nKui SIM-kaardi sisestate, võib selle aktiveerimiseks kuluda mõni sekund."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-eu/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-eu/strings.xml
new file mode 100644
index 0000000..7cc688a
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-eu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM txartelaren erretilua telefonoaren behealdeko ezkerreko ertzean dago. \n\nErabili telefonoarekin zetorren tresna SIM txartela ateratzeko eta sartu nano SIM txartel bat.\n\nOndoren, segundo batzuk beharko dira txartela aktiba dadin."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fa/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fa/strings.xml
new file mode 100644
index 0000000..0b3d26a
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fa/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"سینی سیم‌کارت در بالای لبه چپ تلفنتان قرار دارد.\n\nبرای بیرون کشیدن سینی سیم‌کارت و قرار دادن سیم‌کارت نانو، از ابزار بیرون کشیدن عرضه‌شده همراه تلفن استفاده کنید.\n\nبعد از جاگذاری سیم‌کارت، ممکن است چند ثانیه طول بکشد تا فعال شود."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fi/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fi/strings.xml
new file mode 100644
index 0000000..ced4a3d
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM-korttikelkka sijaitsee puhelimen vasemmassa alareunassa.\n\nOta kelkka esiin puhelimen mukana tulleen työkalun avulla ja aseta nano-SIM-kortti kelkkaan.\n\nKun olet asettanut SIM-kortin puhelimeen, sen aktivointi voi kestää muutaman sekunnin."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fr-rCA/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..c7eee1b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fr-rCA/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Le porte-carte SIM se situe sur le bord inférieur gauche de votre téléphone.\n\nUtilisez l\'outil d\'éjection de la carte SIM fourni avec le téléphone pour éjecter le plateau et insérer une carte nano SIM.\n\nUne fois votre carte SIM insérée, l\'activation peut prendre quelques secondes."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fr/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fr/strings.xml
new file mode 100644
index 0000000..15b303d
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-fr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Le tiroir de la carte SIM se situe sur le côté de votre téléphone, en bas à gauche.\n\nUtilisez l\'outil d\'éjection de la carte SIM fourni avec le téléphone pour ouvrir le tiroir et insérer une carte nano SIM.\n\nUne fois celle-ci insérée, l\'activation peut prendre quelques secondes."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-gl/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-gl/strings.xml
new file mode 100644
index 0000000..3b86681
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-gl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"A bandexa da tarxeta SIM localízase no bordo inferior esquerdo do teléfono.\n\nUtiliza a ferramenta de expulsión da SIM que se inclúe no teléfono para expulsar a bandexa e inserir unha tarxeta nano SIM.\n\nUnha vez inserida, pode tardar uns segundos en activarse."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-gu/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-gu/strings.xml
new file mode 100644
index 0000000..f1238c1
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-gu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"સ્પ્રિન્ટ"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM કાર્ડ ટ્રે તમારા ફોનની ડાબી કિનારી પર સ્થિત છે.\n\nટ્રે બહાર કાઢવા અને નેનો SIM કાર્ડ દાખલ કરવા તમારા ફોન સાથે આવેલ SIM બહાર કાઢવાના સાધનનો ઉપયોગ કરો.\n\nએકવાર તમે તમારા SIM કાર્ડને દાખલ કરી દો તે પછી, તેને સક્રિય થવામાં થોડો સમય લાગી શકે છે."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hi/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hi/strings.xml
new file mode 100644
index 0000000..49b4eb4
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"सिम कार्ड ट्रे, आपके फ़ोन के निचले बाएं किनारे पर मौजूद है.\n\nअपने फ़ोन के साथ मिले सिम निकालने वाले टूल का इस्तेमाल करके ट्रे निकालें और उसमें नैनो सिम कार्ड लगाएं.\n\nकार्ड लगाने के बाद, उसे चालू होने में कुछ सेकंड लग सकते हैं."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hr/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hr/strings.xml
new file mode 100644
index 0000000..cffd709
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Ladica za SIM karticu nalazi se na donjem lijevom rubu telefona.\n\nPomoću alata za izbacivanje SIM-a koji ste dobili uz telefon izbacite ladicu i umetnite nano SIM karticu.\n\nAktiviranje SIM kartice nakon umetanja može trajati nekoliko sekundi."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hu/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hu/strings.xml
new file mode 100644
index 0000000..c5c6226
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"A SIM-kártya tálcája a telefon bal alsó élén található.\n\nA telefonhoz tartozó SIM-eltávolító eszközzel vegye ki a tálcát, és helyezzen be nano-SIM-kártyát.\n\nA SIM-kártya behelyezését követően néhány másodpercet vehet igénybe az aktiválás."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hy/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hy/strings.xml
new file mode 100644
index 0000000..6405c94
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-hy/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM քարտի պնակը գտնվում է հեռախոսի ներքևի ձախ անկյունում:\n\nՀեռախոսի SIM քարտը հանելու գործիքի միջոցով բացեք պնակը և տեղադրեք նանո SIM քարտը:\n\nSIM քարտը տեղադրելուց հետո դրա ակտիվացման համար կարող է մի քանի վայրկյան պահանջվել:"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-in/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-in/strings.xml
new file mode 100644
index 0000000..0fc42d9
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-in/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Slot kartu SIM terdapat di tepi kiri bawah ponsel.\n\nGunakan alat untuk mengeluarkan SIM yang disertakan dengan ponsel, untuk mengeluarkan slot dan memasukkan kartu SIM nano.\n\nSetelah kartu SIM dimasukkan, mungkin perlu waktu beberapa detik untuk diaktifkan."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-is/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-is/strings.xml
new file mode 100644
index 0000000..edc092b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-is/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM-kortabakkinn er efst á vinstri brún símans.\n\nNotaðu verkfærið sem fylgdi með símanum til þess að ná bakkanum út og setja nanó-SIM-kort í hann.\n\nÞað gæti tekið SIM-kortið nokkrar sekúndur að virka eftir að því er stungið inn."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-it/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-it/strings.xml
new file mode 100644
index 0000000..f2bacdc
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-it/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Lo slot per la scheda SIM si trova nella parte in basso a sinistra del telefono.\n\nUtilizza lo strumento di espulsione della SIM fornito con il telefono per aprire lo slot e inserire una nano SIM.\n\nDopo aver inserito la scheda SIM, potrebbero essere necessari alcuni secondi per l\'attivazione."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-iw/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-iw/strings.xml
new file mode 100644
index 0000000..98b1ac6
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-iw/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"‏מגש כרטיס ה-SIM ממוקם בפינה השמאלית-תחתונה של הטלפון.\n\nיש להשתמש בכלי הוצאת ה-SIM שצורף לטלפון כדי להוציא את המגש ולהכניס כרטיס ננו SIM.\n\nלאחר הכנסת כרטיס ה-SIM, הפעלתו עשויה להימשך מספר שניות."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ja/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ja/strings.xml
new file mode 100644
index 0000000..7e47a83
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ja/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM カード トレイはスマートフォン下部の左端にあります。\n\nスマートフォンに付属の SIM 取り出しツールを使ってトレイを取り出し、nano SIM カードを挿入します。\n\nSIM カードを挿入してから有効になるまで数秒かかることがあります。"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ka/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ka/strings.xml
new file mode 100644
index 0000000..8987f92
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ka/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM ბარათის სათავსო მდებარეობს თქვენი ტელეფონის ქვედა მარცხენა კიდეში.\n\nსათავსოს ამოსაღებად და nano-SIM ბარათის ჩასადებად გამოიყენეთ SIM ბარათის ამოსაღები ხელსაწყო, რომელიც თქვენს ტელეფონს მოჰყვა.\n\nSIM ბარათის ჩადების შემდეგ მის გააქტიურებას შეიძლება რამდენიმე წამი დასჭირდეს."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-kk/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-kk/strings.xml
new file mode 100644
index 0000000..2ce0986
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-kk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM картасының науасы телефонның төменгі сол жақ шетінде орналасқан.\n\nТелефонмен бірге берілетін SIM картасын шығару құралымен науаны шығарып, Nano-SIM картасын енгізіңіз.\n\nSIM картасы салынған соң, ол бірнеше секундтан кейін іске қосылады."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-km/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-km/strings.xml
new file mode 100644
index 0000000..4d1d672
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-km/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"ជើង​ស៊ីម​កាត​ស្ថិត​នៅ​ជ្រុង​ខាង​ឆ្វេង​ផ្នែក​ខាងក្រោម​នៃ​ទូរសព្ទ​របស់អ្នក។\n\nប្រើ​ឧបករណ៍​ដោះ​ស៊ីម​ដែល​ភ្ជាប់​មក​ជាមួយ​ទូរសព្ទ​របស់អ្នក​ដើម្បី​ដោះជើង​ស៊ីម​ចេញ រួច​ស៊ក​ស៊ីមកាត​ណាណូ​ចូល។\n\nបន្ទាប់​ពី​ស៊ក​ស៊ីមកាត​របស់អ្នក​រួច​ហើយ វា​អាច​នឹង​ចំណាយ​ពេល​ពីរ​បី​វិនាទី​ដើម្បី​បើក​ដំណើរ​ការ។"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-kn/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-kn/strings.xml
new file mode 100644
index 0000000..23563fd
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-kn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"ಸಿಮ್ ಕಾರ್ಡ್ ಟ್ರೇ ನಿಮ್ಮ ಫೋನ್‌ನ ಕೆಳಗಿನ ಎಡಭಾಗದ ತುದಿಯಲ್ಲಿದೆ.\n\nಟ್ರೇ ಅನ್ನು ಎಜೆಕ್ಟ್ ಮಾಡಲು ಮತ್ತು ನ್ಯಾನೊ ಸಿಮ್ ಕಾರ್ಡ್ ಸೇರಿಸಲು ನಿಮ್ಮ ಫೋನಿನ ಜೊತೆಗೆ ಬಂದಿರುವ ಸಿಮ್ ಎಜೆಕ್ಟ್ ಮಾಡುವ ಉಪಕರಣವನ್ನು ಬಳಸಿ.\n\nನೀವು ಒಮ್ಮೆ ನಿಮ್ಮ ಸಿಮ್ ಕಾರ್ಡ್‌ ಅನ್ನು ಸೇರಿಸಿದರೆ, ಅದು ಸಕ್ರಿಯಗೊಳ್ಳಲು ಕೆಲವು ಸೆಕೆಂಡುಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ko/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ko/strings.xml
new file mode 100644
index 0000000..070271f
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ko/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM 카드 트레이는 스마트폰의 왼쪽 하단에 있습니다.\n\n스마트폰과 함께 제공되는 SIM 제거 도구를 사용하여 트레이를 꺼내고 나노 SIM 카드를 넣으세요.\n\nSIM 카드를 삽입하면 몇 초안에 활성화됩니다."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ky/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ky/strings.xml
new file mode 100644
index 0000000..b59d35b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ky/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM карта салгыч телефонуңуздун төмөнкү сол четинде жайгашкан.\n\nСалгычты чыгарып, ага Nano-SIM\'ди салуу үчүн, телефонуңуз менен чогуу келген SIM картаны чыгаргыч куралды колдонуңуз.\n\nSIM картаңызды салгандан кийин бир нече секунд өткөндө иштей баштайт."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lo/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lo/strings.xml
new file mode 100644
index 0000000..1dcf7f4
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lo/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"ຖາດໃສ່ຊິມກາດແມ່ນຢູ່ຂອບຊ້າຍລຸ່ມຂອງໂທລະສັບທ່ານ.\n\nໃຫ້ໃຊ້ເຄື່ອງມືຖອດຖາດຊິມທີ່ມາພ້ອມກັບໂທລະສັບຂອງທ່ານເພື່ອດຶງຖາດອອກມາ ແລ້ວໃສ່ຊິມກາດແບບນາໂນເຂົ້າໄປ.\n\nເມື່ອທ່ານໃສ່ຊິມກາດຂອງທ່ານແລ້ວ, ມັນຈະໃຊ້ເວລາເລັກນ້ອຍໃນການເປີດໃຊ້."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lt/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lt/strings.xml
new file mode 100644
index 0000000..ef2e1ca
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lt/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM kortelės dėklas yra apatiniame kairiajame telefono krašte.\n\nKad pašalintumėte SIM kortelės dėklą ir įdėtumėte SIM nanokortelę, naudokite telefone esantį SIM pašalinimo įrankį.\n\nĮdėjus SIM kortelę, gali praeiti kelios sekundės, kol ji bus suaktyvinta."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lv/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lv/strings.xml
new file mode 100644
index 0000000..9f81082
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-lv/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM kartes paliktnis atrodas tālruņa apakšējā kreisajā malā.\n\nIzmantojiet tālruņa komplektācijā iekļauto SIM kartes izņemšanas rīku, lai izņemtu paliktni un ievietotu nano SIM karti.\n\nPēc SIM kartes ievietošanas var būt nepieciešamas dažas sekundes, lai to aktivizētu."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc204-mnc04/config.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc204-mnc04/config.xml
new file mode 100644
index 0000000..ba5f3b8
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc204-mnc04/config.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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>
+
+    <!-- Whether to show the always on display opt-in -->
+    <bool name="show_always_on_display_opt_in">true</bool>
+
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc310-mnc004/config.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc310-mnc004/config.xml
new file mode 100644
index 0000000..ba5f3b8
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc310-mnc004/config.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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>
+
+    <!-- Whether to show the always on display opt-in -->
+    <bool name="show_always_on_display_opt_in">true</bool>
+
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc311-mnc480/config.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc311-mnc480/config.xml
new file mode 100644
index 0000000..ba5f3b8
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mcc311-mnc480/config.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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>
+
+    <!-- Whether to show the always on display opt-in -->
+    <bool name="show_always_on_display_opt_in">true</bool>
+
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mk/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mk/strings.xml
new file mode 100644
index 0000000..a32d0f3
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Фиоката за SIM-картичка се наоѓа на долниот лев раб на телефонот.\n\nУпотребете ја алатката за отстранување на SIM-картичката што доаѓа заедно со телефонот за да ја извадите фиоката и да ја вметнете нано SIM-картичката.\n\nОткако ќе ја вметнете SIM-картичката, можеби ќе поминат неколку секунди пред таа да се активира."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ml/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ml/strings.xml
new file mode 100644
index 0000000..bae06ff
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ml/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"സ്പ്രിന്റ്"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"നിങ്ങളുടെ ഫോണിന്റെ താഴെ ഇടത് ഭാഗത്താണ് സിം കാർഡ് ട്രേ ഉള്ളത്.\n\nട്രേ ഇജക്റ്റ് ചെയ്യുന്നതിനും നാനോ സിം കാർഡ് ഇടുന്നതിനും, ഫോണിനൊപ്പം നിങ്ങൾക്ക് ലഭിച്ചിട്ടുള്ള സിം ഇജക്ഷൻ ടൂൾ ഉപയോഗിക്കുക.\n\nസിം കാർഡ് ഇട്ടുകഴിഞ്ഞാൽ, സജീവമാകുന്നതിന് കുറച്ച് സെക്കൻഡുകൾ എടുത്തേക്കാം."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mn/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mn/strings.xml
new file mode 100644
index 0000000..c1df098
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"СИМ картны оролт таны утасны зүүн доод буланд байдаг.\n\nОролтыг салгаж нано СИМ картыг оруулахын тулд таны утсанд дагалдаж ирэх СИМ салгах хэрэгслийг ашиглана уу.\n\nТа СИМ картаа оруулсны дараа идэвхжих хүртэл нь хэдэн хором хүлээх шаардлагатай."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mr/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mr/strings.xml
new file mode 100644
index 0000000..a441c32
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-mr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"सिम कार्ड ट्रे तुमच्या फोनच्या खाली डाव्या किनारीवर असते.\n\nट्रे बाहेर काढण्यासाठी आणि लहान सिम कार्ड घालण्यासाठी तुमच्या फोनसह येणारे सिम बाहेर काढण्याचे टूल वापरा.\n\nतुम्ही एकदा तुमचे सिम कार्ड घातले की, ते अ‍ॅक्टिव्हेट होण्यासाठी काही सेकंद लागू शकतात."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ms/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ms/strings.xml
new file mode 100644
index 0000000..f7e9055
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ms/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Dulang kad SIM terletak di tepi sebelah kiri bahagian atas telefon anda.\n\nGunakan alat pengeluaran SIM yang disertakan dengan telefon anda untuk mengeluarkan dulang itu, kemudian masukkan kad SIM nano.\n\nSetelah anda memasukkan kad SIM, kad itu mungkin mengambil masa beberapa saat untuk diaktifkan."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-my/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-my/strings.xml
new file mode 100644
index 0000000..f825f08
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-my/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM ကဒ်ဗန်းသည် သင့်ဖုန်း၏ဘယ်ဘက်ဘောင် အောက်ခြေတွင် ရှိပါသည်။\n\nသင့်ဖုန်းနှင့်ပါသည့် ဆင်းမ်ကဒ်ထုတ်ကိရိယာဖြင့် ၎င်းဗန်းကိုထုတ်ပြီး နာနိုဆင်းမ်ကဒ် ထည့်သွင်းပါ။\n\nသင့်ဆင်းမ်ကဒ်ကို ထည့်သွင်းပြီးသည်နှင့် စတင်အသုံးပြုနိုင်ရန် စက္ကန့်အနည်းငယ်ကြာပါသည်။"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-nb/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-nb/strings.xml
new file mode 100644
index 0000000..7372d3a
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-nb/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM-kortskuffen er plassert ved kanten nederst til venstre på telefonen din.\n\nBruk SIM-utløserverktøyet som følger med telefonen, for å løse ut skuffen. Deretter setter du inn et nano-SIM-kort.\n\nNår du har satt inn SIM-kortet, tar det noen sekunder før det blir aktivert."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ne/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ne/strings.xml
new file mode 100644
index 0000000..6b91e95
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ne/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM कार्ड ट्रे तपाईंको फोनको तल्लो भागको बायाँ किनारामा छ।\n\nट्रेलाई बाहिर निकालेर त्यसमा न्यानो SIM कार्ड हाल्नका लागि आफ्नो फोनसँगै आउने SIM निकाल्ने उपकरणको प्रयोग गर्नुहोस्।\n\nएकपटक तपाईंले आफ्नो SIM कार्ड हालेपछि त्यो सक्रिय हुन केही सेकेन्ड लाग्न सक्छ।"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-nl/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-nl/strings.xml
new file mode 100644
index 0000000..e6a2ce3
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-nl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"De simkaartlade bevindt zich in de linkeronderrand van je telefoon.\n\nGebruik het hulpmiddel voor het verwijderen van de simkaart dat bij je telefoon is geleverd om de lade naar buiten te trekken en plaats een nano-simkaart.\n\nNadat je de simkaart hebt geplaatst, kan het enkele seconden duren voordat deze wordt geactiveerd."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-or/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-or/strings.xml
new file mode 100644
index 0000000..d203704
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-or/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM କାର୍ଡ ଟ୍ରେ ଆପଣଙ୍କ ଫୋନ୍‍ର ନିମ୍ନ ବାମପଟ ଧାରରେ ଉପସ୍ଥିତ ଅଛି। \n\n ଆପଣଙ୍କ ଫୋନ୍ ସହିତ ମିଳିଥିବା SIM ଇଜେକ୍ସନ୍ ଟୂଲ୍ ସାହାଯ୍ୟରେ ଟ୍ରେକୁ କାଢ଼ନ୍ତୁ ଏବଂ ଗୋଟିଏ ନାନୋ SIM କାର୍ଡକୁ ଇନସର୍ଟ କରନ୍ତୁ। \n\n ଥରେ ଆପଣଙ୍କର SIM କାର୍ଡ ଇନସର୍ଟ ହେବାପରେ ଆକ୍ଟିଭେଟ୍ ହେବା ପାଇଁ ଏହା କିଛି ସେକେଣ୍ଡ ସମୟ ନେଇପାରେ।"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pa/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pa/strings.xml
new file mode 100644
index 0000000..70a039e
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pa/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"ਸਪ੍ਰਿੰਟ"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"ਸਿਮ ਕਾਰਡ ਟ੍ਰੇਅ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੇ ਹੇਠਲੇ ਖੱਬੇ ਕਿਨਾਰੇ \'ਤੇ ਸਥਿਤ ਹੁੰਦੀ ਹੈ।\n\nਟ੍ਰੇਅ ਨੂੰ ਬਾਹਰ ਕੱਢਣ ਅਤੇ ਇੱਕ ਨੈਨੋ ਸਿਮ ਕਾਰਡ ਦਾਖਲ ਕਰਨ ਲਈ ਆਪਣੇ ਫ਼ੋਨ ਨਾਲ ਮਿਲੇ ਸਿਮ ਕੱਢਣ ਵਾਲੇ ਟੂਲ ਦੀ ਵਰਤੋਂ ਕਰੋ।\n\nਤੁਹਾਡੇ ਵੱਲੋਂ ਸਿਮ ਕਾਰਡ ਦਾਖਲ ਕਰਨ ਦੇ ਬਾਅਦ, ਇਸ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਹੋਣ ਵਿੱਚ ਕੁਝ ਸਕਿੰਟਾਂ ਦਾ ਸਮਾਂ ਲੱਗ ਸਕਦਾ ਹੈ।"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pl/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pl/strings.xml
new file mode 100644
index 0000000..ed26de8
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Gniazdo karty SIM znajduje się z boku telefonu, w jego dolnej lewej części.\n\nAby je wysunąć i włożyć kartę nano SIM, użyj narzędzia do wysuwania karty SIM dostarczonego z telefonem.\n\nAktywowanie włożonej karty SIM może potrwać kilka sekund."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt-rBR/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..74d5912
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt-rBR/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"A bandeja do cartão SIM está localizada no canto inferior esquerdo do seu smartphone.\n\nUse a ferramenta de ejeção de SIM que acompanha o smartphone para ejetar a bandeja e inserir um cartão nano SIM.\n\nDepois que o cartão SIM for inserido, pode demorar alguns segundos para que ele seja ativado."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt-rPT/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..b979a3a
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt-rPT/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"O Tabuleiro para cartão SIM está localizado no canto inferior esquerdo do telemóvel.\n\nUtilize a ferramenta de ejeção do SIM fornecida com o telemóvel para ejetar o tabuleiro e inserir um cartão nano-SIM.\n\nDepois de o introduzir, a ativação do mesmo pode demorar alguns segundos."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt/strings.xml
new file mode 100644
index 0000000..74d5912
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-pt/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"A bandeja do cartão SIM está localizada no canto inferior esquerdo do seu smartphone.\n\nUse a ferramenta de ejeção de SIM que acompanha o smartphone para ejetar a bandeja e inserir um cartão nano SIM.\n\nDepois que o cartão SIM for inserido, pode demorar alguns segundos para que ele seja ativado."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ro/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ro/strings.xml
new file mode 100644
index 0000000..ddda5f6
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ro/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Suportul pentru cardul SIM se află pe marginea din stânga jos a telefonului.\n\nFolosiți instrumentul pentru scoaterea cardului SIM pe care l-ați primit împreună cu telefonul pentru a scoate suportul și a introduce un card nano SIM.\n\nDupă ce introduceți cardul SIM, poate dura câteva secunde până se va activa."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ru/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ru/strings.xml
new file mode 100644
index 0000000..e99722e
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ru/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Лоток для SIM-карты расположен внизу слева на боковой поверхности телефона.\n\nЧтобы извлечь лоток и вставить Nano-SIM, используйте специальный инструмент, поставляемый в комплекте с телефоном.\n\nSIM-карта активируется через несколько секунд после установки."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-si/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-si/strings.xml
new file mode 100644
index 0000000..d8bd0f1
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-si/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM කාඩ්පත් තැටිය ඔබේ දුරකථනයේ ඉහළ වම් කෙළවරේ පිහිටා ඇත.\n\nතැටිය පිටතට ගෙන නැනෝ SIM කාඩ්පතක් ඇතුළු කිරීමට ඔබේ දුරකථනය සමග එන SIM පිටතට ගැනීමේ මෙවලම භාවිත කරන්න.\n\nඔබ ඔබේ SIM කාඩ්පත ඇතුළු කළ පසුව, එය සක්‍රිය වීමට තත්පර කිහිපයක් ගත හැකිය."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sk/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sk/strings.xml
new file mode 100644
index 0000000..1321c7b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Priehradka na SIM kartu sa nachádza na ľavom hornom okraji telefónu.\n\nNástrojom na vysunutie SIM karty, ktorý ste dostali s telefónom, vytiahnite priehradku a vložte nano SIM kartu.\n\nAktivácia SIM karty po vložení môže trvať niekoľko sekúnd."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sl/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sl/strings.xml
new file mode 100644
index 0000000..23836a4
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Nosilec za kartico SIM je na spodnjem levem robu telefona.\n\nIztaknite nosilec z orodjem za izmet kartice SIM, ki je priloženo telefonu, in vstavite kartico nano-SIM.\n\nKo vstavite kartico SIM, lahko aktivacija traja nekaj sekund."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sq/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sq/strings.xml
new file mode 100644
index 0000000..69239c2
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sq/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Tabakaja e kartës SIM ndodhet në skajin lart majtas të telefonit.\n\nPërdor veglën e nxjerrjes së kartës SIM që shoqëron telefonin për të nxjerrë tabakanë dhe fut një kartë SIM nano.\n\nPasi të fusësh kartën SIM, mund të duhen disa sekonda për ta aktivizuar."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sr/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sr/strings.xml
new file mode 100644
index 0000000..e038d52
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Држач за SIM картицу се налази у горњем левом углу телефона.\n\nПомоћу алатке за избацивање SIM картице коју добијате уз телефон избаците држач и уметните нано SIM картицу.\n\nКада уметнете SIM картицу, потребно је неколико секунди да се активира."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sv/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sv/strings.xml
new file mode 100644
index 0000000..e7cf284
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sv/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Facket för SIM-kort finns på mobilens nedre vänstra kant.\n\nAnvänd SIM-utmatningsverktyget som följde med mobilen för att mata ut facket och sätt i ett nano-SIM-kort.\n\nDet kan ta några sekunder innan SIM-kortet aktiveras när du har satt i det."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sw/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sw/strings.xml
new file mode 100644
index 0000000..5a30bd5
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-sw/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Trei ya SIM kadi inapatikana kwenye pembe ya juu kushoto katika simu yako. \n\nTumia zana ya kutoa SIM inayokuja na simu yako ili ufungue trei na uweke kadi ndogo ya SIM.\n\nUkishaweka SIM kadi yako, huenda ikachukua sekunde chache kabla ianze kutumika."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ta/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ta/strings.xml
new file mode 100644
index 0000000..8450df1
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ta/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"மொபைலின் கீழ் இடது முனையில் சிம் கார்டு செருகுமிடம் உள்ளது.\n\nமொபைலுடன் கொடுக்கப்பட்ட, SIMஐ வெளியேற்றும் கருவியைப் பயன்படுத்தி, சிம் கார்டு செருகுமிடத்தை எடுத்து, அதில் நானோ SIM கார்டைச் செருகவும்.\n\nகார்டைச் செருகிய பின்பு, அது இயங்குவதற்குச் சில வினாடிகள் ஆகலாம்."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-te/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-te/strings.xml
new file mode 100644
index 0000000..4cc3661
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-te/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"సిమ్ కార్డ్ ట్రే మీ ఫోన్‌కు దిగువ ఎడమ అంచులో ఉంది.\n\nమీ ఫోన్‌తో పాటు అందించే సిమ్ తొలగింపు సాధనాన్ని ఉపయోగించి ట్రేని బయటికి తీసి, అందులో నానో సిమ్ కార్డ్ పెట్టండి.\n\nమీరు మీ సిమ్ కార్డ్‌ను పెట్టిన తర్వాత, అది యాక్టివేట్ కావడానికి కొన్ని క్షణాలు పట్టవచ్చు."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-th/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-th/strings.xml
new file mode 100644
index 0000000..3b3f54b
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-th/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"ถาดซิมการ์ดอยู่ที่ขอบด้านล่างซ้ายของโทรศัพท์\n\nใช้เครื่องมือถอดซิมที่มาพร้อมกับโทรศัพท์เพื่อดึงถาดออกมาแล้วใส่ซิมการ์ดนาโน\n\nเมื่อใส่ซิมการ์ดแล้ว อาจใช้เวลาในการเปิดใช้งาน 2-3 วินาที"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-tl/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-tl/strings.xml
new file mode 100644
index 0000000..d767407
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-tl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Mahahanap ang tray ng SIM card sa kaliwang gilid sa ibaba ng iyong telepono.\n\nGamitin ang tool sa pag-eject ng SIM na kasama ng iyong telepono para i-eject ang tray at maglagay ng nano SIM card.\n\nKapag nailagay mo ang iyong SIM card, maaaring tumagal nang ilang segundo bago ito mag-activate."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-tr/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-tr/strings.xml
new file mode 100644
index 0000000..ef75abb
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-tr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM kartı tepsisi, telefonunuzun sol alt kenarındadır.\n\nTepsiyi çıkarmak ve nano SIM kart takmak için telefonunuzla birlikte gelen SIM çıkartma aracını kullanın.\n\nSIM kartınızı taktıktan sonra etkinleşmesi için birkaç saniye geçmesi gerekebilir."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-uk/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-uk/strings.xml
new file mode 100644
index 0000000..cd0bb05
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-uk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Лоток для SIM-карти розташовано внизу ліворуч.\n\nЩоб вставити Nano SIM-карту, відкрийте лоток за допомогою інструмента, який входить у комплект телефона.\n\nАктивація SIM-карти може тривати кілька секунд."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ur/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ur/strings.xml
new file mode 100644
index 0000000..d718037
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-ur/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"‏SIM کارڈ ٹرے آپ کے فون کے نچلے کنارے میں بائیں طرف موجود ہوتا ہے۔\n\nٹرے خارج کرنے کیلئے SIM اخراج ٹول استعمال کریں جو فون کے ساتھ ہوتا ہے اور نینو SIM کارڈ داخل کریں۔\n\nآپ کے SIM کارڈ داخل کرنے کے بعد اسے فعال ہونے میں چند سیکنڈ لگ سکتے ہیں۔"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-uz/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-uz/strings.xml
new file mode 100644
index 0000000..324157f
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-uz/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM karta uyasi telefonning yuqori o‘ng burchagida joylashgan.\n\nTelefon bilan keladigan maxsus moslamadan foydalanib SIM karta tarnovini chiqaring va unga nano SIM karta soling.\n\nSIM karta solinganidan keyin uning faollashishi uchun bir necha soniya ketishi mumkin."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-vi/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-vi/strings.xml
new file mode 100644
index 0000000..7e67212
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-vi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Khay thẻ SIM nằm ở gờ dưới cùng bên trái của điện thoại.\n\nDùng dụng cụ thao khay đựng SIM đi kèm với điện thoại để tháo khay ra và lắp thẻ nano SIM vào.\n\nSau khi bạn lắp thẻ SIM, quá trình kích hoạt thẻ có thể mất vài giây."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rCN/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..1af22ec
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rCN/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM 卡托位于手机左下边缘。\n\n请使用手机随附的 SIM 卡弹出工具将卡托弹出,然后插入 Nano SIM 卡。\n\nSIM 卡插入后可能要过几秒钟才能激活。"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rHK/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..727c85d
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rHK/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM 卡槽位於手機的左下方側邊。\n\n請使用手機隨附的 SIM 卡針將 SIM 卡槽彈出,然後插入 Nano SIM 卡。\n\nSIM 卡插入後,可能需要數秒才能啟用。"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rTW/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..f20f8b5
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zh-rTW/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"SIM 卡匣位於手機左下方的側邊。\n\n請使用手機隨附的 SIM 卡彈出工具將卡匣彈出,然後插入 Nano SIM 卡。\n\nSIM 卡插入之後,可能需要幾秒鐘的時間才能啟用。"</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zu/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zu/strings.xml
new file mode 100644
index 0000000..61a5cb2
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values-zu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright (C) 2018 Google Inc.
+
+    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:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="esim_additional_carrier_name" msgid="2016054563889185083">"I-Sprint"</string>
+    <string name="sim_missing_content_description" msgid="8674668505396985731">"Ithreyi yekhadi le-SIM itholakala kunqenqema oluphansi ngakwesokunxele kwefoni yakho.\n\nSebenzisa ithuluzi lokukhipha i-SIM eliza nefoni yakho ukuze ukhiphe ithreyi uphinde ufake i-SIM card le-nano.\n\nUma usufake i-SIM card lakho, kungathatha amasekhondi ambalwa ukwenza kusebenze."</string>
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values/config.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values/config.xml
new file mode 100644
index 0000000..f91e553
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values/config.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 Google Inc.
+
+    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>
+
+    <!-- The list of actions that should be considered medium priority when deciding what kind of
+         notification should be shown for deferred setup. String items should either be an intent
+         URI present in the script, in which case it will be considered complete if that action
+         returns any result code other than ResultCodes.RESULT_SKIP, or it can be a pseudo action,
+         "lock_screen" or "restore", which will be completed when either a lock screen is set up
+         or restore is complete. -->
+    <string-array name="deferred_medium_priority_actions" translatable="false">
+        <item>intent:#Intent;action=com.google.android.setupwizard.OPA_OPT_IN;end</item>
+        <!-- "lock_screen" and "restore" are pseudo-actions. They don't correspond to actions in the
+             script, but rather functions as a string key and the completed state is set in
+             runtime in DeferredSetupActionsTracker#updateCompletedActions. -->
+        <item>lock_screen</item>
+        <item>restore</item>
+        <item>intent:#Intent;action=com.google.android.setupwizard.ASSIST_GESTURE;end</item>
+    </string-array>
+
+    <string name="demo_device_admin_component_name" translatable="false">com.google.android.retaildemo/.DemoDeviceAdminReceiver</string>
+    <string name="demo_device_admin_download_location" translatable="false">http://g.co/pixel/retaildemo</string>
+    <string name="demo_device_admin_signature_checksum" translatable="false">ZUfHPe4VDBA5gL_f_lXMmgEdeF3WlKX5mv2CBbyvH4A</string>
+
+</resources>
diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/values/strings.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/values/strings.xml
new file mode 100644
index 0000000..06b9f56
--- /dev/null
+++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/values/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (C) 2018 Google Inc.
+
+    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">
+    <!-- The carrier name which may be shown as an example of which carriers support eSIM. This should be different from the carrier name of the carrier app [CHAR LIMIT=20] -->
+    <string name="esim_additional_carrier_name">Sprint</string>
+
+    <!-- Explanatory text displayed in setup wizard when device is missing the SIM, telling the user to check the instructions text or graphics on how to insert the SIM. If needed, ICU syntax is also supported, with "sim_slots" being the number of SIM slots available on the phone. [CHAR LIMIT=NONE] -->
+    <string name="sim_missing_content_description">The SIM card tray is located on the bottom left edge of your phone.\n\nUse the SIM ejection tool that comes with your phone to eject the tray and insert a nano SIM card.\n\nOnce you insert your SIM card, it may take a few seconds to activate.</string>
+</resources>
+
diff --git a/overlay/frameworks/base/core/res/res/values/arrays.xml b/overlay/frameworks/base/core/res/res/values/arrays.xml
new file mode 100644
index 0000000..2d5e460
--- /dev/null
+++ b/overlay/frameworks/base/core/res/res/values/arrays.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 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>
+    <!-- Device-specific array of SIM slot indexes which are are embedded eUICCs.
+         e.g. If a device has two physical slots with indexes 0, 1, and slot 1 is an
+         eUICC, then the value of this array should be:
+             <integer-array name="non_removable_euicc_slots">
+                 <item>1</item>
+             </integer-array>
+         If a device has three physical slots and slot 1 and 2 are eUICCs, then the value of
+         this array should be:
+             <integer-array name="non_removable_euicc_slots">
+                <item>1</item>
+                <item>2</item>
+             </integer-array>
+         This is used to differentiate between removable eUICCs and built in eUICCs, and should
+         be set by OEMs for devices which use eUICCs. -->
+    <integer-array name="non_removable_euicc_slots">
+        <item>1</item>
+        <item>2</item>
+    </integer-array>
+</resources>
+
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
new file mode 100644
index 0000000..e7d3bd2
--- /dev/null
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2016, 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">
+
+    <!-- Our amoled doesn't animate well. -->
+    <bool name="config_animateScreenLights">false</bool>
+
+    <bool name="config_ui_enableFadingMarquee">false</bool>
+
+    <!-- Whether a software navigation bar should be shown. NOTE: in the future this may be
+         autodetected from the Configuration. -->
+    <bool name="config_showNavigationBar">true</bool>
+
+    <!--  Whether Multiuser UI should be shown -->
+    <bool name="config_enableMultiUserUI">true</bool>
+
+    <!--  Maximum number of supported users -->
+    <integer name="config_multiuserMaximumUsers">4</integer>
+
+    <!-- Boolean indicating if current platform supports HFP inband ringing -->
+    <bool name="config_bluetooth_hfp_inband_ringing_support">true</bool>
+
+    <!-- Whether Hearing Aid profile is supported -->
+    <bool name="config_hearing_aid_profile_supported">true</bool>
+
+    <!-- Boolean indicating whether the wifi chipset has dual frequency band support -->
+    <bool translatable="false" name="config_wifi_dual_band_support">true</bool>
+
+    <!-- Enable 802.11ac for Wifi hotspot (SAP) -->
+    <bool translatable="false" name="config_wifi_softap_ieee80211ac_supported">true</bool>
+
+    <!-- List of regexpressions describing the interface (if any) that represent tetherable
+         Wifi interfaces.  If the device doesn't want to support tethering over Wifi this
+         should be empty.  An example would be "softap.*" -->
+    <string-array translatable="false" name="config_tether_wifi_regexs">
+        <item>"wlan0"</item>
+        <item>"softap.*"</item>
+    </string-array>
+
+    <!-- List of regexpressions describing the interface (if any) that represent tetherable
+         USB interfaces.  If the device doesn't want to support tething over USB this should
+         be empty.  An example would be "usb.*" -->
+    <string-array translatable="false" name="config_tether_usb_regexs">
+        <item>"usb\\d"</item>
+        <item>"rndis\\d"</item>
+    </string-array>
+
+    <!-- When true use the linux /dev/input/event subsystem to detect the switch changes
+         on the headphone/microphone jack. When false use the older uevent framework. -->
+    <bool name="config_useDevInputEventForAudioJack">true</bool>
+
+    <string translatable="false" name="config_radio_access_family">GSM|CDMA|EVDO|WCDMA|LTE</string>
+
+    <!-- Enable doze mode
+         ComponentName of a dream to show whenever the system would otherwise have gone to sleep. -->
+    <string translatable="false" name="config_dozeComponent">com.android.systemui/com.android.systemui.doze.DozeService</string>
+
+    <!-- Type of the ambient tap sensor. Empty if ambient tap is not supported. -->
+    <string name="config_dozeTapSensorType" translatable="false">com.google.sensor.single_touch</string>
+
+    <!-- If this is true, the screen will come on when you unplug usb/power/whatever. -->
+    <bool name="config_unplugTurnsOnScreen">true</bool>
+
+    <!-- If device supports pickup/lift gesture -->
+    <bool name="config_dozePulsePickup">true</bool>
+
+    <!-- Screen brightness when dozing. -->
+    <integer name="config_screenBrightnessDoze">34</integer>
+
+    <!-- Whether the always on display mode is available. -->
+    <bool name="config_dozeAlwaysOnDisplayAvailable">true</bool>
+
+    <!-- Disable AOD by default -->
+    <bool name="config_dozeAlwaysOnEnabled">false</bool>
+
+    <!-- Specifies whether to decouple the auto-suspend state of the device from the display on/off state. -->
+    <bool name="config_powerDecoupleAutoSuspendModeFromDisplay">true</bool>
+
+    <!-- Specifies whether to decouple the interactive state of the device from the display on/off state. -->
+    <bool name="config_powerDecoupleInteractiveModeFromDisplay">true</bool>
+
+    <!-- Radius of the software rounded corners. -->
+    <dimen name="rounded_corner_radius">157px</dimen>
+
+    <!-- Adjustment for software rounded corners since corners aren't perfectly round. -->
+    <dimen name="rounded_corner_radius_adjustment">25px</dimen>
+
+    <!-- Height of the status bar -->
+    <dimen name="status_bar_height_portrait">28dp</dimen>
+
+    <!-- Height of area above QQS where battery/time go (equal to status bar height if > 48dp) -->
+    <dimen name="quick_qs_offset_height">171px</dimen>
+    <!-- Total height of QQS (quick_qs_offset_height + 128dp) -->
+    <dimen name="quick_qs_total_height">177dp</dimen>
+
+    <!-- Shutdown if the battery temperature exceeds (this value * 0.1) Celsius. -->
+    <integer name="config_shutdownBatteryTemperature">600</integer>
+
+    <!-- Whether or not we should show the option to show battery percentage -->
+    <bool name="config_battery_percentage_setting_available">true</bool>
+
+    <!-- Number of physical SIM slots on the device. This includes both eSIM
+    and pSIM slots, and is not necessarily the same as the number of phones/logical modems
+    supported by the device.  For example, a multi-sim device can have 2 phones/logical modems,
+    but 3 physical slots, or a single SIM device can have 1 phones/logical modems, but 2
+    physical slots (one eSIM and one pSIM) -->
+    <integer name="config_num_physical_slots">3</integer>
+
+    <!-- Enable CBRS support -->
+    <bool translatable="false" name="config_cbrs_supported">true</bool>
+
+    <!-- IWLAN-->
+    <string name="config_wlan_data_service_package">com.google.android.iwlan</string>
+    <string name="config_wlan_network_service_package">com.google.android.iwlan</string>
+    <bool name="config_wlan_data_service_conn_persistence_on_restart">false</bool>
+    <string name="config_qualified_networks_service_package">com.shannon.qualifiednetworksservice</string>
+
+    <!-- Boolean indicating USSD over IMS is allowed.
+     If it is not supported due to modem limitations, USSD send over the CS pipe instead.-->
+    <bool name="config_allow_ussd_over_ims">true</bool>
+
+    <!-- Flag specifying whether VoLTE is available on device -->
+    <bool name="config_device_volte_available">true</bool>
+
+    <!-- Flag specifying whether VoLTE is available on device -->
+    <bool name="config_device_vt_available">true</bool>
+
+    <!-- Flag specifying whether WFC over IMS is availasble on device -->
+    <bool name="config_device_wfc_ims_available">true</bool>
+
+    <!-- Whether the new Auto Selection Network UI should be shown -->
+    <bool name="config_enableNewAutoSelectNetworkUI">true</bool>
+
+    <!-- Is the device capable of hot swapping an UICC Card -->
+    <bool name="config_hotswapCapable">true</bool>
+
+    <!-- The default refresh rate. P21 manages this using the peak refresh rate setting, so set
+         this value to 0 so it has no effect. -->
+    <integer name="config_defaultRefreshRate">0</integer>
+
+    <!-- The default peak refresh rate. -->
+    <integer name="config_defaultPeakRefreshRate">60</integer>
+
+    <!-- Optional IPsec algorithms enabled by this device, defaulting to empty. OEMs can override
+         it by providing a list of algorithm names in an overlay config.xml file.
+
+         As Android releases new versions, more algorithms are becoming mandatory. Mandatory
+         algorithms will be automatically enabled on the device. Optional algorithms need
+         to be explicitly declared in this resource to be enabled.
+             * SDK level 28 makes the following algorithms mandatory : "cbc(aes)", "hmac(md5)",
+               "hmac(sha1)", "hmac(sha256)", "hmac(sha384)", "hmac(sha512)", "rfc4106(gcm(aes))"
+             * SDK level 31 makes the following algorithms mandatory : "rfc3686(ctr(aes))",
+               "xcbc(aes)", "rfc7539esp(chacha20,poly1305)"
+     -->
+    <string-array name="config_optionalIpSecAlgorithms" translatable="false">
+        <!-- Add algorithm here -->
+        <item>"xcbc(aes)"</item>
+        <item>"rfc3686(ctr(aes))"</item>
+    </string-array>
+
+    <!-- List supported color modes. -->
+    <integer-array name="config_availableColorModes">
+        <item>0</item> <!-- COLOR_MODE_NATURAL -->
+        <item>256</item> <!-- vendor color mode boosted -->
+        <item>3</item> <!-- COLOR_MODE_AUTOMATIC -->
+    </integer-array>
+
+    <integer-array name="config_mappedColorModes">
+        <item>0</item> <!-- COLOR_MODE_NATURAL -->
+        <item>256</item> <!-- COLOR_MODE_BOOSTED -->
+        <item>2</item> <!-- COLOR_MODE_SATURATED -->
+        <item>3</item> <!-- COLOR_MODE_AUTOMATIC -->
+    </integer-array>
+
+    <!-- Color mode to use when accessibility transforms are enabled. This color mode must be
+     supported by the device, but not necessarily appear in config_availableColorModes. The
+     regularly selected color mode will be used if this value is negative. -->
+    <integer name="config_accessibilityColorMode">2</integer>
+
+    <!-- Boolean indicating whether the HWC setColorTransform function can be performed efficiently
+         in hardware. -->
+    <bool name="config_setColorTransformAccelerated">true</bool>
+
+    <!-- Default color temperature, in Kelvin, to tint the screen when night display is
+         activated. -->
+    <integer name="config_nightDisplayColorTemperatureDefault">3339</integer>
+
+    <!-- Whether the device enable the standalone (SA) mode of 5G NR.-->
+    <bool name="config_telephony5gStandalone">true</bool>
+    <!-- Whether the device enable the non-standalone (NSA) mode of 5G NR.-->
+    <bool name="config_telephony5gNonStandalone">true</bool>
+
+    <!-- An array of device capabilities defined by GSMA SGP.22 v2.2.2, and their corresponding major
+     version. -->
+     <string-array translatable="false" name="config_telephonyEuiccDeviceCapabilities">
+          <item>"gsm,8"</item>
+          <item>"utran,9"</item>
+          <item>"eutran,15"</item>
+          <item>"nrepc,15"</item>
+          <item>"nr5gc,15"</item>
+          <item>"eutran5gc,15"</item>
+     </string-array>
+
+    <!-- Auto-brightness sensor type string -->
+    <string name="config_displayLightSensorType">"com.google.sensor.auto_brightness"</string>
+
+    <!-- Default list of files pinned by the Pinner Service -->
+    <string-array translatable="false" name="config_defaultPinnerServiceFiles">
+        <item>"/apex/com.android.art/javalib/core-oj.jar"</item>
+        <item>"/apex/com.android.art/javalib/core-libart.jar"</item>
+        <item>"/apex/com.android.media/javalib/updatable-media.jar"</item>
+        <item>"/system/framework/framework.jar"</item>
+        <item>"/system/framework/services.jar"</item>
+        <item>"/system/bin/surfaceflinger"</item>
+        <item>"/system_ext/priv-app/SystemUIGoogle/SystemUIGoogle.apk"</item>
+    </string-array>
+
+    <!-- Should the pinner service pin the Camera application? -->
+    <bool name="config_pinnerCameraApp">true</bool>
+
+    <!-- Should the pinner service pin the Home application? -->
+    <bool name="config_pinnerHomeApp">true</bool>
+
+    <!-- The default intensity level for haptic feedback. See
+         Settings.System.HAPTIC_FEEDBACK_INTENSITY more details on the constant values and
+         meanings. -->
+    <integer name="config_defaultHapticFeedbackIntensity">3</integer>
+    <!-- The default intensity level for notification vibrations. See
+         Settings.System.NOTIFICATION_VIBRATION_INTENSITY more details on the constant values and
+         meanings. -->
+    <integer name="config_defaultNotificationVibrationIntensity">3</integer>
+    <!-- The default intensity level for notification vibrations. See
+         Settings.System.RING_VIBRATION_INTENSITY more details on the constant values and
+         meanings. -->
+    <integer name="config_defaultRingVibrationIntensity">3</integer>
+
+    <!-- Enables or disables haptic effect when the text insertion/selection handle is moved
+          manually by the user. Off by default, since the expected haptic feedback may not be
+          available on some devices. -->
+    <bool name="config_enableHapticTextHandle">true</bool>
+
+    <!-- Enable Zram writeback feature to allow unused pages in zram be written to flash. -->
+    <bool name="config_zramWriteback">true</bool>
+</resources>
diff --git a/overlay/frameworks/base/packages/SettingsLib/res/drawable-mcc310-mnc004/ic_5g_plus_mobiledata.xml b/overlay/frameworks/base/packages/SettingsLib/res/drawable-mcc310-mnc004/ic_5g_plus_mobiledata.xml
new file mode 100644
index 0000000..998db3b
--- /dev/null
+++ b/overlay/frameworks/base/packages/SettingsLib/res/drawable-mcc310-mnc004/ic_5g_plus_mobiledata.xml
@@ -0,0 +1,36 @@
+<!--
+     Copyright (C) 2020 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:viewportWidth="22"
+    android:viewportHeight="17"
+    android:width="22dp"
+    android:height="17dp">
+  <group>
+    <group>
+      <path android:fillColor="#FF000000"
+          android:pathData="M19.98,3.54v2.81c0,0.47 -0.15,0.84 -0.44,1.11s-0.69,0.41 -1.2,0.41c-0.5,0 -0.89,-0.13 -1.19,-0.4s-0.44,-0.63 -0.45,-1.09V3.54h0.88v2.82c0,0.28 0.07,0.48 0.2,0.61c0.13,0.13 0.32,0.19 0.56,0.19c0.49,0 0.75,-0.26 0.75,-0.78V3.54H19.98z"/>
+      <path android:fillColor="#FF000000"
+            android:pathData="M19.42,12.25l0.57,-3.04h0.88l-0.95,4.27h-0.88l-0.69,-2.85l-0.69,2.85h-0.88l-0.95,-4.27h0.88l0.58,3.03l0.7,-3.03h0.74L19.42,12.25z"/>
+    </group>
+    <group>
+      <path android:fillColor="#FF000000"
+          android:pathData="M0.94,8.49l0.43,-4.96H5.7v1.17H2.39L2.15,7.41c0.41,-0.29 0.85,-0.43 1.33,-0.43c0.77,0 1.38,0.3 1.83,0.9c0.44,0.6 0.66,1.41 0.66,2.43c0,1.03 -0.24,1.84 -0.72,2.43c-0.48,0.59 -1.14,0.88 -1.98,0.88c-0.75,0 -1.36,-0.24 -1.83,-0.73c-0.47,-0.49 -0.74,-1.16 -0.81,-2.02h1.13c0.07,0.57 0.23,1 0.49,1.29c0.26,0.29 0.59,0.43 1.01,0.43c0.47,0 0.84,-0.2 1.1,-0.61c0.26,-0.41 0.4,-0.96 0.4,-1.65c0,-0.65 -0.14,-1.18 -0.43,-1.59C4.05,8.32 3.67,8.11 3.19,8.11c-0.4,0 -0.72,0.1 -0.96,0.31L1.9,8.75L0.94,8.49z"/>
+    </group>
+    <path android:fillColor="#FF000000"
+        android:pathData="M13.86,12.24l-0.22,0.27c-0.63,0.73 -1.55,1.1 -2.76,1.1c-1.08,0 -1.92,-0.36 -2.53,-1.07c-0.61,-0.71 -0.93,-1.72 -0.94,-3.02V7.56c0,-1.39 0.28,-2.44 0.84,-3.13c0.56,-0.7 1.39,-1.04 2.51,-1.04c0.95,0 1.69,0.26 2.22,0.79c0.54,0.53 0.83,1.28 0.89,2.26h-1.25c-0.05,-0.62 -0.22,-1.1 -0.52,-1.45c-0.29,-0.35 -0.74,-0.52 -1.34,-0.52c-0.72,0 -1.24,0.23 -1.57,0.7C8.85,5.63 8.68,6.37 8.66,7.4v2.03c0,1 0.19,1.77 0.57,2.31c0.38,0.54 0.93,0.8 1.65,0.8c0.67,0 1.19,-0.16 1.54,-0.49l0.18,-0.17V9.59h-1.82V8.52h3.07V12.24z"/>
+  </group>
+</vector>
+
diff --git a/overlay/frameworks/base/packages/SettingsLib/res/drawable-mcc311-mnc480/ic_5g_plus_mobiledata.xml b/overlay/frameworks/base/packages/SettingsLib/res/drawable-mcc311-mnc480/ic_5g_plus_mobiledata.xml
new file mode 100644
index 0000000..998db3b
--- /dev/null
+++ b/overlay/frameworks/base/packages/SettingsLib/res/drawable-mcc311-mnc480/ic_5g_plus_mobiledata.xml
@@ -0,0 +1,36 @@
+<!--
+     Copyright (C) 2020 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:viewportWidth="22"
+    android:viewportHeight="17"
+    android:width="22dp"
+    android:height="17dp">
+  <group>
+    <group>
+      <path android:fillColor="#FF000000"
+          android:pathData="M19.98,3.54v2.81c0,0.47 -0.15,0.84 -0.44,1.11s-0.69,0.41 -1.2,0.41c-0.5,0 -0.89,-0.13 -1.19,-0.4s-0.44,-0.63 -0.45,-1.09V3.54h0.88v2.82c0,0.28 0.07,0.48 0.2,0.61c0.13,0.13 0.32,0.19 0.56,0.19c0.49,0 0.75,-0.26 0.75,-0.78V3.54H19.98z"/>
+      <path android:fillColor="#FF000000"
+            android:pathData="M19.42,12.25l0.57,-3.04h0.88l-0.95,4.27h-0.88l-0.69,-2.85l-0.69,2.85h-0.88l-0.95,-4.27h0.88l0.58,3.03l0.7,-3.03h0.74L19.42,12.25z"/>
+    </group>
+    <group>
+      <path android:fillColor="#FF000000"
+          android:pathData="M0.94,8.49l0.43,-4.96H5.7v1.17H2.39L2.15,7.41c0.41,-0.29 0.85,-0.43 1.33,-0.43c0.77,0 1.38,0.3 1.83,0.9c0.44,0.6 0.66,1.41 0.66,2.43c0,1.03 -0.24,1.84 -0.72,2.43c-0.48,0.59 -1.14,0.88 -1.98,0.88c-0.75,0 -1.36,-0.24 -1.83,-0.73c-0.47,-0.49 -0.74,-1.16 -0.81,-2.02h1.13c0.07,0.57 0.23,1 0.49,1.29c0.26,0.29 0.59,0.43 1.01,0.43c0.47,0 0.84,-0.2 1.1,-0.61c0.26,-0.41 0.4,-0.96 0.4,-1.65c0,-0.65 -0.14,-1.18 -0.43,-1.59C4.05,8.32 3.67,8.11 3.19,8.11c-0.4,0 -0.72,0.1 -0.96,0.31L1.9,8.75L0.94,8.49z"/>
+    </group>
+    <path android:fillColor="#FF000000"
+        android:pathData="M13.86,12.24l-0.22,0.27c-0.63,0.73 -1.55,1.1 -2.76,1.1c-1.08,0 -1.92,-0.36 -2.53,-1.07c-0.61,-0.71 -0.93,-1.72 -0.94,-3.02V7.56c0,-1.39 0.28,-2.44 0.84,-3.13c0.56,-0.7 1.39,-1.04 2.51,-1.04c0.95,0 1.69,0.26 2.22,0.79c0.54,0.53 0.83,1.28 0.89,2.26h-1.25c-0.05,-0.62 -0.22,-1.1 -0.52,-1.45c-0.29,-0.35 -0.74,-0.52 -1.34,-0.52c-0.72,0 -1.24,0.23 -1.57,0.7C8.85,5.63 8.68,6.37 8.66,7.4v2.03c0,1 0.19,1.77 0.57,2.31c0.38,0.54 0.93,0.8 1.65,0.8c0.67,0 1.19,-0.16 1.54,-0.49l0.18,-0.17V9.59h-1.82V8.52h3.07V12.24z"/>
+  </group>
+</vector>
+
diff --git a/overlay/frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml
new file mode 100644
index 0000000..f8ed0c0
--- /dev/null
+++ b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc310-mnc004/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2020, 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">
+    <!-- Content description of the data connection type 5G UW. [CHAR LIMIT=NONE] -->
+    <string name="data_connection_5g_plus" translatable="false">5G UW</string>
+</resources>
diff --git a/overlay/frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml
new file mode 100644
index 0000000..f8ed0c0
--- /dev/null
+++ b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc311-mnc480/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2020, 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">
+    <!-- Content description of the data connection type 5G UW. [CHAR LIMIT=NONE] -->
+    <string name="data_connection_5g_plus" translatable="false">5G UW</string>
+</resources>
diff --git a/overlay/frameworks/base/packages/SettingsLib/res/values-mcc440-mnc20/config.xml b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc440-mnc20/config.xml
new file mode 100644
index 0000000..69c1dac
--- /dev/null
+++ b/overlay/frameworks/base/packages/SettingsLib/res/values-mcc440-mnc20/config.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2020, 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 my 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.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+     for different hardware and product builds. -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Control whether status bar should distinguish HSPA data icon from UMTS
+    data icon on devices -->
+    <bool name="config_hspa_data_distinguishable">false</bool>
+</resources>
diff --git a/overlay/frameworks/base/packages/SystemUI/res/drawable/rounded.xml b/overlay/frameworks/base/packages/SystemUI/res/drawable/rounded.xml
new file mode 100644
index 0000000..7d30f44
--- /dev/null
+++ b/overlay/frameworks/base/packages/SystemUI/res/drawable/rounded.xml
@@ -0,0 +1,24 @@
+<!--
+    Copyright (C) 2020 The Android Open Source Project
+
+    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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="8dp"
+    android:height="8dp"
+    android:viewportWidth="21"
+    android:viewportHeight="21">
+
+    <path
+        android:fillColor="#000000"
+        android:pathData="M0,0L25,0C22.74,0 21.99,0 21.31,0C19.94,0.01 18.83,0.04 17.73,0.11C16.91,0.17 16.09,0.25 15.3,0.36C14.5,0.48 13.72,0.62 12.95,0.81C11.42,1.19 9.97,1.72 8.65,2.43C7.32,3.14 6.12,4.02 5.08,5.07C4.04,6.11 3.15,7.31 2.44,8.64C1.73,9.97 1.19,11.42 0.82,12.94C0.63,13.7 0.48,14.49 0.37,15.29C0.25,16.09 0.17,16.9 0.12,17.72C0.05,18.82 0.02,19.93 0.01,21.55C0.01,22.36 0.01,23.3 0.01,25.56L0,0Z" />
+</vector>
+
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values/config.xml b/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
new file mode 100644
index 0000000..3697d3a
--- /dev/null
+++ b/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2020, 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.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+     for different hardware and product builds. -->
+<resources>
+    <!-- Doze: does this device support STATE_DOZE?  -->
+    <bool name="doze_display_state_supported">true</bool>
+
+    <!-- Doze: does this device support STATE_DOZE_SUSPEND?  -->
+    <bool name="doze_suspend_display_state_supported">false</bool>
+
+    <string name="config_rounded_mask">M21,0C19.94,0.01 18.83,0.04 17.73,0.11C16.91,0.17 16.09,0.25 15.3,0.36C14.5,0.48 13.72,0.62 12.95,0.81C11.42,1.19 9.97,1.72 8.65,2.43C7.32,3.14 6.12,4.02 5.08,5.07C4.04,6.11 3.15,7.31 2.44,8.64C1.73,9.97 1.19,11.42 0.82,12.94C0.63,13.7 0.48,14.49 0.37,15.29C0.25,16.09 0.17,16.9 0.12,17.72C0.05,18.82 0.02,19.93 0.01,21.55</string>
+
+    <!-- Override value to use for proximity sensor.  -->
+    <string name="proximity_sensor_type" translatable="false">android.sensor.light</string>
+
+    <!-- If using proximity_sensor_type, specifies a threshold value to distinguish near and
+         far break points. A sensor value less than this is considered "near". -->
+    <item name="proximity_sensor_threshold" translatable="false" format="float" type="dimen">12</item>
+
+    <!-- If using proximity_sensor_type, specifies a threshold value to distinguish near and
+         far break points. A sensor value more than this is considered "far". If not set,
+         proximity_sensor_threshold is used. This allows one to implement a latching mechanism for
+         noisy sensors. -->
+    <item name="proximity_sensor_threshold_latch" translatable="false" format="float" type="dimen">24</item>
+
+    <string name="proximity_sensor_secondary_type" translatable="false">android.sensor.proximity</string>
+    <item name="proximity_sensor_secondary_threshold" translatable="false" format="float" type="dimen">5</item>
+</resources>
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml b/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml
new file mode 100644
index 0000000..cea6e90
--- /dev/null
+++ b/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2020, 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>
+    <!-- for 20dp of padding at 3.5px/dp at default density -->
+    <dimen name="rounded_corner_content_padding">70px</dimen>
+
+    <!-- the padding on the top of the statusbar (usually 0) -->
+    <dimen name="status_bar_padding_top">1dp</dimen>
+
+    <!-- Padding for the system icons on the keyguard (when no multi user switch is showing).
+    The icons always have a 4dp padding in the container so we only need 56 extra px of padding
+    for the corners -->
+    <dimen name="system_icons_super_container_avatarless_margin_end">56px</dimen>
+
+    <!-- Multi user switch has some intrinsic padding to it -->
+    <dimen name="multi_user_switch_keyguard_margin">40px</dimen>
+
+    <dimen name="keyguard_carrier_text_margin">70px</dimen>
+
+</resources>
diff --git a/overlay/packages/apps/Settings/res/values/bools.xml b/overlay/packages/apps/Settings/res/values/bools.xml
new file mode 100755
index 0000000..7b26044
--- /dev/null
+++ b/overlay/packages/apps/Settings/res/values/bools.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 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>
+    <!-- Whether to show a preference item for mobile plan -->
+    <bool name="config_show_mobile_plan">false</bool>
+</resources>
diff --git a/overlay/packages/apps/Settings/res/values/config.xml b/overlay/packages/apps/Settings/res/values/config.xml
new file mode 100755
index 0000000..376cdba
--- /dev/null
+++ b/overlay/packages/apps/Settings/res/values/config.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 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>
+    <!-- Whether to aggregate for network selection list-->
+    <bool name="config_network_selection_list_aggregation_enabled">true</bool>
+
+    <!-- The switch preference's default value of connectivity helper call quality-->
+    <bool name="config_show_connectivity_helper_call_quality">true</bool>
+    <!-- The switch preference's default value of connectivity helper DeviceToDevice-->
+    <bool name="config_show_connectivity_helper_d2d">true</bool>
+</resources>
diff --git a/overlay/packages/services/Telephony/res/values/config.xml b/overlay/packages/services/Telephony/res/values/config.xml
new file mode 100644
index 0000000..0afa3ca
--- /dev/null
+++ b/overlay/packages/services/Telephony/res/values/config.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 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.
+-->
+
+<!-- Phone app resources that may need to be customized
+     for different hardware or product builds. -->
+<resources>
+    <!-- String indicating the package name of the device ImsService implementation for MMTEL. -->
+    <string name="config_ims_mmtel_package">com.shannon.imsservice</string>
+
+    <!-- String indicating the package name of the device ImsService implementation for RCS. -->
+    <string name="config_ims_rcs_package">com.shannon.rcsservice</string>
+
+    <!-- Flag indicating whether the device supports RTT (real-time text) -->
+    <bool name="config_support_rtt">true</bool>
+
+    <!-- Show enabled lte option for lte device -->
+    <bool name="config_enabled_lte" translatable="false">true</bool>
+
+    <!-- String indicating the package name of the device GbaService implementation. -->
+    <string name="config_gba_package" translatable="false">com.shannon.rcsservice</string>
+
+    <!-- This device requires that emergency calls are placed over the default data SIM.
+         This is done mainly to avoid placing emergency calls over CROSS SIM when even
+         though it's the default voice SIM. -->
+    <bool name="config_gnss_supl_requires_default_data_for_emergency">true</bool>
+</resources>
diff --git a/pixelstats/Android.bp b/pixelstats/Android.bp
new file mode 100644
index 0000000..45768d1
--- /dev/null
+++ b/pixelstats/Android.bp
@@ -0,0 +1,42 @@
+//
+// Copyright (C) 2017 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 {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+cc_binary {
+  name: "pixelstats-vendor",
+  init_rc: ["pixelstats-vendor.gs101.rc"],
+  srcs: [
+    "service.cpp",
+  ],
+  shared_libs: [
+    "libbase",
+    "liblog",
+    "libutils",
+    "libpixelstats",
+  ],
+  proprietary: true,
+  static_libs: ["chre_client"],
+  header_libs: ["chre_api"],
+}
diff --git a/pixelstats/pixelstats-vendor.gs101.rc b/pixelstats/pixelstats-vendor.gs101.rc
new file mode 100644
index 0000000..98af5fc
--- /dev/null
+++ b/pixelstats/pixelstats-vendor.gs101.rc
@@ -0,0 +1,8 @@
+on property:sys.boot_completed=1
+    start vendor.pixelstats_vendor
+
+service vendor.pixelstats_vendor /vendor/bin/pixelstats-vendor
+    class hal
+    user system
+    group system context_hub readproc
+    disabled
\ No newline at end of file
diff --git a/pixelstats/service.cpp b/pixelstats/service.cpp
new file mode 100644
index 0000000..4201207
--- /dev/null
+++ b/pixelstats/service.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#define LOG_TAG "pixelstats"
+
+#include <android-base/logging.h>
+#include <pixelstats/SysfsCollector.h>
+#include <pixelstats/UeventListener.h>
+
+#include <thread>
+
+using android::hardware::google::pixel::SysfsCollector;
+using android::hardware::google::pixel::UeventListener;
+
+#define UFSHC_PATH(filename) "/dev/sys/block/bootdevice/" #filename
+const struct SysfsCollector::SysfsPaths sysfs_paths = {
+        .SlowioReadCntPath = UFSHC_PATH(slowio_read_cnt),
+        .SlowioWriteCntPath = UFSHC_PATH(slowio_write_cnt),
+        .SlowioUnmapCntPath = UFSHC_PATH(slowio_unmap_cnt),
+        .SlowioSyncCntPath = UFSHC_PATH(slowio_sync_cnt),
+        .CycleCountBinsPath = "/sys/class/power_supply/battery/cycle_counts",
+        .UFSLifetimeA = UFSHC_PATH(health_descriptor/life_time_estimation_a),
+        .UFSLifetimeB = UFSHC_PATH(health_descriptor/life_time_estimation_b),
+        .UFSLifetimeC = UFSHC_PATH(health_descriptor/life_time_estimation_c),
+        .UFSHostResetPath = UFSHC_PATH(err_stats/dev_reset_count),
+        .F2fsStatsPath = "/sys/fs/f2fs/",
+        .ImpedancePath = "/sys/devices/platform/audiometrics/speaker_impedance",
+        .CodecPath = "/sys/devices/platform/audiometrics/codec_state",
+        .EEPROMPath = "/dev/battery_history",
+        .MitigationPath = "/sys/devices/virtual/pmic/mitigation"};
+const struct UeventListener::UeventPaths ueventPaths = {
+        .AudioUevent = "/devices/virtual/amcs/amcs",
+        .WirelessChargerPtmcPath = "/sys/class/power_supply/wireless/device/ptmc_id"};
+
+int main() {
+    LOG(INFO) << "starting PixelStats";
+
+    UeventListener ueventListener(ueventPaths);
+    std::thread listenThread(&UeventListener::ListenForever, &ueventListener);
+    listenThread.detach();
+
+    SysfsCollector collector(sysfs_paths);
+    collector.collect();  // This blocks forever.
+
+    return 0;
+}
diff --git a/powerhint.json b/powerhint.json
new file mode 100644
index 0000000..406154e
--- /dev/null
+++ b/powerhint.json
@@ -0,0 +1,1131 @@
+{
+  "Nodes": [
+    {
+      "Name": "MemFreq",
+      "Path": "/sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/min_freq",
+      "Values": [
+        "3172000",
+        "1014000",
+        "421000"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "IntFreq",
+      "Path": "/sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/min_freq",
+      "Values": [
+        "533000",
+        "100000"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPULittleClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "1098000",
+        "1401000",
+        "1197000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPULittleClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1197000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUMidClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "1024000",
+        "1999000",
+        "1491000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUMidClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1197000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUBigClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu6/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "984000",
+        "1826000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUBigClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu6/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1106000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "GPUMinFreq",
+      "Path": "/sys/devices/platform/1c500000.mali/hint_min_freq",
+      "Values": [
+        "762000",
+        "471000",
+        "400000",
+        "302000",
+        "151000"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUUtilThreshold",
+      "Path": "/sys/kernel/vendor_sched/util_threshold",
+      "Values": [
+        "1280",
+        "1100"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "MIFTargetLoad",
+      "Path": "/sys/class/devfreq/17000010.devfreq_mif/interactive/target_load",
+      "Values": [
+        "20 5 80",
+        "20 10 80"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "TAUClampBoost",
+      "Path": "/sys/kernel/vendor_sched/ta_uclamp_min",
+      "Values": [
+        "553",
+        "1",
+        "246",
+        "185",
+        "123",
+        "62"
+      ],
+      "DefaultIndex": 1,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "SFUClampBoost",
+      "Path": "/sys/kernel/vendor_sched/sf_uclamp_min",
+      "Values": [
+        "65",
+        "30"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "MLUclampBoost",
+      "Path": "/sys/kernel/vendor_sched/nnapi_uclamp_min",
+      "Values": [
+          "154",
+          "512"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CDPreferIdle",
+      "Path": "/sys/kernel/vendor_sched/cam_prefer_idle",
+      "Values": [
+        "0",
+        "1"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CDCpuset",
+      "Path": "/dev/cpuset/camera-daemon/cpus",
+      "Values": [
+        "4-7",
+        "0-7"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CDHighCpusetCpus",
+      "Path": "/dev/cpuset/camera-daemon-high-group/cpus",
+      "Values": [
+        "6-7",
+        "0-7"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CDMidCpusetCpus",
+      "Path": "/dev/cpuset/camera-daemon-mid-group/cpus",
+      "Values": [
+        "4-5",
+        "0-7"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CDMidHighCpusetCpus",
+      "Path": "/dev/cpuset/camera-daemon-mid-high-group/cpus",
+      "Values": [
+        "4-7",
+        "0-7"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "F2fsRecessModeEnable",
+      "Path": "/dev/sys/fs/by-name/userdata/gc_urgent",
+      "Values": [
+        "2",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "TAPreferHighCap",
+      "Path": "/sys/kernel/vendor_sched/ta_prefer_high_cap",
+      "Values": [
+        "1",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "TAPreferIdle",
+      "Path": "/sys/kernel/vendor_sched/ta_prefer_idle",
+      "Values": [
+        "0",
+        "1"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CDPreferHighCap",
+      "Path": "/sys/kernel/vendor_sched/cam_prefer_high_cap",
+      "Values": [
+        "1",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "HighCapacityStartCpu",
+      "Path": "/sys/kernel/vendor_sched/high_capacity_start_cpu",
+      "Values": [
+        "4",
+        "6"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "DisplayWakeup",
+      "Path": "/sys/devices/platform/1c300000.drmdecon/early_wakeup",
+      "Values": [
+        "1",
+        "0"
+      ]
+    },
+    {
+      "Name": "LimitFlashCurrent",
+      "Path": "vendor.camera.max_flash_current",
+      "Values": [
+        "100",
+        "1500"
+      ],
+      "ResetOnInit": true,
+      "Type": "Property"
+    },
+    {
+      "Name": "PowerHALRenderingState",
+      "Path": "vendor.powerhal.rendering",
+      "Values": [
+        "EXPENSIVE_RENDERING",
+        ""
+      ],
+      "Type": "Property"
+    },
+    {
+      "Name": "INTCAMFreq",
+      "Path": "/sys/devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam/min_freq",
+      "Values": [
+        "664000",
+        "67000"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "TNRFreq",
+      "Path": "/sys/devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr/min_freq",
+      "Values": [
+        "664000",
+        "67000"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "BigControlTempSet",
+      "Path": "/dev/thermal/tz-by-name/BIG/trip_point_2_temp",
+      "Values": [
+        "90000",
+        "80000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    },
+    {
+      "Name": "MidControlTempSet",
+      "Path": "/dev/thermal/tz-by-name/MID/trip_point_2_temp",
+      "Values": [
+        "90000",
+        "80000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    },
+    {
+      "Name": "LittleControlTempSet",
+      "Path": "/dev/thermal/tz-by-name/LITTLE/trip_point_2_temp",
+      "Values": [
+        "90000",
+        "80000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    },
+    {
+      "Name": "G3dControlTempSet",
+      "Path": "/dev/thermal/tz-by-name/G3D/trip_point_2_temp",
+      "Values": [
+        "90000",
+        "80000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    },
+    {
+      "Name": "BigSwitchOnTempSet",
+      "Path": "/dev/thermal/tz-by-name/BIG/trip_point_1_temp",
+      "Values": [
+        "70000",
+        "60000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    },
+    {
+      "Name": "MidSwitchOnTempSet",
+      "Path": "/dev/thermal/tz-by-name/MID/trip_point_1_temp",
+      "Values": [
+        "70000",
+        "60000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    },
+    {
+      "Name": "LittleSwitchOnTempSet",
+      "Path": "/dev/thermal/tz-by-name/LITTLE/trip_point_1_temp",
+      "Values": [
+        "70000",
+        "60000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    },
+    {
+      "Name": "G3dSwitchOnTempSet",
+      "Path": "/dev/thermal/tz-by-name/G3D/trip_point_1_temp",
+      "Values": [
+        "70000",
+        "60000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": false
+    }
+  ],
+  "Actions": [
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Node": "SFUClampBoost",
+      "Duration": 5000,
+      "Value": "65"
+    },
+    {
+      "PowerHint": "DEVICE_IDLE",
+      "Node": "F2fsRecessModeEnable",
+      "Duration": 0,
+      "Value": "2"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "TAUClampBoost",
+      "Duration": 5000,
+      "Value": "553"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "MemFreq",
+      "Duration": 5000,
+      "Value": "3172000"
+    },
+    {
+      "PowerHint": "DISPLAY_INACTIVE",
+      "Node": "F2fsRecessModeEnable",
+      "Duration": 0,
+      "Value": "2"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "MemFreq",
+      "Duration": 1000,
+      "Value": "3172000"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUMidClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CDCpuset",
+      "Duration": 1000,
+      "Value": "4-7"
+    },
+    {
+      "PowerHint": "CAMERA_CPU_THROTTLE",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "984000"
+    },
+    {
+      "PowerHint": "CAMERA_CPU_THROTTLE",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "1024000"
+    },
+    {
+      "PowerHint": "CAMERA_CPU_THROTTLE",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "1098000"
+    },
+    {
+      "PowerHint": "CAMERA_SHOT",
+      "Node": "MemFreq",
+      "Duration": 300,
+      "Value": "3172000"
+    },
+    {
+      "PowerHint": "CAMERA_SHOT",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 300,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_SHOT",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 300,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_SHOT",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 300,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_SHOT",
+      "Node": "CPUMidClusterMinFreq",
+      "Duration": 300,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_BACKEND_BOOST",
+      "Node": "MemFreq",
+      "Duration": 1000,
+      "Value": "3172000"
+    },
+    {
+      "PowerHint": "CAMERA_BACKEND_BOOST",
+      "Node": "IntFreq",
+      "Duration": 1000,
+      "Value": "533000"
+    },
+    {
+      "PowerHint": "CAMERA_BACKEND_BOOST",
+      "Node": "INTCAMFreq",
+      "Duration": 1000,
+      "Value": "664000"
+    },
+    {
+      "PowerHint": "CAMERA_BACKEND_BOOST",
+      "Node": "TNRFreq",
+      "Duration": 1000,
+      "Value": "664000"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGCPU",
+      "Node": "TAPreferHighCap",
+      "Duration": 3000,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGCPU",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGCPU",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGMIDCPU",
+      "Node": "TAPreferHighCap",
+      "Duration": 3000,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGMIDCPU",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGMIDCPU",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGMIDCPU",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_BIGMIDCPU",
+      "Node": "CPUMidClusterMinFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_ALLCPU",
+      "Node": "TAPreferHighCap",
+      "Duration": 3000,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_ALLCPU",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_ALLCPU",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_ALLCPU",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_ALLCPU",
+      "Node": "CPUMidClusterMinFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_ALLCPU",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "GCA_CAMERA_SHOT_ALLCPU",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 3000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1401000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1491000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1826000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "CDPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "HighCapacityStartCpu",
+      "Duration": 0,
+      "Value": "4"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "302000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "MemFreq",
+      "Duration": 0,
+      "Value": "1014000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "MIFTargetLoad",
+      "Duration": 0,
+      "Value": "20 10 80"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "TAPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "TAPreferIdle",
+      "Duration": 0,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "CDHighCpusetCpus",
+      "Duration": 0,
+      "Value": "6-7"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "CDMidCpusetCpus",
+      "Duration": 0,
+      "Value": "4-5"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_EXTREME",
+      "Node": "CDMidHighCpusetCpus",
+      "Duration": 0,
+      "Value": "4-7"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CPUUtilThreshold",
+      "Duration": 0,
+      "Value": "1100"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1491000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1826000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CDPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "HighCapacityStartCpu",
+      "Duration": 0,
+      "Value": "4"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1401000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "302000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "MemFreq",
+      "Duration": 0,
+      "Value": "1014000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "MIFTargetLoad",
+      "Duration": 0,
+      "Value": "20 10 80"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "TAPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "TAPreferIdle",
+      "Duration": 0,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CDHighCpusetCpus",
+      "Duration": 0,
+      "Value": "6-7"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CDMidCpusetCpus",
+      "Duration": 0,
+      "Value": "4-5"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_HIGH",
+      "Node": "CDMidHighCpusetCpus",
+      "Duration": 0,
+      "Value": "4-7"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CDPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "TAPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1826000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1491000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1401000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "302000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "MemFreq",
+      "Duration": 0,
+      "Value": "1014000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "MIFTargetLoad",
+      "Duration": 0,
+      "Value": "20 10 80"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CDHighCpusetCpus",
+      "Duration": 0,
+      "Value": "6-7"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CDMidCpusetCpus",
+      "Duration": 0,
+      "Value": "4-5"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CDMidHighCpusetCpus",
+      "Duration": 0,
+      "Value": "4-7"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CDPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "TAPreferHighCap",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CDPreferIdle",
+      "Duration": 0,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "HighCapacityStartCpu",
+      "Duration": 0,
+      "Value": "4"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1826000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1491000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1401000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "302000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "MemFreq",
+      "Duration": 0,
+      "Value": "1014000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "MIFTargetLoad",
+      "Duration": 0,
+      "Value": "20 10 80"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CDHighCpusetCpus",
+      "Duration": 0,
+      "Value": "6-7"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CDMidCpusetCpus",
+      "Duration": 0,
+      "Value": "4-5"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_LOW",
+      "Node": "CDMidHighCpusetCpus",
+      "Duration": 0,
+      "Value": "4-7"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUMidClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "REFRESH_120FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "185"
+    },
+    {
+      "PowerHint": "REFRESH_90FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "123"
+    },
+    {
+      "PowerHint": "REFRESH_60FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "62"
+    },
+    {
+      "PowerHint": "ADPF_DISABLE_TA_BOOST",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "DISABLE_TA_BOOST",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "DoHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "INTERACTION"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "DISPLAY_UPDATE_IMMINENT"
+    },
+    {
+      "PowerHint": "DISPLAY_UPDATE_IMMINENT",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "DISPLAY_UPDATE_IMMINENT",
+      "Node": "DisplayWakeup",
+      "Duration": 50,
+      "Value": "1"
+    },
+    {
+      "PowerHint": "THERMAL_FLASH_LED_REDUCE_CRITICAL",
+      "Node": "LimitFlashCurrent",
+      "Duration": 0,
+      "Value": "100"
+    },
+    {
+      "PowerHint": "THERMAL_FLASH_LED_REDUCE_NONE",
+      "Node": "LimitFlashCurrent",
+      "Duration": 0,
+      "Value": "1500"
+    },
+    {
+      "PowerHint": "EXPENSIVE_RENDERING",
+      "Node": "PowerHALRenderingState",
+      "Duration": 0,
+      "Value": "EXPENSIVE_RENDERING"
+    },
+    {
+      "PowerHint": "EXPENSIVE_RENDERING",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "400000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "BigControlTempSet",
+      "Duration": 0,
+      "Value": "80000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "MidControlTempSet",
+      "Duration": 0,
+      "Value": "80000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "LittleControlTempSet",
+      "Duration": 0,
+      "Value": "80000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "G3dControlTempSet",
+      "Duration": 0,
+      "Value": "80000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "BigSwitchOnTempSet",
+      "Duration": 0,
+      "Value": "60000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "MidSwitchOnTempSet",
+      "Duration": 0,
+      "Value": "60000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "LittleSwitchOnTempSet",
+      "Duration": 0,
+      "Value": "60000"
+    },
+    {
+      "PowerHint": "THERMAL_VIRTUAL-SKIN_SEVERE",
+      "Node": "G3dSwitchOnTempSet",
+      "Duration": 0,
+      "Value": "60000"
+    },
+    {
+      "PowerHint": "FACE_UNLOCK_BOOST",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FACE_UNLOCK_BOOST",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FP_BOOST",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FP_BOOST",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "ML_ACC",
+      "Node": "MLUclampBoost",
+      "Duration": 2000,
+      "Value": "512"
+    }
+  ]
+}
diff --git a/powerhint_a0.json b/powerhint_a0.json
new file mode 100644
index 0000000..2136a2b
--- /dev/null
+++ b/powerhint_a0.json
@@ -0,0 +1,364 @@
+{
+  "Nodes": [
+    {
+      "Name": "CPULittleClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "1197000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPULittleClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1197000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUBigClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "1999000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUBigClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1197000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "GPUMinFreq",
+      "Path": "/sys/devices/platform/1c500000.mali/hint_min_freq",
+      "Values": [
+        "151000",
+        "302000",
+        "455000",
+        "572000",
+        "670000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "TAUClampBoost",
+      "Path": "/sys/kernel/vendor_sched/ta_uclamp_min",
+      "Values": [
+        "0",
+        "410",
+        "308",
+        "205",
+        "103"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "UfsClkGateEnable",
+      "Path": "/dev/sys/block/bootdevice/clkgate_enable",
+      "Values": [
+        "0",
+        "1"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "F2fsRecessModeEnable",
+      "Path": "/dev/sys/fs/by-name/userdata/gc_urgent",
+      "Values": [
+        "2",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "PowerHALRenderingState",
+      "Path": "vendor.powerhal.rendering",
+      "Values": [
+        "EXPENSIVE_RENDERING",
+        ""
+      ],
+      "Type": "Property"
+    }
+  ],
+  "Actions": [
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "DoHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "DoHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "DoHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "INTERACTION_120",
+      "Node": "TAUClampBoost",
+      "Duration": 6000,
+      "Value": "410"
+    },
+    {
+      "PowerHint": "INTERACTION_90",
+      "Node": "TAUClampBoost",
+      "Duration": 6000,
+      "Value": "308"
+    },
+    {
+      "PowerHint": "INTERACTION_60",
+      "Node": "TAUClampBoost",
+      "Duration": 6000,
+      "Value": "205"
+    },
+    {
+      "PowerHint": "REFRESH_120FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "REFRESH_120FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "REFRESH_90FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "REFRESH_90FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "REFRESH_60FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "REFRESH_60FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Node": "UfsClkGateEnable",
+      "Duration": 200,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DEVICE_IDLE",
+      "Node": "F2fsRecessModeEnable",
+      "Duration": 0,
+      "Value": "2"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "TAUClampBoost",
+      "Duration": 5000,
+      "Value": "308"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "UfsClkGateEnable",
+      "Duration": 5000,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DISPLAY_INACTIVE",
+      "Node": "F2fsRecessModeEnable",
+      "Duration": 0,
+      "Value": "2"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "UfsClkGateEnable",
+      "Duration": 1000,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1999000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "670000"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "EXPENSIVE_RENDERING",
+      "Node": "PowerHALRenderingState",
+      "Duration": 0,
+      "Value": "EXPENSIVE_RENDERING"
+    },
+    {
+      "PowerHint": "EXPENSIVE_RENDERING",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "455000"
+    },
+    {
+      "PowerHint": "REFRESH_120FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "308"
+    },
+    {
+      "PowerHint": "REFRESH_90FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "205"
+    },
+    {
+      "PowerHint": "REFRESH_60FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "103"
+    },
+    {
+      "PowerHint": "ADPF_DISABLE_TA_BOOST",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DISABLE_TA_BOOST",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "DoHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "DISPLAY_UPDATE_IMMINENT"
+    },
+    {
+      "PowerHint": "DISPLAY_UPDATE_IMMINENT",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    }
+  ]
+}
diff --git a/powerhint_a1.json b/powerhint_a1.json
new file mode 100644
index 0000000..c3d1581
--- /dev/null
+++ b/powerhint_a1.json
@@ -0,0 +1,418 @@
+{
+  "Nodes": [
+    {
+      "Name": "CPULittleClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "1197000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPULittleClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1197000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUMidClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "1999000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUMidClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1197000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUBigClusterMaxFreq",
+      "Path": "/sys/devices/system/cpu/cpu6/cpufreq/scaling_max_freq",
+      "Values": [
+        "9999999",
+        "1999000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "CPUBigClusterMinFreq",
+      "Path": "/sys/devices/system/cpu/cpu6/cpufreq/scaling_min_freq",
+      "Values": [
+        "9999999",
+        "1106000",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "GPUMinFreq",
+      "Path": "/sys/devices/platform/1c500000.mali/hint_min_freq",
+      "Values": [
+        "151000",
+        "302000",
+        "455000",
+        "572000",
+        "670000"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "TAUClampBoost",
+      "Path": "/sys/kernel/vendor_sched/ta_uclamp_min",
+      "Values": [
+        "0",
+        "410",
+        "308",
+        "205",
+        "103"
+      ],
+      "DefaultIndex": 0,
+      "ResetOnInit": true
+    },
+    {
+      "Name": "UfsClkGateEnable",
+      "Path": "/dev/sys/block/bootdevice/clkgate_enable",
+      "Values": [
+        "0",
+        "1"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "F2fsRecessModeEnable",
+      "Path": "/dev/sys/fs/by-name/userdata/gc_urgent",
+      "Values": [
+        "2",
+        "0"
+      ],
+      "ResetOnInit": true
+    },
+    {
+      "Name": "LimitFlashCurrent",
+      "Path": "vendor.camera.max_flash_current",
+      "Values": [
+        "100",
+        "1500"
+      ],
+      "ResetOnInit": true,
+      "Type": "Property"
+    },
+    {
+      "Name": "PowerHALRenderingState",
+      "Path": "vendor.powerhal.rendering",
+      "Values": [
+        "EXPENSIVE_RENDERING",
+        ""
+      ],
+      "Type": "Property"
+    }
+  ],
+  "Actions": [
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "DoHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "DoHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Type": "DoHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "INTERACTION_120",
+      "Node": "TAUClampBoost",
+      "Duration": 6000,
+      "Value": "410"
+    },
+    {
+      "PowerHint": "INTERACTION_90",
+      "Node": "TAUClampBoost",
+      "Duration": 6000,
+      "Value": "308"
+    },
+    {
+      "PowerHint": "INTERACTION_60",
+      "Node": "TAUClampBoost",
+      "Duration": 6000,
+      "Value": "205"
+    },
+    {
+      "PowerHint": "REFRESH_120FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "REFRESH_120FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "REFRESH_90FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "REFRESH_90FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "REFRESH_60FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "REFRESH_60FPS",
+      "Type": "MaskHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "INTERACTION_120"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "INTERACTION_90"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "INTERACTION_60"
+    },
+    {
+      "PowerHint": "INTERACTION",
+      "Node": "UfsClkGateEnable",
+      "Duration": 200,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DEVICE_IDLE",
+      "Node": "F2fsRecessModeEnable",
+      "Duration": 0,
+      "Value": "2"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPUMidClusterMinFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 5000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "TAUClampBoost",
+      "Duration": 5000,
+      "Value": "308"
+    },
+    {
+      "PowerHint": "LAUNCH",
+      "Node": "UfsClkGateEnable",
+      "Duration": 5000,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DISPLAY_INACTIVE",
+      "Node": "F2fsRecessModeEnable",
+      "Duration": 0,
+      "Value": "2"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 1000,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "CAMERA_LAUNCH",
+      "Node": "UfsClkGateEnable",
+      "Duration": 1000,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "1999000"
+    },
+    {
+      "PowerHint": "CAMERA_STREAMING_STANDARD",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "670000"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUBigClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUBigClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUMidClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPUMidClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPULittleClusterMaxFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "FIXED_PERFORMANCE",
+      "Node": "CPULittleClusterMinFreq",
+      "Duration": 0,
+      "Value": "9999999"
+    },
+    {
+      "PowerHint": "REFRESH_120FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "308"
+    },
+    {
+      "PowerHint": "REFRESH_90FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "205"
+    },
+    {
+      "PowerHint": "REFRESH_60FPS",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "103"
+    },
+    {
+      "PowerHint": "ADPF_DISABLE_TA_BOOST",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DISABLE_TA_BOOST",
+      "Node": "TAUClampBoost",
+      "Duration": 0,
+      "Value": "0"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "DoHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "DISPLAY_IDLE",
+      "Type": "EndHint",
+      "Value": "DISPLAY_UPDATE_IMMINENT"
+    },
+    {
+      "PowerHint": "DISPLAY_UPDATE_IMMINENT",
+      "Type": "EndHint",
+      "Value": "DISABLE_TA_BOOST"
+    },
+    {
+      "PowerHint": "THERMAL_FLASH_LED_REDUCE_CRITICAL",
+      "Node": "LimitFlashCurrent",
+      "Duration": 0,
+      "Value": "100"
+    },
+    {
+      "PowerHint": "THERMAL_FLASH_LED_REDUCE_NONE",
+      "Node": "LimitFlashCurrent",
+      "Duration": 0,
+      "Value": "1500"
+    },
+    {
+      "PowerHint": "EXPENSIVE_RENDERING",
+      "Node": "PowerHALRenderingState",
+      "Duration": 0,
+      "Value": "EXPENSIVE_RENDERING"
+    },
+    {
+      "PowerHint": "EXPENSIVE_RENDERING",
+      "Node": "GPUMinFreq",
+      "Duration": 0,
+      "Value": "455000"
+    }
+  ]
+}
diff --git a/powerstats/Android.bp b/powerstats/Android.bp
new file mode 100644
index 0000000..10ecbed
--- /dev/null
+++ b/powerstats/Android.bp
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 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 {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+cc_library {
+    name: "android.hardware.power.stats-impl.gs101",
+    vendor_available: true,
+    export_include_dirs: ["include"],
+    defaults: ["powerstats_pixel_defaults"],
+
+    srcs: [
+        "*.cpp",
+    ],
+
+    shared_libs: [
+        "android.hardware.power.stats-impl.pixel",
+    ],
+}
diff --git a/powerstats/AocStateResidencyDataProvider.cpp b/powerstats/AocStateResidencyDataProvider.cpp
new file mode 100644
index 0000000..c64496d
--- /dev/null
+++ b/powerstats/AocStateResidencyDataProvider.cpp
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#include "AocStateResidencyDataProvider.h"
+
+#include <android-base/logging.h>
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+AocStateResidencyDataProvider::AocStateResidencyDataProvider(std::vector<std::pair<std::string,
+        std::string>> ids, std::vector<std::pair<std::string, std::string>> states) {
+    // AoC stats are reported in ticks of 244.140625ns. The transform
+    // function converts ticks to milliseconds.
+    // 1000000 / 244.140625 = 4096.
+    static const uint64_t AOC_CLK = 4096;
+    std::function<uint64_t(uint64_t)> aocTickToMs = [](uint64_t a) { return a / AOC_CLK; };
+    GenericStateResidencyDataProvider::StateResidencyConfig config = {
+            .entryCountSupported = true,
+            .entryCountPrefix = "Counter:",
+            .totalTimeSupported = true,
+            .totalTimePrefix = "Cumulative time:",
+            .totalTimeTransform = aocTickToMs,
+            .lastEntrySupported = true,
+            .lastEntryPrefix = "Time last entered:",
+            .lastEntryTransform = aocTickToMs,
+    };
+    for (const auto &id : ids) {
+        for (const auto &state : states) {
+            std::vector<std::pair<std::string, std::string>> aocStateHeaders = {
+                std::make_pair(state.first, ""),
+            };
+            std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
+            cfgs.emplace_back(generateGenericStateResidencyConfigs(config, aocStateHeaders),
+                    id.first, "");
+            std::unique_ptr<GenericStateResidencyDataProvider> sdp(
+                    new GenericStateResidencyDataProvider(id.second + state.second, cfgs));
+            mProviders[id.first].push_back(std::move(sdp));
+        }
+    }
+}
+
+bool AocStateResidencyDataProvider::getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) {
+    // States from the same power entity are merged.
+    bool ret = true;
+    for (const auto &providerList : mProviders) {
+        int32_t stateId = 0;
+        std::string curEntity = providerList.first;
+        std::vector<StateResidency> stateResidencies;
+
+        // Iterate over each provider in the providerList, appending each of the states
+        for (const auto &provider : providerList.second) {
+            std::unordered_map<std::string, std::vector<StateResidency>> residency;
+            ret &= provider->getStateResidencies(&residency);
+
+            // Each provider should only return data for curEntity but checking anyway
+            if (residency.find(curEntity) != residency.end()) {
+                for (auto &r : residency.at(curEntity)) {
+                    /*
+                     * Modifying stateId here because we are stitching together infos from
+                     * multiple GenericStateResidencyDataProviders. stateId must be modified
+                     * to maintain uniqueness for a given entity
+                     */
+                    r.id = stateId++;
+                    stateResidencies.push_back(r);
+                }
+            }
+        }
+
+        residencies->emplace(curEntity, stateResidencies);
+    }
+    return ret;
+}
+
+std::unordered_map<std::string, std::vector<State>> AocStateResidencyDataProvider::getInfo() {
+    // States from the same power entity are merged
+    std::unordered_map<std::string, std::vector<State>> infos;
+    for (const auto &providerList : mProviders) {
+        int32_t stateId = 0;
+        std::string curEntity = providerList.first;
+        std::vector<State> stateInfos;
+
+        // Iterate over each provider in the providerList, appending each of the states
+        for (const auto &provider : providerList.second) {
+            std::unordered_map<std::string, std::vector<State>> info = provider->getInfo();
+
+            // Each provider should only return data for curEntity but checking anyway
+            if (info.find(curEntity) != info.end()) {
+                for (auto &i : info.at(curEntity)) {
+                    /*
+                     * Modifying stateId because we are stitching together infos from
+                     * multiple GenericStateResidencyDataProviders. stateId must be modified
+                     * to maintain uniqueness for a given entity
+                     */
+                    i.id = stateId++;
+                    stateInfos.push_back(i);
+                }
+            }
+        }
+
+        infos.emplace(curEntity, stateInfos);
+    }
+
+    return infos;
+}
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
diff --git a/powerstats/AocStateResidencyDataProvider.h b/powerstats/AocStateResidencyDataProvider.h
new file mode 100644
index 0000000..5008912
--- /dev/null
+++ b/powerstats/AocStateResidencyDataProvider.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+#pragma once
+
+#include <dataproviders/GenericStateResidencyDataProvider.h>
+#include <PowerStatsAidl.h>
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+class AocStateResidencyDataProvider : public PowerStats::IStateResidencyDataProvider {
+  public:
+    AocStateResidencyDataProvider(std::vector<std::pair<std::string, std::string>> ids,
+                                  std::vector<std::pair<std::string, std::string>> states);
+    ~AocStateResidencyDataProvider() = default;
+    bool getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) override;
+    std::unordered_map<std::string, std::vector<State>> getInfo() override;
+
+  private:
+    std::unordered_map<std::string /* entity name */,
+        std::vector<std::unique_ptr<GenericStateResidencyDataProvider>> /* providers */> mProviders;
+};
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
\ No newline at end of file
diff --git a/powerstats/DevfreqStateResidencyDataProvider.cpp b/powerstats/DevfreqStateResidencyDataProvider.cpp
new file mode 100644
index 0000000..d59e1e5
--- /dev/null
+++ b/powerstats/DevfreqStateResidencyDataProvider.cpp
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+#include "DevfreqStateResidencyDataProvider.h"
+
+#include <android-base/logging.h>
+
+static const std::string nameSuffix = "-DVFS";
+static const std::string pathSuffix = "/time_in_state";
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+DevfreqStateResidencyDataProvider::DevfreqStateResidencyDataProvider(const std::string& name,
+        const std::string& path) : mName(name + nameSuffix), mPath(path + pathSuffix) {}
+
+bool DevfreqStateResidencyDataProvider::extractNum(const char *str, char **str_end, int base,
+        int64_t* num) {
+    // errno can be set to any non-zero value by a library function call
+    // regardless of whether there was an error, so it needs to be cleared
+    // in order to check the error set by strtoll
+    errno = 0;
+    *num = std::strtoll(str, str_end, base);
+    return (errno != ERANGE);
+}
+
+std::vector<std::pair<int64_t, int64_t>> DevfreqStateResidencyDataProvider::parseTimeInState() {
+    // Using FILE* instead of std::ifstream for performance reasons
+    std::unique_ptr<FILE, decltype(&fclose)> fp(fopen(mPath.c_str(), "r"), fclose);
+    if (!fp) {
+        PLOG(ERROR) << "Failed to open file " << mPath;
+        return {};
+    }
+
+    std::vector<std::pair<int64_t, int64_t>> timeInState;
+
+    char *line = nullptr;
+    size_t len = 0;
+    while (getline(&line, &len, fp.get()) != -1) {
+        char* pEnd;
+        int64_t frequencyHz, totalTimeMs;
+        if (!extractNum(line, &pEnd, 10, &frequencyHz) ||
+            !extractNum(pEnd, &pEnd, 10, &totalTimeMs)) {
+            PLOG(ERROR) << "Failed to parse " << mPath;
+            free(line);
+            return {};
+        }
+
+        timeInState.push_back({frequencyHz, totalTimeMs});
+    }
+
+    free(line);
+    return timeInState;
+}
+
+bool DevfreqStateResidencyDataProvider::getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) {
+    std::vector<std::pair<int64_t, int64_t>> timeInState = parseTimeInState();
+
+    if (timeInState.empty()) {
+        return false;
+    }
+
+    int32_t id = 0;
+    std::vector<StateResidency> stateResidencies;
+    for (const auto[frequencyHz, totalTimeMs] : timeInState) {
+        StateResidency s = {.id = id++, .totalTimeInStateMs = totalTimeMs};
+        stateResidencies.push_back(s);
+    }
+
+    residencies->emplace(mName, stateResidencies);
+    return true;
+}
+
+std::unordered_map<std::string, std::vector<State>> DevfreqStateResidencyDataProvider::getInfo() {
+    std::vector<std::pair<int64_t, int64_t>> timeInState = parseTimeInState();
+
+    if (timeInState.empty()) {
+        return {};
+    }
+
+    int32_t id = 0;
+    std::vector<State> states;
+    for (const auto[frequencyHz, totalTimeMs] : timeInState) {
+        State s = {.id = id++, .name = std::to_string(frequencyHz / 1000) + "MHz"};
+        states.push_back(s);
+    }
+
+    return {{mName, states}};
+}
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
diff --git a/powerstats/DevfreqStateResidencyDataProvider.h b/powerstats/DevfreqStateResidencyDataProvider.h
new file mode 100644
index 0000000..8341b43
--- /dev/null
+++ b/powerstats/DevfreqStateResidencyDataProvider.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+#pragma once
+
+#include <PowerStatsAidl.h>
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+class DevfreqStateResidencyDataProvider : public PowerStats::IStateResidencyDataProvider {
+  public:
+    DevfreqStateResidencyDataProvider(const std::string& name, const std::string& path);
+    ~DevfreqStateResidencyDataProvider() = default;
+
+    /*
+     * See IStateResidencyDataProvider::getStateResidencies
+     */
+    bool getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) override;
+
+    /*
+     * See IStateResidencyDataProvider::getInfo
+     */
+    std::unordered_map<std::string, std::vector<State>> getInfo() override;
+
+  private:
+    bool extractNum(const char *str, char **str_end, int base, int64_t* num);
+    std::vector<std::pair<int64_t, int64_t>> parseTimeInState();
+    const std::string mName;
+    const std::string mPath;
+};
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
diff --git a/powerstats/DvfsStateResidencyDataProvider.cpp b/powerstats/DvfsStateResidencyDataProvider.cpp
new file mode 100644
index 0000000..511159e
--- /dev/null
+++ b/powerstats/DvfsStateResidencyDataProvider.cpp
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+#include "DvfsStateResidencyDataProvider.h"
+
+#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <android-base/strings.h>
+
+#include <string>
+#include <utility>
+
+using android::base::ParseUint;
+using android::base::Split;
+using android::base::StartsWith;
+using android::base::Trim;
+
+static const std::string nameSuffix = "-DVFS";
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+DvfsStateResidencyDataProvider::DvfsStateResidencyDataProvider(std::string path, uint64_t clockRate,
+        std::vector<Config> cfgs)
+    : mPath(std::move(path)), mClockRate(clockRate), mPowerEntities(std::move(cfgs)) {}
+
+int32_t DvfsStateResidencyDataProvider::matchEntity(char const *line) {
+    for (int32_t i = 0; i < mPowerEntities.size(); i++) {
+        if (mPowerEntities[i].powerEntityName == Trim(std::string(line))) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+int32_t DvfsStateResidencyDataProvider::matchState(char const *line, const Config& powerEntity) {
+    for (int32_t i = 0; i < powerEntity.states.size(); i++) {
+        if (StartsWith(Trim(std::string(line)), powerEntity.states[i].second)) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+bool DvfsStateResidencyDataProvider::parseState(char const *line, uint64_t *duration,
+        uint64_t *count) {
+    std::vector<std::string> parts = Split(line, " ");
+    if (parts.size() != 7) {
+        return false;
+    }
+    if (!ParseUint(Trim(parts[3]), count)) {
+        return false;
+    }
+    if (!ParseUint(Trim(parts[6]), duration)) {
+        return false;
+    }
+    return true;
+}
+
+bool DvfsStateResidencyDataProvider::getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) {
+    std::unique_ptr<FILE, decltype(&fclose)> fp(fopen(mPath.c_str(), "r"), fclose);
+    if (!fp) {
+        PLOG(ERROR) << __func__ << ":Failed to open file " << mPath;
+        return false;
+    }
+
+    for (const Config &powerEntity : mPowerEntities) {
+        std::vector<StateResidency> stateResidency(powerEntity.states.size());
+        for (int32_t i = 0; i < stateResidency.size(); i++) {
+            stateResidency[i].id = i;
+        }
+        residencies->emplace(powerEntity.powerEntityName + nameSuffix, stateResidency);
+    }
+
+    size_t len = 0;
+    char *line = nullptr;
+
+    int32_t temp, powerEntityIndex, stateId = -1;
+    uint64_t duration, count;
+    auto it = residencies->end();
+
+    while (getline(&line, &len, fp.get()) != -1) {
+        temp = matchEntity(line);
+        // Assign new index only when a new valid entity is encountered.
+        if (temp >= 0) {
+            powerEntityIndex = temp;
+            it = residencies->find(mPowerEntities[powerEntityIndex].powerEntityName + nameSuffix);
+        }
+
+        if (it != residencies->end()) {
+            stateId = matchState(line, mPowerEntities[powerEntityIndex]);
+
+            if (stateId >= 0) {
+                if (parseState(line, &duration, &count)) {
+                    it->second[stateId].totalTimeInStateMs =
+                            duration / mClockRate;
+                    it->second[stateId].totalStateEntryCount = count;
+                } else {
+                    LOG(ERROR) << "Failed to parse duration and count from [" << std::string(line)
+                               << "]";
+                    return false;
+                }
+            }
+        }
+    }
+
+    free(line);
+
+    return true;
+}
+
+std::unordered_map<std::string, std::vector<State>> DvfsStateResidencyDataProvider::getInfo() {
+    std::unordered_map<std::string, std::vector<State>> info;
+    for (auto const &entity : mPowerEntities) {
+        std::vector<State> stateInfo(entity.states.size());
+        int32_t stateId = 0;
+        for (auto const &state : entity.states) {
+            stateInfo[stateId] = State{
+                .id = stateId,
+                .name = state.first
+            };
+            stateId++;
+        }
+        info.emplace(entity.powerEntityName + nameSuffix, stateInfo);
+    }
+    return info;
+}
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
diff --git a/powerstats/DvfsStateResidencyDataProvider.h b/powerstats/DvfsStateResidencyDataProvider.h
new file mode 100644
index 0000000..ca8ab22
--- /dev/null
+++ b/powerstats/DvfsStateResidencyDataProvider.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+#pragma once
+
+#include <PowerStatsAidl.h>
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+class DvfsStateResidencyDataProvider : public PowerStats::IStateResidencyDataProvider {
+  public:
+    class Config {
+      public:
+        // Power entity name to parse.
+        std::string powerEntityName;
+
+        // List of state pairs (name to display, name to parse).
+        std::vector<std::pair<std::string, std::string>> states;
+    };
+    /*
+     * path - path to dvfs sysfs node.
+     * clockRate - clock rate in KHz.
+     */
+    DvfsStateResidencyDataProvider(std::string path, uint64_t clockRate, std::vector<Config> cfgs);
+    ~DvfsStateResidencyDataProvider() = default;
+
+    /*
+     * See IStateResidencyDataProvider::getStateResidencies
+     */
+    bool getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) override;
+
+    /*
+     * See IStateResidencyDataProvider::getInfo
+     */
+    std::unordered_map<std::string, std::vector<State>> getInfo() override;
+
+  private:
+    int32_t matchEntity(char const *line);
+    int32_t matchState(char const *line, const Config& powerEntity);
+    bool parseState(char const *line, uint64_t *duration, uint64_t *count);
+
+    const std::string mPath;
+    const uint64_t mClockRate;
+    std::vector<Config> mPowerEntities;
+};
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
diff --git a/powerstats/Gs101CommonDataProviders.cpp b/powerstats/Gs101CommonDataProviders.cpp
new file mode 100644
index 0000000..e156b7b
--- /dev/null
+++ b/powerstats/Gs101CommonDataProviders.cpp
@@ -0,0 +1,677 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#include <PowerStatsAidl.h>
+#include <Gs101CommonDataProviders.h>
+#include "AocStateResidencyDataProvider.h"
+#include "DevfreqStateResidencyDataProvider.h"
+#include "DvfsStateResidencyDataProvider.h"
+#include "UfsStateResidencyDataProvider.h"
+#include <dataproviders/GenericStateResidencyDataProvider.h>
+#include <dataproviders/IioEnergyMeterDataProvider.h>
+#include <dataproviders/PowerStatsEnergyConsumer.h>
+#include <dataproviders/PowerStatsEnergyAttribution.h>
+#include <dataproviders/PixelStateResidencyDataProvider.h>
+
+#include <android-base/logging.h>
+#include <android-base/properties.h>
+#include <android/binder_manager.h>
+#include <android/binder_process.h>
+#include <log/log.h>
+
+using aidl::android::hardware::power::stats::AocStateResidencyDataProvider;
+using aidl::android::hardware::power::stats::DevfreqStateResidencyDataProvider;
+using aidl::android::hardware::power::stats::DvfsStateResidencyDataProvider;
+using aidl::android::hardware::power::stats::UfsStateResidencyDataProvider;
+using aidl::android::hardware::power::stats::EnergyConsumerType;
+using aidl::android::hardware::power::stats::GenericStateResidencyDataProvider;
+using aidl::android::hardware::power::stats::IioEnergyMeterDataProvider;
+using aidl::android::hardware::power::stats::PixelStateResidencyDataProvider;
+using aidl::android::hardware::power::stats::PowerStatsEnergyConsumer;
+
+constexpr char kBootHwSoCRev[] = "ro.boot.hw.soc.rev";
+
+void addAoC(std::shared_ptr<PowerStats> p) {
+    std::string prefix = "/sys/devices/platform/19000000.aoc/control/";
+
+    // Add AoC cores (a32, ff1, hf0, and hf1)
+    std::vector<std::pair<std::string, std::string>> coreIds = {
+            {"AoC-A32", prefix + "a32_"},
+            {"AoC-FF1", prefix + "ff1_"},
+            {"AoC-HF1", prefix + "hf1_"},
+            {"AoC-HF0", prefix + "hf0_"},
+    };
+    std::vector<std::pair<std::string, std::string>> coreStates = {
+            {"DWN", "off"}, {"RET", "retention"}, {"WFI", "wfi"}};
+    p->addStateResidencyDataProvider(std::make_unique<AocStateResidencyDataProvider>(coreIds,
+            coreStates));
+
+    // Add AoC voltage stats
+    std::vector<std::pair<std::string, std::string>> voltageIds = {
+            {"AoC-Voltage", prefix + "voltage_"},
+    };
+    std::vector<std::pair<std::string, std::string>> voltageStates = {{"NOM", "nominal"},
+                                                                      {"SUD", "super_underdrive"},
+                                                                      {"UUD", "ultra_underdrive"},
+                                                                      {"UD", "underdrive"}};
+    p->addStateResidencyDataProvider(
+            std::make_unique<AocStateResidencyDataProvider>(voltageIds, voltageStates));
+
+    // Add AoC monitor mode
+    std::vector<std::pair<std::string, std::string>> monitorIds = {
+            {"AoC", prefix + "monitor_"},
+    };
+    std::vector<std::pair<std::string, std::string>> monitorStates = {
+            {"MON", "mode"},
+    };
+    p->addStateResidencyDataProvider(
+            std::make_unique<AocStateResidencyDataProvider>(monitorIds, monitorStates));
+}
+
+void addDvfsStats(std::shared_ptr<PowerStats> p) {
+    // A constant to represent the number of nanoseconds in one millisecond
+    const int NS_TO_MS = 1000000;
+
+    std::vector<DvfsStateResidencyDataProvider::Config> cfgs;
+
+    cfgs.push_back({"MIF", {
+        std::make_pair("3172MHz", "3172000"),
+        std::make_pair("2730MHz", "2730000"),
+        std::make_pair("2535MHz", "2535000"),
+        std::make_pair("2288MHz", "2288000"),
+        std::make_pair("2028MHz", "2028000"),
+        std::make_pair("1716MHz", "1716000"),
+        std::make_pair("1539MHz", "1539000"),
+        std::make_pair("1352MHz", "1352000"),
+        std::make_pair("1014MHz", "1014000"),
+        std::make_pair("845MHz", "845000"),
+        std::make_pair("676MHz", "676000"),
+        std::make_pair("546MHz", "546000"),
+        std::make_pair("421MHz", "421000"),
+        std::make_pair("0MHz", "0"),
+    }});
+
+    cfgs.push_back({"CL1", {
+        std::make_pair("2466MHz", "2466000"),
+        std::make_pair("2393MHz", "2393000"),
+        std::make_pair("2348MHz", "2348000"),
+        std::make_pair("2253MHz", "2253000"),
+        std::make_pair("2130MHz", "2130000"),
+        std::make_pair("1999MHz", "1999000"),
+        std::make_pair("1836MHz", "1836000"),
+        std::make_pair("1663MHz", "1663000"),
+        std::make_pair("1491MHz", "1491000"),
+        std::make_pair("1328MHz", "1328000"),
+        std::make_pair("1197MHz", "1197000"),
+        std::make_pair("1024MHz", "1024000"),
+        std::make_pair("910MHz", "910000"),
+        std::make_pair("799MHz", "799000"),
+        std::make_pair("696MHz", "696000"),
+        std::make_pair("533MHz", "533000"),
+        std::make_pair("400MHz", "400000"),
+        std::make_pair("0MHz", "0"),
+    }});
+
+    // B0/B1 chips have different DVFS operating points than A0/A1 SoC
+    const int socRev = android::base::GetIntProperty(kBootHwSoCRev, 0);
+    if (socRev >= 2) {
+        cfgs.push_back({"CL0", {
+            std::make_pair("2196MHz", "2196000"),
+            std::make_pair("2098MHz", "2098000"),
+            std::make_pair("2024MHz", "2024000"),
+            std::make_pair("1950MHz", "1950000"),
+            std::make_pair("1803MHz", "1803000"),
+            std::make_pair("1704MHz", "1704000"),
+            std::make_pair("1598MHz", "1598000"),
+            std::make_pair("1401MHz", "1401000"),
+            std::make_pair("1328MHz", "1328000"),
+            std::make_pair("1197MHz", "1197000"),
+            std::make_pair("1098MHz", "1098000"),
+            std::make_pair("930MHz", "930000"),
+            std::make_pair("738MHz", "738000"),
+            std::make_pair("574MHz", "574000"),
+            std::make_pair("300MHz", "300000"),
+            std::make_pair("0MHz", "0"),
+        }});
+
+        cfgs.push_back({"CL2", {
+            std::make_pair("3195MHz", "3195000"),
+            std::make_pair("3097MHz", "3097000"),
+            std::make_pair("2950MHz", "2950000"),
+            std::make_pair("2850MHz", "2850000"),
+            std::make_pair("2802MHz", "2802000"),
+            std::make_pair("2704MHz", "2704000"),
+            std::make_pair("2630MHz", "2630000"),
+            std::make_pair("2507MHz", "2507000"),
+            std::make_pair("2401MHz", "2401000"),
+            std::make_pair("2252MHz", "2252000"),
+            std::make_pair("2188MHz", "2188000"),
+            std::make_pair("2048MHz", "2048000"),
+            std::make_pair("1826MHz", "1826000"),
+            std::make_pair("1745MHz", "1745000"),
+            std::make_pair("1582MHz", "1582000"),
+            std::make_pair("1426MHz", "1426000"),
+            std::make_pair("1277MHz", "1277000"),
+            std::make_pair("1106MHz", "1106000"),
+            std::make_pair("984MHz", "984000"),
+            std::make_pair("851MHz", "851000"),
+            std::make_pair("500MHz", "500000"),
+            std::make_pair("0MHz", "0"),
+        }});
+
+        cfgs.push_back({"TPU", {
+            std::make_pair("1230MHz", "1230000"),
+            std::make_pair("1066MHz", "1066000"),
+            std::make_pair("800MHz", "800000"),
+            std::make_pair("500MHz", "500000"),
+            std::make_pair("226MHz", "226000"),
+            std::make_pair("RET_SLOW", "6"),
+            std::make_pair("S_OFF", "5"),
+            std::make_pair("S_SLOW", "4"),
+            std::make_pair("DS_FAST", "3"),
+            std::make_pair("DS_SLOW", "2"),
+            std::make_pair("DS_OFF", "1"),
+            std::make_pair("OFF", "0"),
+        }});
+    } else {
+        cfgs.push_back({"CL0", {
+            std::make_pair("2196MHz", "2196000"),
+            std::make_pair("2098MHz", "2098000"),
+            std::make_pair("2024MHz", "2024000"),
+            std::make_pair("1950MHz", "1950000"),
+            std::make_pair("1868MHz", "1868000"),
+            std::make_pair("1745MHz", "1745000"),
+            std::make_pair("1598MHz", "1598000"),
+            std::make_pair("1459MHz", "1459000"),
+            std::make_pair("1328MHz", "1328000"),
+            std::make_pair("1197MHz", "1197000"),
+            std::make_pair("1098MHz", "1098000"),
+            std::make_pair("889MHz", "889000"),
+            std::make_pair("738MHz", "738000"),
+            std::make_pair("574MHz", "574000"),
+            std::make_pair("300MHz", "300000"),
+            std::make_pair("0MHz", "0"),
+        }});
+
+        cfgs.push_back({"CL2", {
+            std::make_pair("3195MHz", "3195000"),
+            std::make_pair("3097MHz", "3097000"),
+            std::make_pair("2999MHz", "2999000"),
+            std::make_pair("2900MHz", "2900000"),
+            std::make_pair("2802MHz", "2802000"),
+            std::make_pair("2704MHz", "2704000"),
+            std::make_pair("2630MHz", "2630000"),
+            std::make_pair("2507MHz", "2507000"),
+            std::make_pair("2302MHz", "2302000"),
+            std::make_pair("2188MHz", "2188000"),
+            std::make_pair("2048MHz", "2048000"),
+            std::make_pair("1901MHz", "1901000"),
+            std::make_pair("1745MHz", "1745000"),
+            std::make_pair("1582MHz", "1582000"),
+            std::make_pair("1426MHz", "1426000"),
+            std::make_pair("1237MHz", "1237000"),
+            std::make_pair("1106MHz", "1106000"),
+            std::make_pair("984MHz", "984000"),
+            std::make_pair("848MHz", "848000"),
+            std::make_pair("500MHz", "500000"),
+            std::make_pair("0MHz", "0"),
+        }});
+
+        cfgs.push_back({"TPU", {
+            std::make_pair("1393MHz", "1393000"),
+            std::make_pair("1180MHz", "1180000"),
+            std::make_pair("1049MHz", "1049000"),
+            std::make_pair("967MHz", "967000"),
+            std::make_pair("721MHz", "721000"),
+            std::make_pair("648MHz", "648000"),
+            std::make_pair("455MHz", "455000"),
+            std::make_pair("250MHz", "250000"),
+            std::make_pair("RET_SLOW", "6"),
+            std::make_pair("S_OFF", "5"),
+            std::make_pair("S_SLOW", "4"),
+            std::make_pair("DS_FAST", "3"),
+            std::make_pair("DS_SLOW", "2"),
+            std::make_pair("DS_OFF", "1"),
+            std::make_pair("OFF", "0"),
+        }});
+    }
+
+    p->addStateResidencyDataProvider(std::make_unique<DvfsStateResidencyDataProvider>(
+            "/sys/devices/platform/acpm_stats/fvp_stats", NS_TO_MS, cfgs));
+}
+
+void addSoC(std::shared_ptr<PowerStats> p) {
+    // A constant to represent the number of nanoseconds in one millisecond.
+    const int NS_TO_MS = 1000000;
+
+    // ACPM stats are reported in nanoseconds. The transform function
+    // converts nanoseconds to milliseconds.
+    std::function<uint64_t(uint64_t)> acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; };
+    const GenericStateResidencyDataProvider::StateResidencyConfig lpmStateConfig = {
+            .entryCountSupported = true,
+            .entryCountPrefix = "success_count:",
+            .totalTimeSupported = true,
+            .totalTimePrefix = "total_time_ns:",
+            .totalTimeTransform = acpmNsToMs,
+            .lastEntrySupported = true,
+            .lastEntryPrefix = "last_entry_time_ns:",
+            .lastEntryTransform = acpmNsToMs,
+    };
+    const GenericStateResidencyDataProvider::StateResidencyConfig downStateConfig = {
+            .entryCountSupported = true,
+            .entryCountPrefix = "down_count:",
+            .totalTimeSupported = true,
+            .totalTimePrefix = "total_down_time_ns:",
+            .totalTimeTransform = acpmNsToMs,
+            .lastEntrySupported = true,
+            .lastEntryPrefix = "last_down_time_ns:",
+            .lastEntryTransform = acpmNsToMs,
+    };
+    const GenericStateResidencyDataProvider::StateResidencyConfig reqStateConfig = {
+            .entryCountSupported = true,
+            .entryCountPrefix = "req_up_count:",
+            .totalTimeSupported = true,
+            .totalTimePrefix = "total_req_up_time_ns:",
+            .totalTimeTransform = acpmNsToMs,
+            .lastEntrySupported = true,
+            .lastEntryPrefix = "last_req_up_time_ns:",
+            .lastEntryTransform = acpmNsToMs,
+
+    };
+    const std::vector<std::pair<std::string, std::string>> powerStateHeaders = {
+            std::make_pair("SICD", "SICD"),
+            std::make_pair("SLEEP", "SLEEP"),
+            std::make_pair("SLEEP_SLCMON", "SLEEP_SLCMON"),
+            std::make_pair("STOP", "STOP"),
+    };
+    const std::vector<std::pair<std::string, std::string>> mifReqStateHeaders = {
+            std::make_pair("AOC", "AOC"),
+            std::make_pair("GSA", "GSA"),
+    };
+    const std::vector<std::pair<std::string, std::string>> slcReqStateHeaders = {
+            std::make_pair("AOC", "AOC"),
+    };
+
+    std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(lpmStateConfig, powerStateHeaders),
+            "LPM", "LPM:");
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(downStateConfig, powerStateHeaders),
+            "MIF", "MIF:");
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(reqStateConfig, mifReqStateHeaders),
+            "MIF-REQ", "MIF_REQ:");
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(downStateConfig, powerStateHeaders),
+            "SLC", "SLC:");
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(reqStateConfig, slcReqStateHeaders),
+            "SLC-REQ", "SLC_REQ:");
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            "/sys/devices/platform/acpm_stats/soc_stats", cfgs));
+}
+
+void setEnergyMeter(std::shared_ptr<PowerStats> p) {
+    std::vector<const std::string> deviceNames { "s2mpg10-odpm", "s2mpg11-odpm" };
+    p->setEnergyMeterDataProvider(std::make_unique<IioEnergyMeterDataProvider>(deviceNames, true));
+}
+
+void addCPUclusters(std::shared_ptr<PowerStats> p) {
+    // A constant to represent the number of nanoseconds in one millisecond.
+    const int NS_TO_MS = 1000000;
+
+    std::function<uint64_t(uint64_t)> acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; };
+    const GenericStateResidencyDataProvider::StateResidencyConfig cpuStateConfig = {
+            .entryCountSupported = true,
+            .entryCountPrefix = "down_count:",
+            .totalTimeSupported = true,
+            .totalTimePrefix = "total_down_time_ns:",
+            .totalTimeTransform = acpmNsToMs,
+            .lastEntrySupported = true,
+            .lastEntryPrefix = "last_down_time_ns:",
+            .lastEntryTransform = acpmNsToMs,
+    };
+
+    const std::vector<std::pair<std::string, std::string>> cpuStateHeaders = {
+            std::make_pair("DOWN", ""),
+    };
+
+    std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
+    for (std::string name : {"CORE00", "CORE01", "CORE02", "CORE03", "CORE10", "CORE11",
+                                "CORE20", "CORE21", "CLUSTER0", "CLUSTER1", "CLUSTER2"}) {
+        cfgs.emplace_back(generateGenericStateResidencyConfigs(cpuStateConfig, cpuStateHeaders),
+            name, name);
+    }
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            "/sys/devices/platform/acpm_stats/core_stats", cfgs));
+
+    p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
+            EnergyConsumerType::CPU_CLUSTER, "CPUCL0", {"S4M_VDD_CPUCL0"}));
+    p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
+            EnergyConsumerType::CPU_CLUSTER, "CPUCL1", {"S3M_VDD_CPUCL1"}));
+    p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
+            EnergyConsumerType::CPU_CLUSTER, "CPUCL2", {"S2M_VDD_CPUCL2"}));
+}
+
+void addGPU(std::shared_ptr<PowerStats> p) {
+    // Add gpu energy consumer
+    std::map<std::string, int32_t> stateCoeffs;
+    const int socRev = android::base::GetIntProperty(kBootHwSoCRev, 0);
+
+    // B0/B1 chips have different GPU DVFS operating points than A0/A1 SoC
+    if (socRev >= 2) {
+        stateCoeffs = {
+            {"151000",  642},
+            {"202000",  890},
+            {"251000", 1102},
+            {"302000", 1308},
+            {"351000", 1522},
+            {"400000", 1772},
+            {"471000", 2105},
+            {"510000", 2292},
+            {"572000", 2528},
+            {"701000", 3127},
+            {"762000", 3452},
+            {"848000", 4044}};
+    } else {
+        stateCoeffs = {
+            {"151000",  843},
+            {"302000", 1529},
+            {"455000", 2298},
+            {"572000", 2866},
+            {"670000", 3191}};
+    }
+
+    p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterAndAttrConsumer(p,
+            EnergyConsumerType::OTHER, "GPU", {"S2S_VDD_G3D"},
+            {{UID_TIME_IN_STATE, "/sys/devices/platform/1c500000.mali/uid_time_in_state"}},
+            stateCoeffs));
+
+    p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>("GPU",
+            "/sys/bus/platform/devices/1c500000.mali"));
+}
+
+void addMobileRadio(std::shared_ptr<PowerStats> p)
+{
+    // A constant to represent the number of microseconds in one millisecond.
+    const int US_TO_MS = 1000;
+
+    // modem power_stats are reported in microseconds. The transform function
+    // converts microseconds to milliseconds.
+    std::function<uint64_t(uint64_t)> modemUsToMs = [](uint64_t a) { return a / US_TO_MS; };
+    const GenericStateResidencyDataProvider::StateResidencyConfig powerStateConfig = {
+            .entryCountSupported = true,
+            .entryCountPrefix = "count:",
+            .totalTimeSupported = true,
+            .totalTimePrefix = "duration_usec:",
+            .totalTimeTransform = modemUsToMs,
+            .lastEntrySupported = true,
+            .lastEntryPrefix = "last_entry_timestamp_usec:",
+            .lastEntryTransform = modemUsToMs,
+    };
+    const std::vector<std::pair<std::string, std::string>> powerStateHeaders = {
+            std::make_pair("SLEEP", "SLEEP:"),
+    };
+
+    std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(powerStateConfig, powerStateHeaders),
+            "MODEM", "");
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            "/sys/devices/platform/cpif/modem/power_stats", cfgs));
+
+    p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
+            EnergyConsumerType::MOBILE_RADIO, "MODEM", {"VSYS_PWR_MODEM", "VSYS_PWR_RFFE"}));
+}
+
+void addGNSS(std::shared_ptr<PowerStats> p)
+{
+    // A constant to represent the number of microseconds in one millisecond.
+    const int US_TO_MS = 1000;
+
+    // gnss power_stats are reported in microseconds. The transform function
+    // converts microseconds to milliseconds.
+    std::function<uint64_t(uint64_t)> gnssUsToMs = [](uint64_t a) { return a / US_TO_MS; };
+
+    const GenericStateResidencyDataProvider::StateResidencyConfig gnssStateConfig = {
+        .entryCountSupported = true,
+        .entryCountPrefix = "count:",
+        .totalTimeSupported = true,
+        .totalTimePrefix = "duration_usec:",
+        .totalTimeTransform = gnssUsToMs,
+        .lastEntrySupported = true,
+        .lastEntryPrefix = "last_entry_timestamp_usec:",
+        .lastEntryTransform = gnssUsToMs,
+    };
+
+    const std::vector<std::pair<std::string, std::string>> gnssStateHeaders = {
+        std::make_pair("ON", "GPS_ON:"),
+        std::make_pair("OFF", "GPS_OFF:"),
+    };
+
+    std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(gnssStateConfig, gnssStateHeaders),
+            "GPS", "");
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            "/dev/bbd_pwrstat", cfgs));
+
+    p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterConsumer(p,
+            EnergyConsumerType::GNSS, "GPS", {"L9S_GNSS_CORE"}));
+}
+
+void addPCIe(std::shared_ptr<PowerStats> p) {
+    // Add PCIe power entities for Modem and WiFi
+    const GenericStateResidencyDataProvider::StateResidencyConfig pcieStateConfig = {
+        .entryCountSupported = true,
+        .entryCountPrefix = "Cumulative count:",
+        .totalTimeSupported = true,
+        .totalTimePrefix = "Cumulative duration msec:",
+        .lastEntrySupported = true,
+        .lastEntryPrefix = "Last entry timestamp msec:",
+    };
+    const std::vector<std::pair<std::string, std::string>> pcieStateHeaders = {
+        std::make_pair("UP", "Link up:"),
+        std::make_pair("DOWN", "Link down:"),
+    };
+
+    // Add PCIe - Modem
+    const std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> pcieModemCfgs = {
+        {generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders), "PCIe-Modem",
+                "Version: 1"}
+    };
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            "/sys/devices/platform/11920000.pcie/power_stats", pcieModemCfgs));
+
+    // Add PCIe - WiFi
+    const std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> pcieWifiCfgs = {
+        {generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders),
+            "PCIe-WiFi", "Version: 1"}
+    };
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            "/sys/devices/platform/14520000.pcie/power_stats", pcieWifiCfgs));
+}
+
+void addWifi(std::shared_ptr<PowerStats> p) {
+    // The transform function converts microseconds to milliseconds.
+    std::function<uint64_t(uint64_t)> usecToMs = [](uint64_t a) { return a / 1000; };
+    const GenericStateResidencyDataProvider::StateResidencyConfig stateConfig = {
+        .entryCountSupported = true,
+        .entryCountPrefix = "count:",
+        .totalTimeSupported = true,
+        .totalTimePrefix = "duration_usec:",
+        .totalTimeTransform = usecToMs,
+        .lastEntrySupported = true,
+        .lastEntryPrefix = "last_entry_timestamp_usec:",
+        .lastEntryTransform = usecToMs,
+    };
+    const GenericStateResidencyDataProvider::StateResidencyConfig pcieStateConfig = {
+        .entryCountSupported = true,
+        .entryCountPrefix = "count:",
+        .totalTimeSupported = true,
+        .totalTimePrefix = "duration_usec:",
+        .totalTimeTransform = usecToMs,
+        .lastEntrySupported = false,
+    };
+
+    const std::vector<std::pair<std::string, std::string>> stateHeaders = {
+        std::make_pair("AWAKE", "AWAKE:"),
+        std::make_pair("ASLEEP", "ASLEEP:"),
+
+    };
+    const std::vector<std::pair<std::string, std::string>> pcieStateHeaders = {
+        std::make_pair("L0", "L0:"),
+        std::make_pair("L1", "L1:"),
+        std::make_pair("L1_1", "L1_1:"),
+        std::make_pair("L1_2", "L1_2:"),
+        std::make_pair("L2", "L2:"),
+    };
+
+    const std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs = {
+        {generateGenericStateResidencyConfigs(stateConfig, stateHeaders), "WIFI", "WIFI"},
+        {generateGenericStateResidencyConfigs(pcieStateConfig, pcieStateHeaders), "WIFI-PCIE",
+                "WIFI-PCIE"}
+    };
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>("/sys/wifi/power_stats",
+            cfgs));
+}
+
+void addUfs(std::shared_ptr<PowerStats> p) {
+    p->addStateResidencyDataProvider(std::make_unique<UfsStateResidencyDataProvider>("/sys/bus/platform/devices/14700000.ufs/ufs_stats/"));
+}
+
+void addPowerDomains(std::shared_ptr<PowerStats> p) {
+    // A constant to represent the number of nanoseconds in one millisecond.
+    const int NS_TO_MS = 1000000;
+
+    std::function<uint64_t(uint64_t)> acpmNsToMs = [](uint64_t a) { return a / NS_TO_MS; };
+    const GenericStateResidencyDataProvider::StateResidencyConfig cpuStateConfig = {
+            .entryCountSupported = true,
+            .entryCountPrefix = "on_count:",
+            .totalTimeSupported = true,
+            .totalTimePrefix = "total_on_time_ns:",
+            .totalTimeTransform = acpmNsToMs,
+            .lastEntrySupported = true,
+            .lastEntryPrefix = "last_on_time_ns:",
+            .lastEntryTransform = acpmNsToMs,
+    };
+
+    const std::vector<std::pair<std::string, std::string>> cpuStateHeaders = {
+            std::make_pair("ON", ""),
+    };
+
+    std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
+    for (std::string name : {"pd-tpu", "pd-bo", "pd-tnr", "pd-gdc", "pd-mcsc", "pd-ipp",
+                                "pd-g3aa", "pd-dns", "pd-itp", "pd-pdp", "pd-csis",
+                                "pd-mfc", "pd-g2d", "pd-dpu", "pd-disp", "pd-hsi0",
+                                "pd-embedded_g3d", "pd-g3d", "pd-eh"}) {
+        cfgs.emplace_back(generateGenericStateResidencyConfigs(cpuStateConfig, cpuStateHeaders),
+            name, name + ":");
+    }
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            "/sys/devices/platform/acpm_stats/pd_stats", cfgs));
+}
+
+void addDevfreq(std::shared_ptr<PowerStats> p) {
+    p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>("INT",
+            "/sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int"));
+
+    p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>("INTCAM",
+            "/sys/devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam"));
+
+    p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>("CAM",
+            "/sys/devices/platform/17000050.devfreq_cam/devfreq/17000050.devfreq_cam"));
+
+    p->addStateResidencyDataProvider(std::make_unique<DevfreqStateResidencyDataProvider>("TNR",
+            "/sys/devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr"));
+}
+
+void addTPU(std::shared_ptr<PowerStats> p) {
+    std::map<std::string, int32_t> stateCoeffs;
+
+    stateCoeffs = {
+        {"226000",  49.25},
+        {"500000",  73.80},
+        {"800000",  86.99},
+        {"1066000", 103.93},
+        {"1230000", 108.10}};
+
+    p->addEnergyConsumer(PowerStatsEnergyConsumer::createMeterAndAttrConsumer(p,
+            EnergyConsumerType::OTHER, "TPU", {"S10M_VDD_TPU"},
+            {{UID_TIME_IN_STATE, "/sys/class/edgetpu/abrolhos/device/tpu_usage"}},
+            stateCoeffs));
+}
+
+/**
+ * Unlike other data providers, which source power entity state residency data from the kernel,
+ * this data provider acts as a general-purpose channel for state residency data providers
+ * that live in user space. Entities are defined here and user space clients of this provider's
+ * vendor service register callbacks to provide state residency data for their given pwoer entity.
+ */
+void addPixelStateResidencyDataProvider(std::shared_ptr<PowerStats> p) {
+
+    auto pixelSdp = std::make_unique<PixelStateResidencyDataProvider>();
+
+    pixelSdp->addEntity("Bluetooth", {{0, "Idle"}, {1, "Active"}, {2, "Tx"}, {3, "Rx"}});
+
+    pixelSdp->start();
+
+    p->addStateResidencyDataProvider(std::move(pixelSdp));
+}
+
+void addGs101CommonDataProviders(std::shared_ptr<PowerStats> p) {
+    setEnergyMeter(p);
+
+    addPixelStateResidencyDataProvider(p);
+    addAoC(p);
+    addDvfsStats(p);
+    addSoC(p);
+    addCPUclusters(p);
+    addGPU(p);
+    addMobileRadio(p);
+    addGNSS(p);
+    addPCIe(p);
+    addWifi(p);
+    addUfs(p);
+    addPowerDomains(p);
+    addDevfreq(p);
+    addTPU(p);
+}
+
+void addNFC(std::shared_ptr<PowerStats> p, const std::string& path) {
+    const GenericStateResidencyDataProvider::StateResidencyConfig nfcStateConfig = {
+        .entryCountSupported = true,
+        .entryCountPrefix = "Cumulative count:",
+        .totalTimeSupported = true,
+        .totalTimePrefix = "Cumulative duration msec:",
+        .lastEntrySupported = true,
+        .lastEntryPrefix = "Last entry timestamp msec:",
+    };
+    const std::vector<std::pair<std::string, std::string>> nfcStateHeaders = {
+        std::make_pair("IDLE", "Idle mode:"),
+        std::make_pair("ACTIVE", "Active mode:"),
+        std::make_pair("ACTIVE-RW", "Active Reader/Writer mode:"),
+    };
+
+    std::vector<GenericStateResidencyDataProvider::PowerEntityConfig> cfgs;
+    cfgs.emplace_back(generateGenericStateResidencyConfigs(nfcStateConfig, nfcStateHeaders),
+            "NFC", "NFC subsystem");
+
+    p->addStateResidencyDataProvider(std::make_unique<GenericStateResidencyDataProvider>(
+            path, cfgs));
+}
diff --git a/powerstats/UfsStateResidencyDataProvider.cpp b/powerstats/UfsStateResidencyDataProvider.cpp
new file mode 100644
index 0000000..aec7724
--- /dev/null
+++ b/powerstats/UfsStateResidencyDataProvider.cpp
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+#include "UfsStateResidencyDataProvider.h"
+
+#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <android-base/strings.h>
+
+#include <string>
+#include <utility>
+
+using android::base::ParseInt;
+using android::base::Split;
+using android::base::StartsWith;
+using android::base::Trim;
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+const int32_t HIBERNATE_STATE_ID = 0;
+const std::string UFS_NAME = "UFS";
+
+UfsStateResidencyDataProvider::UfsStateResidencyDataProvider(std::string prefix) : kPrefix(prefix) {}
+
+bool UfsStateResidencyDataProvider::getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) {
+    StateResidency residency;
+    residency.id = HIBERNATE_STATE_ID;
+
+        // The transform function converts microseconds to milliseconds.
+    std::function<uint64_t(uint64_t)> usecToMs = [](uint64_t a) { return a / 1000; };
+
+    residency.totalTimeInStateMs = usecToMs(readStat(kPrefix + "hibern8_total_us"));
+    residency.totalStateEntryCount = readStat(kPrefix + "hibern8_exit_cnt");
+    residency.lastEntryTimestampMs = usecToMs(readStat(kPrefix + "last_hibern8_enter_time"));
+
+    residencies->emplace(UFS_NAME, std::vector<StateResidency>{residency});
+    return true;
+}
+
+std::unordered_map<std::string, std::vector<State>> UfsStateResidencyDataProvider::getInfo() {
+    return {{UFS_NAME, std::vector<State>{{HIBERNATE_STATE_ID, "HIBERN8"}} }};
+}
+
+int64_t UfsStateResidencyDataProvider::readStat(std::string path) {
+    std::unique_ptr<FILE, decltype(&fclose)> fp(fopen(path.c_str(), "r"), fclose);
+    if (!fp) {
+        PLOG(ERROR) << __func__ << ":Failed to open file " << path
+                    << " Error = " << strerror(errno);
+        return 0;
+    }
+    const size_t size = 20;
+    char buf[size];
+    (void)fread(&buf, sizeof(char), size, fp.get());
+    int64_t ret;
+    if (!ParseInt(Trim(std::string(buf)), &ret)) {
+        LOG(ERROR) << "Failed to parse int64 from [" << std::string(buf) << "]";
+    }
+    return ret;
+}
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
diff --git a/powerstats/UfsStateResidencyDataProvider.h b/powerstats/UfsStateResidencyDataProvider.h
new file mode 100644
index 0000000..f4ef268
--- /dev/null
+++ b/powerstats/UfsStateResidencyDataProvider.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+#pragma once
+
+#include <PowerStatsAidl.h>
+
+namespace aidl {
+namespace android {
+namespace hardware {
+namespace power {
+namespace stats {
+
+class UfsStateResidencyDataProvider : public PowerStats::IStateResidencyDataProvider {
+  public:
+    UfsStateResidencyDataProvider(std::string prefix);
+    ~UfsStateResidencyDataProvider() = default;
+
+    /*
+     * See IStateResidencyDataProvider::getStateResidencies
+     */
+    bool getStateResidencies(
+        std::unordered_map<std::string, std::vector<StateResidency>> *residencies) override;
+
+    /*
+     * See IStateResidencyDataProvider::getInfo
+     */
+    std::unordered_map<std::string, std::vector<State>> getInfo() override;
+
+  private:
+    int64_t readStat(std::string path);
+
+    const std::string kPrefix;
+};
+
+}  // namespace stats
+}  // namespace power
+}  // namespace hardware
+}  // namespace android
+}  // namespace aidl
diff --git a/powerstats/include/Gs101CommonDataProviders.h b/powerstats/include/Gs101CommonDataProviders.h
new file mode 100644
index 0000000..98e6953
--- /dev/null
+++ b/powerstats/include/Gs101CommonDataProviders.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+#pragma once
+
+#include <PowerStatsAidl.h>
+
+using aidl::android::hardware::power::stats::PowerStats;
+
+void addGs101CommonDataProviders(std::shared_ptr<PowerStats> p);
+
+void addNFC(std::shared_ptr<PowerStats> p, const std::string& path);
diff --git a/radio/gnss_blanking.csv b/radio/gnss_blanking.csv
new file mode 100644
index 0000000..54f81e1
--- /dev/null
+++ b/radio/gnss_blanking.csv
@@ -0,0 +1,4 @@
+5
+850,30,
+B39,15,
+
diff --git a/rro_overlays/ConnectivityOverlay/Android.bp b/rro_overlays/ConnectivityOverlay/Android.bp
new file mode 100644
index 0000000..e76c15a
--- /dev/null
+++ b/rro_overlays/ConnectivityOverlay/Android.bp
@@ -0,0 +1,9 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+runtime_resource_overlay {
+    name: "ConnectivityOverlay",
+    sdk_version: "current",
+    product_specific: true
+}
diff --git a/rro_overlays/ConnectivityOverlay/AndroidManifest.xml b/rro_overlays/ConnectivityOverlay/AndroidManifest.xml
new file mode 100644
index 0000000..f349b7f
--- /dev/null
+++ b/rro_overlays/ConnectivityOverlay/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<!-- Pixel specific connectivity overlays -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.connectivity.resources.overlay"
+    android:versionCode="1"
+    android:versionName="1.0">
+    <application android:hasCode="false" />
+    <overlay
+      android:targetPackage="com.android.connectivity.resources"
+      android:targetName="ServiceConnectivityResourcesConfig"
+      android:isStatic="true"
+      android:priority="0"/>
+</manifest>
diff --git a/rro_overlays/ConnectivityOverlay/res/values/config.xml b/rro_overlays/ConnectivityOverlay/res/values/config.xml
new file mode 100644
index 0000000..d9a29b0
--- /dev/null
+++ b/rro_overlays/ConnectivityOverlay/res/values/config.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2021 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>
+    <!-- If the hardware supports specially marking packets that caused a wakeup of the
+         main CPU, set this value to the mark used. -->
+    <integer translatable="false" name="config_networkWakeupPacketMark">0x80000000</integer>
+
+    <!-- Mask to use when checking skb mark defined in config_networkWakeupPacketMark above. -->
+    <integer translatable="false" name="config_networkWakeupPacketMask">0x80000000</integer>
+</resources>
diff --git a/rro_overlays/WifiOverlay/Android.bp b/rro_overlays/WifiOverlay/Android.bp
new file mode 100644
index 0000000..64259d2
--- /dev/null
+++ b/rro_overlays/WifiOverlay/Android.bp
@@ -0,0 +1,18 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+runtime_resource_overlay {
+    name: "WifiOverlay",
+    theme: "WifiOverlay",
+    certificate: "platform",
+    sdk_version: "current",
+    product_specific: true
+}
diff --git a/rro_overlays/WifiOverlay/AndroidManifest.xml b/rro_overlays/WifiOverlay/AndroidManifest.xml
new file mode 100644
index 0000000..632ac6a
--- /dev/null
+++ b/rro_overlays/WifiOverlay/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+<!-- Pixel specific wifi overlays -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.wifi.resources.pixel"
+    android:versionCode="1"
+    android:versionName="1.0">
+    <application android:hasCode="false" />
+    <overlay
+      android:targetPackage="com.android.wifi.resources"
+      android:targetName="WifiCustomization"
+      android:isStatic="true"
+      android:priority="0"/>
+</manifest>
diff --git a/rro_overlays/WifiOverlay/OWNERS b/rro_overlays/WifiOverlay/OWNERS
new file mode 100644
index 0000000..cd92d6f
--- /dev/null
+++ b/rro_overlays/WifiOverlay/OWNERS
@@ -0,0 +1,5 @@
+# People who can approve changes for submission
+etancohen@google.com
+arabawy@google.com
+kumachang@google.com
+satk@google.com
diff --git a/rro_overlays/WifiOverlay/res/values/config.xml b/rro_overlays/WifiOverlay/res/values/config.xml
new file mode 100644
index 0000000..4e5d4bf
--- /dev/null
+++ b/rro_overlays/WifiOverlay/res/values/config.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+/*
+ * Copyright (C) 2019 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>
+    <!-- Boolean indicating whether the wifi chipset has 5GHz frequency band support -->
+    <bool translatable="false" name="config_wifi5ghzSupport">true</bool>
+
+    <!-- boolean indicating whether the WiFi chipset has 6GHz band support -->
+    <bool translatable="false" name ="config_wifi6ghzSupport">true</bool>
+
+    <!-- Boolean indicating whether 802.11r Fast BSS Transition is enabled on this platform -->
+    <bool translatable="false" name="config_wifi_fast_bss_transition_enabled">true</bool>
+
+    <!-- Boolean indicating whether the wifi chipset has background scan support -->
+    <bool translatable="false" name="config_wifi_background_scan_support">true</bool>
+
+    <!-- Integer thresholds, do not connect to APs with RSSI lower than these values  -->
+    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz">-77</integer>
+    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz">-80</integer>
+    <!-- Integer thresholds for low network score, should be somewhat less than the entry thresholds -->
+    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz">-80</integer>
+    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz">-83</integer>
+
+    <!-- Boolean indicating whether or not to revert to default country code when cellular
+    radio is unable to find any MCC information to infer wifi country code from -->
+    <bool translatable="false" name="config_wifi_revert_country_code_on_cellular_loss">false</bool>
+
+    <!-- Boolean indicating whether or not wifi should turn off when emergency call is made -->
+    <bool translatable="false" name="config_wifi_turn_off_during_emergency_call">true</bool>
+
+    <!-- Configure wifi tcp buffersizes in the form:
+         rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max -->
+    <string name="config_wifi_tcp_buffers" translatable="false">524288,2097152,8388608,262144,524288,4194304</string>
+
+    <!-- Enable ACS (auto channel selection) for Wifi hotspot (SAP) -->
+    <bool translatable="false" name="config_wifi_softap_acs_supported">true</bool>
+
+    <!-- Enable 802.11ac for Wifi hotspot (SAP) -->
+    <bool translatable="false" name="config_wifi_softap_ieee80211ac_supported">true</bool>
+
+    <!-- True if the firmware supports connected MAC randomization -->
+    <bool name="config_wifi_connected_mac_randomization_supported">true</bool>
+
+    <!-- True if the firmware supports p2p MAC randomization -->
+    <bool name="config_wifi_p2p_mac_randomization_supported">true</bool>
+
+    <!-- True if the firmware supports ap MAC randomization -->
+    <bool name="config_wifi_ap_mac_randomization_supported">true</bool>
+
+    <!-- True if the firmware supports Wi-Fi link probing -->
+    <bool name="config_wifi_link_probing_supported">true</bool>
+
+    <!-- Indicates that a full bugreport should be triggered when wifi diagnostics detects an error on non-user (i.e debug) builds -->
+    <bool translatable="false" name="config_wifi_diagnostics_bugreport_enabled">true</bool>
+
+    <!-- Default access point SSID used for tethering -->
+    <string name="wifi_tether_configure_ssid_default" translatable="false">Pixel</string>
+
+    <!-- Integer indicating maximum hardware supported client number of soft ap -->
+    <integer translatable="false" name="config_wifiHardwareSoftapMaxClientCount">32</integer>
+
+    <!-- Array indicating wifi fatal firmware alert error code list from driver -->
+    <array translatable="false" name="config_wifi_fatal_firmware_alert_error_code_list">
+        <item>1</item>      <!-- ALERT_TX_STALL -->
+        <item>2</item>      <!-- ALERT_RX_STALL -->
+        <item>3</item>      <!-- ALERT_IOCTL_TIMEOUT -->
+        <item>8</item>      <!-- ALERT_FW_QUEUE_STALL -->
+    </array>
+
+    <!-- Integer delay in milliseconds before set wlan interface up during watchdog recovery -->
+    <integer name="config_wifi_framework_recovery_timeout_delay">3000</integer>
+
+    <!-- Number of self recoveries to be attempted per hour. Any fatal errors beyond this will
+         cause the wifi stack to turn wifi off and wait for user input.
+         Set to 0 to turn off recovery attempts and always turn off wifi on failures -->
+    <integer translatable="false" name="config_wifiMaxNativeFailureSelfRecoveryPerHour">10</integer>
+
+    <!-- Wifi driver supports IEEE80211AX for softap -->
+    <bool translatable="false" name="config_wifiSoftapIeee80211axSupported">true</bool>
+
+      <!-- Indicates that 11ax mode is supported on this device
+           Note that if this flag is set to true, then 11ax is assumed to be supported.
+           However, if it is left to the default value of false, the 11ax support will
+           be checked via NL80211 interface -->
+    <bool translatable="false" name="config_wifi11axSupportOverride">true</bool>
+
+    <!-- Wifi driver supports 6GHz band for softap -->
+    <bool translatable="false" name="config_wifiSoftap6ghzSupported">true</bool>
+
+    <!-- Wifi driver supports WPA3 Simultaneous Authentication of Equals (WPA3-SAE) for softap -->
+    <bool translatable="false" name="config_wifi_softap_sae_supported">true</bool>
+
+    <!-- Override channel utilization estimation with fixed value, disabled in brcm-based pixels -->
+    <bool translatable="false" name="config_wifiChannelUtilizationOverrideEnabled">false</bool>
+
+    <!-- Enable adding minimum confirmation duration when sending network score to connectivity service. -->
+    <bool translatable="false" name="config_wifiMinConfirmationDurationSendNetworkScoreEnabled">true</bool>
+
+    <!-- Enable concurrent STA + STA peer to peer + internet connectivity -->
+    <bool translatable="false" name="config_wifiMultiStaLocalOnlyConcurrencyEnabled">true</bool>
+
+    <!-- Enable concurrent STA + STA MBB support -->
+    <bool translatable="false" name="config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled">true</bool>
+
+    <!-- Enable concurrent Bridged access point (AP) support -->
+    <bool translatable="false" name="config_wifiBridgedSoftApSupported">true</bool>
+
+    <!-- Enable concurrent STA + Bridged access point (AP) support -->
+    <bool translatable="false" name="config_wifiStaWithBridgedSoftApConcurrencySupported">true</bool>
+
+    <!-- Indicates that SAE Hash-to-Element is supported on this device -->
+    <bool translatable="false" name="config_wifiSaeH2eSupported">true</bool>
+
+    <!-- Enable the default coex channel avoidance algorithm and disable the functionality of
+         WifiManager#setCoexUnsafeChannels. -->
+    <bool translatable="false" name="config_wifiDefaultCoexAlgorithmEnabled">true</bool>
+    <!-- Whether to use the explicit vendor HAL API: IWifiStaIface.setRoamingState for disabling fw roaming. -->
+    <bool translatable="false" name="config_wifiUseHalApiToDisableFwRoaming">true</bool>
+</resources>
diff --git a/sensorhal/sensorlist.cpp b/sensorhal/sensorlist.cpp
new file mode 100644
index 0000000..fb62182
--- /dev/null
+++ b/sensorhal/sensorlist.cpp
@@ -0,0 +1,578 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#include "sensorlist.h"
+
+#include <math.h>
+
+#include "hubdefs.h"
+
+using namespace android;
+
+const int kVersion = 1;
+
+const float kMinSampleRateHzAccel = 6.250f;
+const float kMaxSampleRateHzAccel = 400.0f;
+const float kAccelRangeG = 16.0f;
+extern const float kScaleAccel = (kAccelRangeG * 9.81f / 32768.0f);
+
+const float kMinSampleRateHzGyro = 6.250f;
+const float kMaxSampleRateHzGyro = 400.0f;
+
+const float kMinSampleRateHzMag = 3.125f;
+const float kMaxSampleRateHzMag = 50.0f;
+extern const float kScaleMag = 0.15f;
+
+const float kMinSampleRateHzPolling = 0.1f;
+const float kMaxSampleRateHzPolling = 25.0f;
+
+const float kMinSampleRateHzPressure = 0.1f;
+const float kMaxSampleRateHzPressure = 10.0f;
+
+const float kMinSampleRateHzTemperature = kMinSampleRateHzPolling;
+const float kMaxSampleRateHzTemperature = kMaxSampleRateHzPolling;
+
+const float kMinSampleRateHzProximity = kMinSampleRateHzPolling;
+const float kMaxSampleRateHzProximity = 5.0;
+
+const float kMinSampleRateHzLight = kMinSampleRateHzPolling;
+const float kMaxSampleRateHzLight = 5.0;
+
+const float kMinSampleRateHzOrientation = 12.5f;
+const float kMaxSampleRateHzOrientation = 200.0f;
+
+#ifdef DIRECT_REPORT_ENABLED
+constexpr uint32_t kDirectReportFlagAccel = (
+        // support up to rate level fast (nominal 200Hz);
+        (SENSOR_DIRECT_RATE_FAST << SENSOR_FLAG_SHIFT_DIRECT_REPORT)
+        // support ashmem and gralloc direct channel
+        | SENSOR_FLAG_DIRECT_CHANNEL_ASHMEM
+        | SENSOR_FLAG_DIRECT_CHANNEL_GRALLOC);
+constexpr uint32_t kDirectReportFlagGyro = (
+        // support up to rate level fast (nominal 200Hz);
+        (SENSOR_DIRECT_RATE_FAST << SENSOR_FLAG_SHIFT_DIRECT_REPORT)
+        // support ashmem and gralloc direct channel
+        | SENSOR_FLAG_DIRECT_CHANNEL_ASHMEM
+        | SENSOR_FLAG_DIRECT_CHANNEL_GRALLOC);
+constexpr uint32_t kDirectReportFlagMag = (
+        // support up to rate level normal (nominal 50Hz);
+        (SENSOR_DIRECT_RATE_NORMAL << SENSOR_FLAG_SHIFT_DIRECT_REPORT)
+        // support ashmem and gralloc direct channel
+        | SENSOR_FLAG_DIRECT_CHANNEL_ASHMEM
+        | SENSOR_FLAG_DIRECT_CHANNEL_GRALLOC);
+#else
+constexpr uint32_t kDirectReportFlagAccel = 0;
+constexpr uint32_t kDirectReportFlagGyro = 0;
+constexpr uint32_t kDirectReportFlagMag = 0;
+#endif
+
+/*
+ * The fowllowing max count is determined by the total number of blocks
+ * avaliable in the shared nanohub buffer and number of samples each type of
+ * event can hold within a buffer block.
+ * For marlin's case, there are 239 blocks in the shared sensor buffer and
+ * each block can hold 30 OneAxis Samples, 15 ThreeAxis Samples or 24
+ * RawThreeAxies Samples.
+ */
+const int kMaxOneAxisEventCount = 7170;
+const int kMaxThreeAxisEventCount = 3585;
+const int kMaxRawThreeAxisEventCount = 5736;
+
+const int kMinFifoReservedEventCount = 20;
+
+const char SENSOR_STRING_TYPE_INTERNAL_TEMPERATURE[] =
+    "com.google.sensor.internal_temperature";
+const char SENSOR_STRING_TYPE_SYNC[] =
+    "com.google.sensor.sync";
+const char SENSOR_STRING_TYPE_DOUBLE_TWIST[] =
+    "com.google.sensor.double_twist";
+const char SENSOR_STRING_TYPE_DOUBLE_TAP[] =
+    "com.google.sensor.double_tap";
+const char SENSOR_STRING_TYPE_DOUBLE_TOUCH[] =
+    "com.google.sensor.double_touch";
+
+extern const sensor_t kSensorList[] = {
+    {
+        "TMD4903 Proximity Sensor",
+        "AMS",
+        kVersion,
+        COMMS_SENSOR_PROXIMITY,
+        SENSOR_TYPE_PROXIMITY,
+        5.0f,                                          // maxRange (cm)
+        1.0f,                                          // resolution (cm)
+        0.0f,                                          // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzProximity), // minDelay
+        300,                                           // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                         // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_PROXIMITY,
+        "",                                            // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzProximity),    // maxDelay
+        SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE,
+        { NULL, NULL }
+    },
+    {
+        "TMD4903 Light Sensor",
+        "AMS",
+        kVersion,
+        COMMS_SENSOR_LIGHT,
+        SENSOR_TYPE_LIGHT,
+        43000.0f,                                  // maxRange (lx)
+        10.0f,                                     // XXX resolution (lx)
+        0.0f,                                      // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzLight), // minDelay
+        kMinFifoReservedEventCount,                // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                     // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_LIGHT,
+        "",                                        // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzLight),    // maxDelay
+        SENSOR_FLAG_ON_CHANGE_MODE,
+        { NULL, NULL }
+    },
+    {
+        "BMI160 accelerometer",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_ACCEL,
+        SENSOR_TYPE_ACCELEROMETER,
+        GRAVITY_EARTH * kAccelRangeG,              // maxRange
+        GRAVITY_EARTH * kAccelRangeG / 32768.0f,   // resolution
+        0.0f,                                      // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzAccel), // minDelay
+        3000,                                      // XXX fifoReservedEventCount
+        kMaxRawThreeAxisEventCount,                // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_ACCELEROMETER,
+        "",                                        // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzAccel),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagAccel,
+        { NULL, NULL }
+    },
+    {
+        "BMI160 gyroscope",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_GYRO,
+        SENSOR_TYPE_GYROSCOPE,
+        1000.0f * M_PI / 180.0f,                   // maxRange
+        1000.0f * M_PI / (180.0f * 32768.0f),      // resolution
+        0.0f,                                      // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzGyro),  // minDelay
+        kMinFifoReservedEventCount,                // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                   // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_GYROSCOPE,
+        "",                                        // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzGyro),     // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagGyro,
+        { NULL, NULL }
+    },
+    {
+        "BMI160 gyroscope (uncalibrated)",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_GYRO_UNCALIBRATED,
+        SENSOR_TYPE_GYROSCOPE_UNCALIBRATED,
+        1000.0f * M_PI / 180.0f,                   // maxRange
+        1000.0f * M_PI / (180.0f * 32768.0f),      // resolution
+        0.0f,                                      // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzGyro),  // minDelay
+        kMinFifoReservedEventCount,                // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                   // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_GYROSCOPE_UNCALIBRATED,
+        "",                                        // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzGyro),     // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagGyro,
+        { NULL, NULL }
+    },
+    {
+        "AK09915 magnetometer",
+        "AKM",
+        kVersion,
+        COMMS_SENSOR_MAG,
+        SENSOR_TYPE_MAGNETIC_FIELD,
+        1300.0f,                                   // XXX maxRange
+        0.0f,                                      // XXX resolution
+        0.0f,                                      // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzMag),   // minDelay
+        600,                                       // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                   // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_MAGNETIC_FIELD,
+        "",                                        // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzMag),      // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagMag,
+        { NULL, NULL }
+    },
+    {
+        "AK09915 magnetometer (uncalibrated)",
+        "AKM",
+        kVersion,
+        COMMS_SENSOR_MAG_UNCALIBRATED,
+        SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED,
+        1300.0f,                                        // XXX maxRange
+        0.0f,                                           // XXX resolution
+        0.0f,                                           // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzMag),        // minDelay
+        600,                                            // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                        // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED,
+        "",                                             // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzMag),           // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagMag,
+        { NULL, NULL }
+    },
+    {
+        "BMP285 pressure",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_PRESSURE,
+        SENSOR_TYPE_PRESSURE,
+        1100.0f,                                      // maxRange (hPa)
+        0.005f,                                       // resolution (hPa)
+        0.0f,                                         // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzPressure), // minDelay
+        300,                                          // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                        // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_PRESSURE,
+        "",                                           // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzPressure),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "BMP285 temperature",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_TEMPERATURE,
+        SENSOR_TYPE_INTERNAL_TEMPERATURE,
+        85.0f,                                           // maxRange (degC)
+        0.01,                                            // resolution (degC)
+        0.0f,                                            // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzTemperature), // minDelay
+        kMinFifoReservedEventCount,                      // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                           // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_INTERNAL_TEMPERATURE,
+        "",                                              // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzTemperature),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Orientation",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_ORIENTATION,
+        SENSOR_TYPE_ORIENTATION,
+        360.0f,                                          // maxRange (deg)
+        1.0f,                                            // XXX resolution (deg)
+        0.0f,                                            // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay
+        kMinFifoReservedEventCount,                      // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                         // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_ORIENTATION,
+        "",                                              // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzOrientation),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "BMI160 Step detector",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_STEP_DETECTOR,
+        SENSOR_TYPE_STEP_DETECTOR,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.0f,                                   // XXX power
+        0,                                      // minDelay
+        100,                                    // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                  // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_STEP_DETECTOR,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_SPECIAL_REPORTING_MODE,
+        { NULL, NULL }
+    },
+    {
+        "BMI160 Step counter",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_STEP_COUNTER,
+        SENSOR_TYPE_STEP_COUNTER,
+        1.0f,                                   // XXX maxRange
+        1.0f,                                   // resolution
+        0.0f,                                   // XXX power
+        0,                                      // minDelay
+        kMinFifoReservedEventCount,             // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                  // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_STEP_COUNTER,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_ON_CHANGE_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Significant motion",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_SIGNIFICANT_MOTION,
+        SENSOR_TYPE_SIGNIFICANT_MOTION,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.0f,                                   // XXX power
+        -1,                                     // minDelay
+        0,                                      // XXX fifoReservedEventCount
+        0,                                      // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_SIGNIFICANT_MOTION,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Gravity",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_GRAVITY,
+        SENSOR_TYPE_GRAVITY,
+        1000.0f,                                         // maxRange
+        1.0f,                                            // XXX resolution
+        0.0f,                                            // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay
+        kMinFifoReservedEventCount,                      // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                         // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_GRAVITY,
+        "",                                              // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzOrientation),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Linear Acceleration",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_LINEAR_ACCEL,
+        SENSOR_TYPE_LINEAR_ACCELERATION,
+        1000.0f,                                         // maxRange
+        1.0f,                                            // XXX resolution
+        0.0f,                                            // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay
+        kMinFifoReservedEventCount,                      // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                         // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_LINEAR_ACCELERATION,
+        "",                                              // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzOrientation),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Rotation Vector",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_ROTATION_VECTOR,
+        SENSOR_TYPE_ROTATION_VECTOR,
+        1000.0f,                                         // maxRange
+        1.0f,                                            // XXX resolution
+        0.0f,                                            // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay
+        kMinFifoReservedEventCount,                      // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                         // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_ROTATION_VECTOR,
+        "",                                              // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzOrientation),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Geomagnetic Rotation Vector",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_GEO_MAG,
+        SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR,
+        1000.0f,                                         // maxRange
+        1.0f,                                            // XXX resolution
+        0.0f,                                            // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay
+        kMinFifoReservedEventCount,                      // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                         // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR,
+        "",                                              // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzOrientation),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Game Rotation Vector",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_GAME_ROTATION_VECTOR,
+        SENSOR_TYPE_GAME_ROTATION_VECTOR,
+        1000.0f,                                         // maxRange
+        1.0f,                                            // XXX resolution
+        0.0f,                                            // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay
+        300,                                             // XXX fifoReservedEventCount
+        kMaxThreeAxisEventCount,                         // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_GAME_ROTATION_VECTOR,
+        "",                                              // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzOrientation),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Tilt Detector",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_TILT,
+        SENSOR_TYPE_TILT_DETECTOR,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.0f,                                   // XXX power
+        0,                                      // minDelay
+        kMinFifoReservedEventCount,             // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                  // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_TILT_DETECTOR,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_SPECIAL_REPORTING_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Pickup Gesture",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_GESTURE,
+        SENSOR_TYPE_PICK_UP_GESTURE,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.0f,                                   // XXX power
+        -1,                                     // minDelay
+        0,                                      // XXX fifoReservedEventCount
+        0,                                      // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_PICK_UP_GESTURE,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Sensors Sync",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_SYNC,
+        SENSOR_TYPE_SYNC,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.1f,                                   // XXX power
+        0,                                      // minDelay
+        kMinFifoReservedEventCount,             // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                  // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_SYNC,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_SPECIAL_REPORTING_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Double Twist",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_DOUBLE_TWIST,
+        SENSOR_TYPE_DOUBLE_TWIST,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.1f,                                   // XXX power
+        0,                                      // minDelay
+        kMinFifoReservedEventCount,             // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                  // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_DOUBLE_TWIST,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_SPECIAL_REPORTING_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Double Tap",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_DOUBLE_TAP,
+        SENSOR_TYPE_DOUBLE_TAP,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.1f,                                   // XXX power
+        0,                                      // minDelay
+        kMinFifoReservedEventCount,             // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                  // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_DOUBLE_TAP,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_SPECIAL_REPORTING_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Device Orientation",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_WINDOW_ORIENTATION,
+        SENSOR_TYPE_DEVICE_ORIENTATION,
+        3.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.1f,                                   // XXX power
+        0,                                      // minDelay
+        kMinFifoReservedEventCount,             // XXX fifoReservedEventCount
+        kMaxOneAxisEventCount,                  // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_DEVICE_ORIENTATION,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_ON_CHANGE_MODE,
+        { NULL, NULL }
+    },
+    {
+        "Double Touch",
+        "Google",
+        kVersion,
+        COMMS_SENSOR_DOUBLE_TOUCH,
+        SENSOR_TYPE_DOUBLE_TOUCH,
+        1.0f,                                   // maxRange
+        1.0f,                                   // XXX resolution
+        0.0f,                                   // XXX power
+        -1,                                     // minDelay
+        0,                                      // XXX fifoReservedEventCount
+        0,                                      // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_DOUBLE_TOUCH,
+        "",                                     // requiredPermission
+        0,                                      // maxDelay
+        SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE,
+        { NULL, NULL }
+    },
+    {
+        "BMI160 accelerometer (uncalibrated)",
+        "Bosch",
+        kVersion,
+        COMMS_SENSOR_ACCEL_UNCALIBRATED,
+        SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED,
+        GRAVITY_EARTH * kAccelRangeG,              // maxRange
+        GRAVITY_EARTH * kAccelRangeG / 32768.0f,   // resolution
+        0.0f,                                      // XXX power
+        (int32_t)(1.0E6f / kMaxSampleRateHzAccel), // minDelay
+        3000,                                      // XXX fifoReservedEventCount
+        kMaxRawThreeAxisEventCount,                // XXX fifoMaxEventCount
+        SENSOR_STRING_TYPE_ACCELEROMETER_UNCALIBRATED,
+        "",                                        // requiredPermission
+        (long)(1.0E6f / kMinSampleRateHzAccel),    // maxDelay
+        SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagAccel,
+        { NULL, NULL }
+    },
+};
+
+extern const size_t kSensorCount = sizeof(kSensorList) / sizeof(sensor_t);
diff --git a/sensors/Android.mk b/sensors/Android.mk
new file mode 100644
index 0000000..ce844c9
--- /dev/null
+++ b/sensors/Android.mk
@@ -0,0 +1,34 @@
+# Copyright (C) 2009 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.
+
+ifeq ($(BOARD_USES_EXYNOS_SENSORS_DUMMY), true)
+
+LOCAL_PATH := $(call my-dir)
+
+# HAL module implemenation stored in
+# hw/<SENSORS_HARDWARE_MODULE_ID>.<ro.hardware>.so
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware
+LOCAL_SRC_FILES := sensors_dummy.c
+LOCAL_MODULE := sensors.gs101
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE
+LOCAL_PROPRIETARY_MODULE := true
+
+include $(BUILD_SHARED_LIBRARY)
+
+endif
diff --git a/sensors/sensors_dummy.c b/sensors/sensors_dummy.c
new file mode 100644
index 0000000..b1edd56
--- /dev/null
+++ b/sensors/sensors_dummy.c
@@ -0,0 +1,409 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+/* this implements a sensors hardware library for the Android emulator.
+ * the following code should be built as a shared library that will be
+ * placed into /system/lib/hw/sensors.goldfish.so
+ *
+ * it will be loaded by the code in hardware/libhardware/hardware.c
+ * which is itself called from com_android_server_SensorService.cpp
+ */
+
+#define  SENSORS_SERVICE_NAME "sensors"
+
+#define LOG_TAG "Dummy_Sensors"
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <log/log.h>
+#include <cutils/sockets.h>
+#include <hardware/sensors.h>
+#include <pthread.h>
+
+#if 0
+#define  D(...)  ALOGD(__VA_ARGS__)
+#else
+#define  D(...)  ((void)0)
+#endif
+
+#define  E(...)  ALOGE(__VA_ARGS__)
+
+/** SENSOR IDS AND NAMES
+ **/
+
+#define MAX_NUM_SENSORS 8
+
+#define SUPPORTED_SENSORS  ((1<<MAX_NUM_SENSORS)-1)
+
+#define  ID_BASE           SENSORS_HANDLE_BASE
+#define  ID_ACCELERATION   (ID_BASE+0)
+#define  ID_MAGNETIC_FIELD (ID_BASE+1)
+#define  ID_ORIENTATION    (ID_BASE+2)
+#define  ID_TEMPERATURE    (ID_BASE+3)
+#define  ID_PROXIMITY      (ID_BASE+4)
+#define  ID_LIGHT          (ID_BASE+5)
+#define  ID_PRESSURE       (ID_BASE+6)
+#define  ID_HUMIDITY       (ID_BASE+7)
+
+#define  SENSORS_ACCELERATION    (1 << ID_ACCELERATION)
+#define  SENSORS_MAGNETIC_FIELD  (1 << ID_MAGNETIC_FIELD)
+#define  SENSORS_ORIENTATION     (1 << ID_ORIENTATION)
+#define  SENSORS_TEMPERATURE     (1 << ID_TEMPERATURE)
+#define  SENSORS_PROXIMITY       (1 << ID_PROXIMITY)
+#define  SENSORS_LIGHT           (1 << ID_LIGHT)
+#define  SENSORS_PRESSURE        (1 << ID_PRESSURE)
+#define  SENSORS_HUMIDITY        (1 << ID_HUMIDITY)
+
+#define  ID_CHECK(x)  ((unsigned)((x) - ID_BASE) < MAX_NUM_SENSORS)
+
+#define  SENSORS_LIST  \
+    SENSOR_(ACCELERATION,"acceleration") \
+    SENSOR_(MAGNETIC_FIELD,"magnetic-field") \
+    SENSOR_(ORIENTATION,"orientation") \
+    SENSOR_(TEMPERATURE,"temperature") \
+    SENSOR_(PROXIMITY,"proximity") \
+    SENSOR_(LIGHT, "light") \
+    SENSOR_(PRESSURE, "pressure") \
+    SENSOR_(HUMIDITY, "humidity")
+
+static const struct {
+    const char*  name;
+    int          id; } _sensorIds[MAX_NUM_SENSORS] =
+{
+#define SENSOR_(x,y)  { y, ID_##x },
+    SENSORS_LIST
+#undef  SENSOR_
+};
+
+static const char*
+_sensorIdToName( int  id )
+{
+    int  nn;
+    for (nn = 0; nn < MAX_NUM_SENSORS; nn++)
+        if (id == _sensorIds[nn].id)
+            return _sensorIds[nn].name;
+    return "<UNKNOWN>";
+}
+
+static int
+_sensorIdFromName( const char*  name )
+{
+    int  nn;
+
+    if (name == NULL)
+        return -1;
+
+    for (nn = 0; nn < MAX_NUM_SENSORS; nn++)
+        if (!strcmp(name, _sensorIds[nn].name))
+            return _sensorIds[nn].id;
+
+    return -1;
+}
+
+/* return the current time in nanoseconds */
+static int64_t now_ns(void) {
+    struct timespec  ts;
+    clock_gettime(CLOCK_MONOTONIC, &ts);
+    return (int64_t)ts.tv_sec * 1000000000 + ts.tv_nsec;
+}
+
+/** SENSORS POLL DEVICE
+ **
+ ** This one is used to read sensor data from the hardware.
+ ** We implement this by simply reading the data from the
+ ** emulator through the QEMUD channel.
+ **/
+
+typedef struct SensorDevice {
+    struct sensors_poll_device_1  device;
+    sensors_event_t               sensors[MAX_NUM_SENSORS];
+    uint32_t                      pendingSensors;
+    int64_t                       timeStart;
+    int64_t                       timeOffset;
+    uint32_t                      active_sensors;
+    int                           fd;
+    pthread_mutex_t               lock;
+} SensorDevice;
+
+/* Grab the file descriptor to the emulator's sensors service pipe.
+ * This function returns a file descriptor on success, or -errno on
+ * failure, and assumes the SensorDevice instance's lock is held.
+ *
+ * This is needed because set_delay(), poll() and activate() can be called
+ * from different threads, and poll() is blocking.
+ *
+ * 1) On a first thread, de-activate() all sensors first, then call poll(),
+ *    which results in the thread blocking.
+ *
+ * 2) On a second thread, slightly later, call set_delay() then activate()
+ *    to enable the acceleration sensor.
+ *
+ * The system expects this to unblock the first thread which will receive
+ * new sensor events after the activate() call in 2).
+ *
+ * This cannot work if both threads don't use the same connection.
+ *
+ * TODO(digit): This protocol is brittle, implement another control channel
+ *              for set_delay()/activate()/batch() when supporting HAL 1.3
+ */
+static int sensor_device_get_fd_locked(SensorDevice* dev) {
+    /* Create connection to service on first call */
+    if (dev->fd < 0) {
+	    int ret = -errno;
+	    E("%s: Could not open connection to service: %s", __FUNCTION__,
+	    		    strerror(-ret));
+	    return ret;
+    }
+    return dev->fd;
+}
+
+/* Pick up one pending sensor event. On success, this returns the sensor
+ * id, and sets |*event| accordingly. On failure, i.e. if there are no
+ * pending events, return -EINVAL.
+ *
+ * Note: The device's lock must be acquired.
+ */
+static int sensor_device_pick_pending_event_locked(SensorDevice* d,
+                                                   sensors_event_t*  event)
+{
+    uint32_t mask = SUPPORTED_SENSORS & d->pendingSensors;
+
+    if (mask) {
+        uint32_t i = 31 - __builtin_clz(mask);
+
+	pthread_mutex_lock(&d->lock);
+        d->pendingSensors &= ~(1U << i);
+        *event = d->sensors[i];
+        event->sensor = i;
+        event->version = sizeof(*event);
+	pthread_mutex_unlock(&d->lock);
+        D("%s: %d [%f, %f, %f]", __FUNCTION__,
+                i,
+                event->data[0],
+                event->data[1],
+                event->data[2]);
+        return i;
+    }
+    E("No sensor to return!!! pendingSensors=0x%08x", d->pendingSensors);
+    // we may end-up in a busy loop, slow things down, just in case.
+    usleep(1000);
+    return -EINVAL;
+}
+
+static int sensor_device_close(struct hw_device_t* dev0)
+{
+    SensorDevice* dev = (void*)dev0;
+    // Assume that there are no other threads blocked on poll()
+    if (dev->fd >= 0) {
+        close(dev->fd);
+        dev->fd = -1;
+    }
+    pthread_mutex_destroy(&dev->lock);
+    free(dev);
+    return 0;
+}
+
+/* Return an array of sensor data. This function blocks until there is sensor
+ * related events to report. On success, it will write the events into the
+ * |data| array, which contains |count| items. The function returns the number
+ * of events written into the array, which shall never be greater than |count|.
+ * On error, return -errno code.
+ *
+ * Note that according to the sensor HAL [1], it shall never return 0!
+ *
+ * [1] http://source.android.com/devices/sensors/hal-interface.html
+ */
+static int sensor_device_poll(struct sensors_poll_device_t *dev0,
+                              sensors_event_t* data, int count)
+{
+    return -EIO;
+}
+
+static int sensor_device_activate(struct sensors_poll_device_t *dev0,
+                                  int handle,
+                                  int enabled)
+{
+    SensorDevice* dev = (void*)dev0;
+
+    D("%s: handle=%s (%d) enabled=%d", __FUNCTION__,
+        _sensorIdToName(handle), handle, enabled);
+
+    /* Sanity check */
+    if (!ID_CHECK(handle)) {
+        E("%s: bad handle ID", __FUNCTION__);
+        return -EINVAL;
+    }
+
+    /* Exit early if sensor is already enabled/disabled. */
+    uint32_t mask = (1U << handle);
+    uint32_t sensors = enabled ? mask : 0;
+
+    pthread_mutex_lock(&dev->lock);
+
+    uint32_t active = dev->active_sensors;
+    uint32_t new_sensors = (active & ~mask) | (sensors & mask);
+    uint32_t changed = active ^ new_sensors;
+
+    if (changed)
+	    dev->active_sensors = new_sensors;
+
+    pthread_mutex_unlock(&dev->lock);
+    return 0;
+}
+
+static int sensor_device_default_flush(
+        struct sensors_poll_device_1* dev0,
+        int handle) {
+
+    SensorDevice* dev = (void*)dev0;
+
+    D("%s: handle=%s (%d)", __FUNCTION__,
+        _sensorIdToName(handle), handle);
+
+    /* Sanity check */
+    if (!ID_CHECK(handle)) {
+        E("%s: bad handle ID", __FUNCTION__);
+        return -EINVAL;
+    }
+
+    pthread_mutex_lock(&dev->lock);
+    dev->sensors[handle].version = META_DATA_VERSION;
+    dev->sensors[handle].type = SENSOR_TYPE_META_DATA;
+    dev->sensors[handle].sensor = 0;
+    dev->sensors[handle].timestamp = 0;
+    dev->sensors[handle].meta_data.what = META_DATA_FLUSH_COMPLETE;
+    dev->pendingSensors |= (1U << handle);
+    pthread_mutex_unlock(&dev->lock);
+
+    return 0;
+}
+
+static int sensor_device_set_delay(struct sensors_poll_device_t *dev0,
+                                   int handle __unused,
+                                   int64_t ns)
+{
+    return 0;
+}
+
+static int sensor_device_default_batch(
+     struct sensors_poll_device_1* dev,
+     int sensor_handle,
+     int flags,
+     int64_t sampling_period_ns,
+     int64_t max_report_latency_ns) {
+    return sensor_device_set_delay(dev, sensor_handle, sampling_period_ns);
+}
+
+/** MODULE REGISTRATION SUPPORT
+ **
+ ** This is required so that hardware/libhardware/hardware.c
+ ** will dlopen() this library appropriately.
+ **/
+
+/*
+ * the following is the list of all supported sensors.
+ * this table is used to build sSensorList declared below
+ * according to which hardware sensors are reported as
+ * available from the emulator (see get_sensors_list below)
+ *
+ * note: numerical values for maxRange/resolution/power for
+ *       all sensors but light, pressure and humidity were
+ *       taken from the reference AK8976A implementation
+ */
+static const struct sensor_t sSensorListInit[] = {
+        { .name       = "Accelerometer",
+          .vendor     = "The Android Open Source Project",
+          .version    = 1,
+          .handle     = ID_ACCELERATION,
+          .type       = SENSOR_TYPE_ACCELEROMETER,
+          .maxRange   = 2.8f,
+          .resolution = 1.0f/4032.0f,
+          .power      = 3.0f,
+          .minDelay   = 10000,
+          .maxDelay   = 60 * 1000 * 1000,
+          .fifoReservedEventCount = 0,
+          .fifoMaxEventCount =   0,
+          .stringType =         0,
+          .requiredPermission = 0,
+          .flags = SENSOR_FLAG_CONTINUOUS_MODE,
+          .reserved   = {}
+        },
+};
+
+static struct sensor_t  sSensorList[1];
+
+static int sensors__get_sensors_list(struct sensors_module_t* module __unused,
+        struct sensor_t const** list)
+{
+    *list = sSensorList;
+
+    return 0;
+}
+
+static int
+open_sensors(const struct hw_module_t* module,
+             const char*               name,
+             struct hw_device_t*      *device)
+{
+    int  status = -EINVAL;
+
+    D("%s: name=%s", __FUNCTION__, name);
+
+    if (!strcmp(name, SENSORS_HARDWARE_POLL)) {
+        SensorDevice *dev = malloc(sizeof(*dev));
+
+        memset(dev, 0, sizeof(*dev));
+
+        dev->device.common.tag     = HARDWARE_DEVICE_TAG;
+        dev->device.common.version = SENSORS_DEVICE_API_VERSION_1_3;
+        dev->device.common.module  = (struct hw_module_t*) module;
+        dev->device.common.close   = sensor_device_close;
+        dev->device.poll           = sensor_device_poll;
+        dev->device.activate       = sensor_device_activate;
+        dev->device.setDelay       = sensor_device_set_delay;
+
+        // Version 1.3-specific functions
+        dev->device.batch       = sensor_device_default_batch;
+        dev->device.flush       = sensor_device_default_flush;
+
+        dev->fd = -1;
+        pthread_mutex_init(&dev->lock, NULL);
+
+        *device = &dev->device.common;
+        status  = 0;
+    }
+    return status;
+}
+
+
+static struct hw_module_methods_t sensors_module_methods = {
+    .open = open_sensors
+};
+
+struct sensors_module_t HAL_MODULE_INFO_SYM = {
+    .common = {
+        .tag = HARDWARE_MODULE_TAG,
+        .version_major = 1,
+        .version_minor = 0,
+        .id = SENSORS_HARDWARE_MODULE_ID,
+        .name = "Dummy SENSORS Module",
+        .author = "The Android Open Source Project",
+        .methods = &sensors_module_methods,
+    },
+    .get_sensors_list = sensors__get_sensors_list
+};
diff --git a/set_usb_irq.sh b/set_usb_irq.sh
new file mode 100755
index 0000000..29d3781
--- /dev/null
+++ b/set_usb_irq.sh
@@ -0,0 +1,16 @@
+#!/vendor/bin/sh
+
+# Switch into /proc/irq/$IRQ for the dwc3 usb controller
+cd /proc/irq/*/dwc3/.. || exit 7
+
+# Move the USB Controller (DWC3) interrupt as requested
+# Modem and DIT are on 0/2/5 depending on throughput, so avoid those.
+# 0-3 small, 4-5 medium, 6-7 big
+case "$1" in
+  medium) core=4;;
+  big) core=6;;
+  *) core=0;;
+esac
+
+# This can sometimes fail due to smp_affinity_list no longer existing...
+echo "${core}" > smp_affinity_list
diff --git a/task_profiles.json b/task_profiles.json
new file mode 100644
index 0000000..d40170c
--- /dev/null
+++ b/task_profiles.json
@@ -0,0 +1,313 @@
+{
+  "Profiles": [
+    {
+      "Name": "MaxPerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_ta",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "CameraServicePerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_cam",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "CameraServicePower",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_cam_power",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "CameraServiceHighCapacity",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpuset",
+            "Path": "camera-daemon-high-group"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "CameraServiceMidCapacity",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpuset",
+            "Path": "camera-daemon-mid-group"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "CameraServiceMidHighCapacity",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpuset",
+            "Path": "camera-daemon-mid-high-group"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "HighEnergySaving",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "background"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_bg",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "NormalPerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_sys",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "HighPerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_fg",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "RealtimePerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_ta",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "NNApiHALPerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_nnapi",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "ServicePerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_sysbg",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "SFMainPolicy",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpuset",
+            "Path": "top-app"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_sf",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "SFRenderEnginePolicy",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpuset",
+            "Path": "top-app"
+          }
+        },
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/set_task_group_rt",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "ResetUclampGrp",
+      "Actions": [
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/uclamp_fork_reset_set",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    },
+    {
+      "Name": "NoResetUclampGrp",
+      "Actions": [
+        {
+          "Name": "WriteFile",
+          "Params":
+          {
+            "FilePath": "/sys/kernel/vendor_sched/uclamp_fork_reset_clear",
+            "Value": "<pid>",
+            "LogFailures": "false"
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/telephony/pktrouter.mk b/telephony/pktrouter.mk
new file mode 100644
index 0000000..dd923b5
--- /dev/null
+++ b/telephony/pktrouter.mk
@@ -0,0 +1,3 @@
+PRODUCT_PACKAGES += wfc-pkt-router
+PRODUCT_PROPERTY_OVERRIDES += vendor.pktrouter=1
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/telephony/pktrouter
diff --git a/telephony/user.mk b/telephony/user.mk
new file mode 100644
index 0000000..983a19a
--- /dev/null
+++ b/telephony/user.mk
@@ -0,0 +1,2 @@
+PRODUCT_COPY_FILES += vendor/samsung_slsi/telephony/common/device/samsung/init.radio.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.radio.sh
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/telephony/user/
diff --git a/thermal/Android.mk b/thermal/Android.mk
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/thermal/Android.mk
diff --git a/thermal/thermal.c b/thermal/thermal.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/thermal/thermal.c
diff --git a/trusty_metricsd/trusty_metricsd.mk b/trusty_metricsd/trusty_metricsd.mk
new file mode 100644
index 0000000..487875b
--- /dev/null
+++ b/trusty_metricsd/trusty_metricsd.mk
@@ -0,0 +1,6 @@
+# Trusty Metrics Daemon
+PRODUCT_SOONG_NAMESPACES += \
+	vendor/google/trusty/common
+
+PRODUCT_PACKAGES += trusty_metricsd
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/trusty_metricsd
diff --git a/usb/Android.bp b/usb/Android.bp
new file mode 100644
index 0000000..40454af
--- /dev/null
+++ b/usb/Android.bp
@@ -0,0 +1,67 @@
+//
+// Copyright (C) 2017 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 {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "//device/google/gs101:device_google_gs101_license",
+    ],
+}
+
+cc_binary {
+    name: "android.hardware.usb@1.3-service.gs101",
+    relative_install_path: "hw",
+    init_rc: ["android.hardware.usb@1.3-service.gs101.rc"],
+    vintf_fragments: [
+        "android.hardware.usb@1.3-service.gs101.xml",
+        "android.hardware.usb.gadget@1.2-service.gs101.xml",
+    ],
+    srcs: ["service.cpp", "Usb.cpp", "UsbGadget.cpp"],
+    cflags: ["-Wall", "-Werror"],
+    shared_libs: [
+        "libbase",
+        "libbinder",
+        "libhidlbase",
+        "liblog",
+        "libutils",
+        "libhardware",
+        "android.hardware.usb@1.0",
+        "android.hardware.usb@1.1",
+        "android.hardware.usb@1.2",
+        "android.hardware.usb@1.3",
+        "android.hardware.usb.gadget@1.0",
+        "android.hardware.usb.gadget@1.1",
+        "android.hardware.usb.gadget@1.2",
+        "android.hardware.thermal@1.0",
+        "android.hardware.thermal@2.0",
+        "libcutils",
+        "android.frameworks.stats-V1-ndk_platform",
+        "pixelatoms-cpp",
+        "libbinder_ndk",
+    ],
+    static_libs: [
+        "libpixelusb",
+        "libpixelstats",
+    ],
+    export_shared_lib_headers: [
+        "android.frameworks.stats-V1-ndk_platform",
+        "pixelatoms-cpp",
+    ],
+    proprietary: true,
+}
diff --git a/usb/Usb.cpp b/usb/Usb.cpp
new file mode 100644
index 0000000..caf4f57
--- /dev/null
+++ b/usb/Usb.cpp
@@ -0,0 +1,938 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#define LOG_TAG "android.hardware.usb@1.3-service.gs101"
+
+#include <android-base/logging.h>
+#include <android-base/properties.h>
+#include <assert.h>
+#include <dirent.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <chrono>
+#include <regex>
+#include <thread>
+#include <unordered_map>
+
+#include <cutils/uevent.h>
+#include <sys/epoll.h>
+#include <utils/Errors.h>
+#include <utils/StrongPointer.h>
+
+#include "Usb.h"
+#include "UsbGadget.h"
+
+#include <aidl/android/frameworks/stats/IStats.h>
+#include <pixelstats/StatsHelper.h>
+
+using aidl::android::frameworks::stats::IStats;
+using android::base::GetProperty;
+using android::hardware::google::pixel::getStatsService;
+using android::hardware::google::pixel::PixelAtoms::VendorUsbPortOverheat;
+using android::hardware::google::pixel::reportUsbPortOverheat;
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace V1_3 {
+namespace implementation {
+
+Return<bool> Usb::enableUsbDataSignal(bool enable) {
+    bool result = true;
+
+    ALOGI("Userspace turn %s USB data signaling", enable ? "on" : "off");
+
+    if(enable) {
+        if (!WriteStringToFile("1", USB_DATA_PATH)) {
+            ALOGE("Not able to turn on usb connection notification");
+            result = false;
+        }
+
+        if(!WriteStringToFile(kGadgetName, PULLUP_PATH)) {
+            ALOGE("Gadget cannot be pulled up");
+            result = false;
+        }
+    }
+    else {
+        if (!WriteStringToFile("1", ID_PATH)) {
+            ALOGE("Not able to turn off host mode");
+            result = false;
+        }
+
+        if (!WriteStringToFile("0", VBUS_PATH)) {
+            ALOGE("Not able to set Vbus state");
+            result = false;
+        }
+
+        if (!WriteStringToFile("0", USB_DATA_PATH)) {
+            ALOGE("Not able to turn off usb connection notification");
+            result = false;
+        }
+
+        if(!WriteStringToFile("none", PULLUP_PATH)) {
+            ALOGE("Gadget cannot be pulled down");
+            result = false;
+        }
+    }
+
+    return result;
+}
+
+// Set by the signal handler to destroy the thread
+volatile bool destroyThread;
+
+std::string enabledPath;
+constexpr char kHsi2cPath[] = "/sys/devices/platform/10d50000.hsi2c";
+constexpr char kI2CPath[] = "/sys/devices/platform/10d50000.hsi2c/i2c-";
+constexpr char kContaminantDetectionPath[] = "i2c-max77759tcpc/contaminant_detection";
+constexpr char kStatusPath[] = "i2c-max77759tcpc/contaminant_detection_status";
+constexpr char kTypecPath[] = "/sys/class/typec";
+constexpr char kDisableContatminantDetection[] = "vendor.usb.contaminantdisable";
+constexpr char kOverheatStatsPath[] = "/sys/devices/platform/google,usbc_port_cooling_dev/";
+constexpr char kOverheatStatsDev[] = "DRIVER=google,usbc_port_cooling_dev";
+constexpr char kThermalZoneForTrip[] = "VIRTUAL-USB-THROTTLING";
+constexpr char kThermalZoneForTempReadPrimary[] = "usb_pwr_therm2";
+constexpr char kThermalZoneForTempReadSecondary1[] = "usb_pwr_therm";
+constexpr char kThermalZoneForTempReadSecondary2[] = "qi_therm";
+constexpr int kSamplingIntervalSec = 5;
+
+int32_t readFile(const std::string &filename, std::string *contents) {
+    FILE *fp;
+    ssize_t read = 0;
+    char *line = NULL;
+    size_t len = 0;
+
+    fp = fopen(filename.c_str(), "r");
+    if (fp != NULL) {
+        if ((read = getline(&line, &len, fp)) != -1) {
+            char *pos;
+            if ((pos = strchr(line, '\n')) != NULL)
+                *pos = '\0';
+            *contents = line;
+        }
+        free(line);
+        fclose(fp);
+        return 0;
+    } else {
+        ALOGE("fopen failed");
+    }
+
+    return -1;
+}
+
+int32_t writeFile(const std::string &filename, const std::string &contents) {
+    FILE *fp;
+    std::string written;
+
+    fp = fopen(filename.c_str(), "w");
+    if (fp != NULL) {
+        // FAILURE RETRY
+        int ret = fputs(contents.c_str(), fp);
+        fclose(fp);
+        if ((ret != EOF) && !readFile(filename, &written) && written == contents)
+            return 0;
+    }
+    return -1;
+}
+
+Status getContaminantDetectionNamesHelper(std::string *name) {
+    DIR *dp;
+
+    dp = opendir(kHsi2cPath);
+    if (dp != NULL) {
+        struct dirent *ep;
+
+        while ((ep = readdir(dp))) {
+            if (ep->d_type == DT_DIR) {
+                if (std::string::npos != std::string(ep->d_name).find("i2c-")) {
+                    std::strtok(ep->d_name, "-");
+                    *name = std::strtok(NULL, "-");
+                }
+            }
+        }
+        closedir(dp);
+        return Status::SUCCESS;
+    }
+
+    ALOGE("Failed to open %s", kHsi2cPath);
+    return Status::ERROR;
+}
+
+Status queryMoistureDetectionStatus(hidl_vec<PortStatus> *currentPortStatus_1_2) {
+    std::string enabled, status, path, DetectedPath;
+
+    if (currentPortStatus_1_2 == NULL || currentPortStatus_1_2->size() == 0) {
+        ALOGE("currentPortStatus_1_2 is not available");
+        return Status::ERROR;
+    }
+
+    (*currentPortStatus_1_2)[0].supportedContaminantProtectionModes = 0;
+    (*currentPortStatus_1_2)[0].supportedContaminantProtectionModes |=
+        V1_2::ContaminantProtectionMode::FORCE_SINK;
+    (*currentPortStatus_1_2)[0].contaminantProtectionStatus = V1_2::ContaminantProtectionStatus::NONE;
+    (*currentPortStatus_1_2)[0].contaminantDetectionStatus = V1_2::ContaminantDetectionStatus::DISABLED;
+    (*currentPortStatus_1_2)[0].supportsEnableContaminantPresenceDetection = true;
+    (*currentPortStatus_1_2)[0].supportsEnableContaminantPresenceProtection = false;
+
+    getContaminantDetectionNamesHelper(&path);
+    enabledPath = kI2CPath + path + "/" + kContaminantDetectionPath;
+    if (readFile(enabledPath, &enabled)) {
+        ALOGE("Failed to open moisture_detection_enabled");
+        return Status::ERROR;
+    }
+
+    if (enabled == "1") {
+        DetectedPath = kI2CPath + path + "/" + kStatusPath;
+        if (readFile(DetectedPath, &status)) {
+            ALOGE("Failed to open moisture_detected");
+            return Status::ERROR;
+        }
+        if (status == "1") {
+            (*currentPortStatus_1_2)[0].contaminantDetectionStatus =
+                V1_2::ContaminantDetectionStatus::DETECTED;
+            (*currentPortStatus_1_2)[0].contaminantProtectionStatus =
+                V1_2::ContaminantProtectionStatus::FORCE_SINK;
+        } else
+            (*currentPortStatus_1_2)[0].contaminantDetectionStatus =
+                V1_2::ContaminantDetectionStatus::NOT_DETECTED;
+    }
+
+     ALOGI("ContaminantDetectionStatus:%d ContaminantProtectionStatus:%d",
+           (*currentPortStatus_1_2)[0].contaminantDetectionStatus,
+           (*currentPortStatus_1_2)[0].contaminantProtectionStatus);
+
+    return Status::SUCCESS;
+}
+
+std::string appendRoleNodeHelper(const std::string &portName, PortRoleType type) {
+    std::string node("/sys/class/typec/" + portName);
+
+    switch (type) {
+        case PortRoleType::DATA_ROLE:
+            return node + "/data_role";
+        case PortRoleType::POWER_ROLE:
+            return node + "/power_role";
+        case PortRoleType::MODE:
+            return node + "/port_type";
+        default:
+            return "";
+    }
+}
+
+std::string convertRoletoString(PortRole role) {
+    if (role.type == PortRoleType::POWER_ROLE) {
+        if (role.role == static_cast<uint32_t>(PortPowerRole::SOURCE))
+            return "source";
+        else if (role.role == static_cast<uint32_t>(PortPowerRole::SINK))
+            return "sink";
+    } else if (role.type == PortRoleType::DATA_ROLE) {
+        if (role.role == static_cast<uint32_t>(PortDataRole::HOST))
+            return "host";
+        if (role.role == static_cast<uint32_t>(PortDataRole::DEVICE))
+            return "device";
+    } else if (role.type == PortRoleType::MODE) {
+        if (role.role == static_cast<uint32_t>(PortMode_1_1::UFP))
+            return "sink";
+        if (role.role == static_cast<uint32_t>(PortMode_1_1::DFP))
+            return "source";
+    }
+    return "none";
+}
+
+void extractRole(std::string *roleName) {
+    std::size_t first, last;
+
+    first = roleName->find("[");
+    last = roleName->find("]");
+
+    if (first != std::string::npos && last != std::string::npos) {
+        *roleName = roleName->substr(first + 1, last - first - 1);
+    }
+}
+
+void switchToDrp(const std::string &portName) {
+    std::string filename = appendRoleNodeHelper(std::string(portName.c_str()), PortRoleType::MODE);
+    FILE *fp;
+
+    if (filename != "") {
+        fp = fopen(filename.c_str(), "w");
+        if (fp != NULL) {
+            int ret = fputs("dual", fp);
+            fclose(fp);
+            if (ret == EOF)
+                ALOGE("Fatal: Error while switching back to drp");
+        } else {
+            ALOGE("Fatal: Cannot open file to switch back to drp");
+        }
+    } else {
+        ALOGE("Fatal: invalid node type");
+    }
+}
+
+bool switchMode(const hidl_string &portName, const PortRole &newRole, struct Usb *usb) {
+    std::string filename = appendRoleNodeHelper(std::string(portName.c_str()), newRole.type);
+    std::string written;
+    FILE *fp;
+    bool roleSwitch = false;
+
+    if (filename == "") {
+        ALOGE("Fatal: invalid node type");
+        return false;
+    }
+
+    fp = fopen(filename.c_str(), "w");
+    if (fp != NULL) {
+        // Hold the lock here to prevent loosing connected signals
+        // as once the file is written the partner added signal
+        // can arrive anytime.
+        pthread_mutex_lock(&usb->mPartnerLock);
+        usb->mPartnerUp = false;
+        int ret = fputs(convertRoletoString(newRole).c_str(), fp);
+        fclose(fp);
+
+        if (ret != EOF) {
+            struct timespec to;
+            struct timespec now;
+
+        wait_again:
+            clock_gettime(CLOCK_MONOTONIC, &now);
+            to.tv_sec = now.tv_sec + PORT_TYPE_TIMEOUT;
+            to.tv_nsec = now.tv_nsec;
+
+            int err = pthread_cond_timedwait(&usb->mPartnerCV, &usb->mPartnerLock, &to);
+            // There are no uevent signals which implies role swap timed out.
+            if (err == ETIMEDOUT) {
+                ALOGI("uevents wait timedout");
+                // Validity check.
+            } else if (!usb->mPartnerUp) {
+                goto wait_again;
+                // Role switch succeeded since usb->mPartnerUp is true.
+            } else {
+                roleSwitch = true;
+            }
+        } else {
+            ALOGI("Role switch failed while wrting to file");
+        }
+        pthread_mutex_unlock(&usb->mPartnerLock);
+    }
+
+    if (!roleSwitch)
+        switchToDrp(std::string(portName.c_str()));
+
+    return roleSwitch;
+}
+
+Usb::Usb()
+    : mLock(PTHREAD_MUTEX_INITIALIZER),
+      mRoleSwitchLock(PTHREAD_MUTEX_INITIALIZER),
+      mPartnerLock(PTHREAD_MUTEX_INITIALIZER),
+      mPartnerUp(false),
+      mOverheat(ZoneInfo(TemperatureType::USB_PORT, kThermalZoneForTrip,
+                         ThrottlingSeverity::CRITICAL),
+                {ZoneInfo(TemperatureType::UNKNOWN, kThermalZoneForTempReadPrimary,
+                          ThrottlingSeverity::NONE),
+                 ZoneInfo(TemperatureType::UNKNOWN, kThermalZoneForTempReadSecondary1,
+                          ThrottlingSeverity::NONE),
+                 ZoneInfo(TemperatureType::UNKNOWN, kThermalZoneForTempReadSecondary2,
+                          ThrottlingSeverity::NONE)}, kSamplingIntervalSec) {
+    pthread_condattr_t attr;
+    if (pthread_condattr_init(&attr)) {
+        ALOGE("pthread_condattr_init failed: %s", strerror(errno));
+        abort();
+    }
+    if (pthread_condattr_setclock(&attr, CLOCK_MONOTONIC)) {
+        ALOGE("pthread_condattr_setclock failed: %s", strerror(errno));
+        abort();
+    }
+    if (pthread_cond_init(&mPartnerCV, &attr)) {
+        ALOGE("pthread_cond_init failed: %s", strerror(errno));
+        abort();
+    }
+    if (pthread_condattr_destroy(&attr)) {
+        ALOGE("pthread_condattr_destroy failed: %s", strerror(errno));
+        abort();
+    }
+}
+
+Return<void> Usb::switchRole(const hidl_string &portName, const V1_0::PortRole &newRole) {
+    std::string filename = appendRoleNodeHelper(std::string(portName.c_str()), newRole.type);
+    std::string written;
+    FILE *fp;
+    bool roleSwitch = false;
+
+    if (filename == "") {
+        ALOGE("Fatal: invalid node type");
+        return Void();
+    }
+
+    pthread_mutex_lock(&mRoleSwitchLock);
+
+    ALOGI("filename write: %s role:%s", filename.c_str(), convertRoletoString(newRole).c_str());
+
+    if (newRole.type == PortRoleType::MODE) {
+        roleSwitch = switchMode(portName, newRole, this);
+    } else {
+        fp = fopen(filename.c_str(), "w");
+        if (fp != NULL) {
+            int ret = fputs(convertRoletoString(newRole).c_str(), fp);
+            fclose(fp);
+            if ((ret != EOF) && !readFile(filename, &written)) {
+                extractRole(&written);
+                ALOGI("written: %s", written.c_str());
+                if (written == convertRoletoString(newRole)) {
+                    roleSwitch = true;
+                } else {
+                    ALOGE("Role switch failed");
+                }
+            } else {
+                ALOGE("failed to update the new role");
+            }
+        } else {
+            ALOGE("fopen failed");
+        }
+    }
+
+    pthread_mutex_lock(&mLock);
+    if (mCallback_1_0 != NULL) {
+        Return<void> ret = mCallback_1_0->notifyRoleSwitchStatus(
+            portName, newRole, roleSwitch ? Status::SUCCESS : Status::ERROR);
+        if (!ret.isOk())
+            ALOGE("RoleSwitchStatus error %s", ret.description().c_str());
+    } else {
+        ALOGE("Not notifying the userspace. Callback is not set");
+    }
+    pthread_mutex_unlock(&mLock);
+    pthread_mutex_unlock(&mRoleSwitchLock);
+
+    return Void();
+}
+
+Status getAccessoryConnected(const std::string &portName, std::string *accessory) {
+    std::string filename = "/sys/class/typec/" + portName + "-partner/accessory_mode";
+
+    if (readFile(filename, accessory)) {
+        ALOGE("getAccessoryConnected: Failed to open filesystem node: %s", filename.c_str());
+        return Status::ERROR;
+    }
+
+    return Status::SUCCESS;
+}
+
+Status getCurrentRoleHelper(const std::string &portName, bool connected, PortRoleType type,
+                            uint32_t *currentRole) {
+    std::string filename;
+    std::string roleName;
+    std::string accessory;
+
+    // Mode
+
+    if (type == PortRoleType::POWER_ROLE) {
+        filename = "/sys/class/typec/" + portName + "/power_role";
+        *currentRole = static_cast<uint32_t>(PortPowerRole::NONE);
+    } else if (type == PortRoleType::DATA_ROLE) {
+        filename = "/sys/class/typec/" + portName + "/data_role";
+        *currentRole = static_cast<uint32_t>(PortDataRole::NONE);
+    } else if (type == PortRoleType::MODE) {
+        filename = "/sys/class/typec/" + portName + "/data_role";
+        *currentRole = static_cast<uint32_t>(PortMode_1_1::NONE);
+    } else {
+        return Status::ERROR;
+    }
+
+    if (!connected)
+        return Status::SUCCESS;
+
+    if (type == PortRoleType::MODE) {
+        if (getAccessoryConnected(portName, &accessory) != Status::SUCCESS) {
+            return Status::ERROR;
+        }
+        if (accessory == "analog_audio") {
+            *currentRole = static_cast<uint32_t>(PortMode_1_1::AUDIO_ACCESSORY);
+            return Status::SUCCESS;
+        } else if (accessory == "debug") {
+            *currentRole = static_cast<uint32_t>(PortMode_1_1::DEBUG_ACCESSORY);
+            return Status::SUCCESS;
+        }
+    }
+
+    if (readFile(filename, &roleName)) {
+        ALOGE("getCurrentRole: Failed to open filesystem node: %s", filename.c_str());
+        return Status::ERROR;
+    }
+
+    extractRole(&roleName);
+
+    if (roleName == "source") {
+        *currentRole = static_cast<uint32_t>(PortPowerRole::SOURCE);
+    } else if (roleName == "sink") {
+        *currentRole = static_cast<uint32_t>(PortPowerRole::SINK);
+    } else if (roleName == "host") {
+        if (type == PortRoleType::DATA_ROLE)
+            *currentRole = static_cast<uint32_t>(PortDataRole::HOST);
+        else
+            *currentRole = static_cast<uint32_t>(PortMode_1_1::DFP);
+    } else if (roleName == "device") {
+        if (type == PortRoleType::DATA_ROLE)
+            *currentRole = static_cast<uint32_t>(PortDataRole::DEVICE);
+        else
+            *currentRole = static_cast<uint32_t>(PortMode_1_1::UFP);
+    } else if (roleName != "none") {
+        /* case for none has already been addressed.
+         * so we check if the role isn't none.
+         */
+        return Status::UNRECOGNIZED_ROLE;
+    }
+
+    return Status::SUCCESS;
+}
+
+Status getTypeCPortNamesHelper(std::unordered_map<std::string, bool> *names) {
+    DIR *dp;
+
+    dp = opendir(kTypecPath);
+    if (dp != NULL) {
+        struct dirent *ep;
+
+        while ((ep = readdir(dp))) {
+            if (ep->d_type == DT_LNK) {
+                if (std::string::npos == std::string(ep->d_name).find("-partner")) {
+                    std::unordered_map<std::string, bool>::const_iterator portName =
+                        names->find(ep->d_name);
+                    if (portName == names->end()) {
+                        names->insert({ep->d_name, false});
+                    }
+                } else {
+                    (*names)[std::strtok(ep->d_name, "-")] = true;
+                }
+            }
+        }
+        closedir(dp);
+        return Status::SUCCESS;
+    }
+
+    ALOGE("Failed to open /sys/class/typec");
+    return Status::ERROR;
+}
+
+bool canSwitchRoleHelper(const std::string &portName, PortRoleType /*type*/) {
+    std::string filename = "/sys/class/typec/" + portName + "-partner/supports_usb_power_delivery";
+    std::string supportsPD;
+
+    if (!readFile(filename, &supportsPD)) {
+        if (supportsPD == "yes") {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+/*
+ * Reuse the same method for both V1_0 and V1_1 callback objects.
+ * The caller of this method would reconstruct the V1_0::PortStatus
+ * object if required.
+ */
+Status getPortStatusHelper(hidl_vec<PortStatus> *currentPortStatus_1_2, HALVersion version,
+                           android::hardware::usb::V1_3::implementation::Usb *usb) {
+    std::unordered_map<std::string, bool> names;
+    Status result = getTypeCPortNamesHelper(&names);
+    int i = -1;
+
+    if (result == Status::SUCCESS) {
+        currentPortStatus_1_2->resize(names.size());
+        for (std::pair<std::string, bool> port : names) {
+            i++;
+            ALOGI("%s", port.first.c_str());
+            (*currentPortStatus_1_2)[i].status_1_1.status.portName = port.first;
+
+            uint32_t currentRole;
+            if (getCurrentRoleHelper(port.first, port.second, PortRoleType::POWER_ROLE,
+                                     &currentRole) == Status::SUCCESS) {
+                (*currentPortStatus_1_2)[i].status_1_1.status.currentPowerRole =
+                    static_cast<PortPowerRole>(currentRole);
+            } else {
+                ALOGE("Error while retrieving portNames");
+                goto done;
+            }
+
+            if (getCurrentRoleHelper(port.first, port.second, PortRoleType::DATA_ROLE,
+                                     &currentRole) == Status::SUCCESS) {
+                (*currentPortStatus_1_2)[i].status_1_1.status.currentDataRole =
+                    static_cast<PortDataRole>(currentRole);
+            } else {
+                ALOGE("Error while retrieving current port role");
+                goto done;
+            }
+
+            if (getCurrentRoleHelper(port.first, port.second, PortRoleType::MODE, &currentRole) ==
+                Status::SUCCESS) {
+                (*currentPortStatus_1_2)[i].status_1_1.currentMode =
+                    static_cast<PortMode_1_1>(currentRole);
+                (*currentPortStatus_1_2)[i].status_1_1.status.currentMode =
+                    static_cast<V1_0::PortMode>(currentRole);
+            } else {
+                ALOGE("Error while retrieving current data role");
+                goto done;
+            }
+
+            (*currentPortStatus_1_2)[i].status_1_1.status.canChangeMode = true;
+            (*currentPortStatus_1_2)[i].status_1_1.status.canChangeDataRole =
+                port.second ? canSwitchRoleHelper(port.first, PortRoleType::DATA_ROLE) : false;
+            (*currentPortStatus_1_2)[i].status_1_1.status.canChangePowerRole =
+                port.second ? canSwitchRoleHelper(port.first, PortRoleType::POWER_ROLE) : false;
+
+            if (version == HALVersion::V1_0) {
+                ALOGI("HAL version V1_0");
+                (*currentPortStatus_1_2)[i].status_1_1.status.supportedModes = V1_0::PortMode::DRP;
+            } else {
+                if (version == HALVersion::V1_1)
+                    ALOGI("HAL version V1_1");
+                else
+                    ALOGI("HAL version V1_2");
+                (*currentPortStatus_1_2)[i].status_1_1.supportedModes = 0 | PortMode_1_1::DRP;
+                (*currentPortStatus_1_2)[i].status_1_1.status.supportedModes = V1_0::PortMode::NONE;
+                (*currentPortStatus_1_2)[i].status_1_1.status.currentMode = V1_0::PortMode::NONE;
+            }
+
+            // Query temperature for the first connect
+            if (port.second && !usb->mPluggedTemperatureCelsius) {
+                usb->mOverheat.getCurrentTemperature(kThermalZoneForTempReadPrimary,
+                    &usb->mPluggedTemperatureCelsius);
+                ALOGV("USB Initial temperature: %f", usb->mPluggedTemperatureCelsius);
+            }
+            ALOGI(
+                "%d:%s connected:%d canChangeMode:%d canChagedata:%d canChangePower:%d "
+                "supportedModes:%d",
+                i, port.first.c_str(), port.second,
+                (*currentPortStatus_1_2)[i].status_1_1.status.canChangeMode,
+                (*currentPortStatus_1_2)[i].status_1_1.status.canChangeDataRole,
+                (*currentPortStatus_1_2)[i].status_1_1.status.canChangePowerRole,
+                (*currentPortStatus_1_2)[i].status_1_1.supportedModes);
+        }
+        return Status::SUCCESS;
+    }
+done:
+    return Status::ERROR;
+}
+
+void queryVersionHelper(android::hardware::usb::V1_3::implementation::Usb *usb,
+                        hidl_vec<PortStatus> *currentPortStatus_1_2) {
+    hidl_vec<V1_1::PortStatus_1_1> currentPortStatus_1_1;
+    hidl_vec<V1_0::PortStatus> currentPortStatus;
+    Status status;
+    sp<V1_1::IUsbCallback> callback_V1_1 = V1_1::IUsbCallback::castFrom(usb->mCallback_1_0);
+    sp<IUsbCallback> callback_V1_2 = IUsbCallback::castFrom(usb->mCallback_1_0);
+
+    pthread_mutex_lock(&usb->mLock);
+    if (usb->mCallback_1_0 != NULL) {
+        if (callback_V1_2 != NULL) {
+            status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_2, usb);
+            if (status == Status::SUCCESS)
+                queryMoistureDetectionStatus(currentPortStatus_1_2);
+        } else if (callback_V1_1 != NULL) {
+            status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_1, usb);
+            currentPortStatus_1_1.resize(currentPortStatus_1_2->size());
+            for (unsigned long i = 0; i < currentPortStatus_1_2->size(); i++)
+                currentPortStatus_1_1[i] = (*currentPortStatus_1_2)[i].status_1_1;
+        } else {
+            status = getPortStatusHelper(currentPortStatus_1_2, HALVersion::V1_0, usb);
+            currentPortStatus.resize(currentPortStatus_1_2->size());
+            for (unsigned long i = 0; i < currentPortStatus_1_2->size(); i++)
+                currentPortStatus[i] = (*currentPortStatus_1_2)[i].status_1_1.status;
+        }
+
+        Return<void> ret;
+
+        if (callback_V1_2 != NULL)
+            ret = callback_V1_2->notifyPortStatusChange_1_2(*currentPortStatus_1_2, status);
+        else if (callback_V1_1 != NULL)
+            ret = callback_V1_1->notifyPortStatusChange_1_1(currentPortStatus_1_1, status);
+        else
+            ret = usb->mCallback_1_0->notifyPortStatusChange(currentPortStatus, status);
+
+        if (!ret.isOk())
+            ALOGE("queryPortStatus_1_2 error %s", ret.description().c_str());
+    } else {
+        ALOGI("Notifying userspace skipped. Callback is NULL");
+    }
+    pthread_mutex_unlock(&usb->mLock);
+}
+
+Return<void> Usb::queryPortStatus() {
+    hidl_vec<PortStatus> currentPortStatus_1_2;
+
+    queryVersionHelper(this, &currentPortStatus_1_2);
+    return Void();
+}
+
+Return<void> Usb::enableContaminantPresenceDetection(const hidl_string & /*portName*/,
+                                                     bool enable) {
+
+    std::string disable = GetProperty(kDisableContatminantDetection, "");
+
+    if (disable != "true")
+        writeFile(enabledPath, enable ? "1" : "0");
+
+    hidl_vec<PortStatus> currentPortStatus_1_2;
+
+    queryVersionHelper(this, &currentPortStatus_1_2);
+    return Void();
+}
+
+Return<void> Usb::enableContaminantPresenceProtection(const hidl_string & /*portName*/,
+                                                      bool /*enable*/) {
+    hidl_vec<PortStatus> currentPortStatus_1_2;
+
+    queryVersionHelper(this, &currentPortStatus_1_2);
+    return Void();
+}
+
+void report_overheat_event(android::hardware::usb::V1_3::implementation::Usb *usb) {
+    VendorUsbPortOverheat overheat_info;
+    std::string contents;
+
+    overheat_info.set_plug_temperature_deci_c(usb->mPluggedTemperatureCelsius * 10);
+    overheat_info.set_max_temperature_deci_c(usb->mOverheat.getMaxOverheatTemperature() * 10);
+    if (ReadFileToString(std::string(kOverheatStatsPath) + "trip_time", &contents)) {
+        overheat_info.set_time_to_overheat_secs(stoi(contents));
+    } else {
+        ALOGE("Unable to read trip_time");
+        return;
+    }
+    if (ReadFileToString(std::string(kOverheatStatsPath) + "hysteresis_time", &contents)) {
+        overheat_info.set_time_to_hysteresis_secs(stoi(contents));
+    } else {
+        ALOGE("Unable to read hysteresis_time");
+        return;
+    }
+    if (ReadFileToString(std::string(kOverheatStatsPath) + "cleared_time", &contents)) {
+        overheat_info.set_time_to_inactive_secs(stoi(contents));
+    } else {
+        ALOGE("Unable to read cleared_time");
+        return;
+    }
+
+    const std::shared_ptr<IStats> stats_client = getStatsService();
+    if (!stats_client) {
+        ALOGE("Unable to get AIDL Stats service");
+    } else {
+        reportUsbPortOverheat(stats_client, overheat_info);
+    }
+}
+
+struct data {
+    int uevent_fd;
+    android::hardware::usb::V1_3::implementation::Usb *usb;
+};
+
+static void uevent_event(uint32_t /*epevents*/, struct data *payload) {
+    char msg[UEVENT_MSG_LEN + 2];
+    char *cp;
+    int n;
+
+    n = uevent_kernel_multicast_recv(payload->uevent_fd, msg, UEVENT_MSG_LEN);
+    if (n <= 0)
+        return;
+    if (n >= UEVENT_MSG_LEN) /* overflow -- discard */
+        return;
+
+    msg[n] = '\0';
+    msg[n + 1] = '\0';
+    cp = msg;
+
+    while (*cp) {
+        if (std::regex_match(cp, std::regex("(add)(.*)(-partner)"))) {
+            ALOGI("partner added");
+            pthread_mutex_lock(&payload->usb->mPartnerLock);
+            payload->usb->mPartnerUp = true;
+            pthread_cond_signal(&payload->usb->mPartnerCV);
+            pthread_mutex_unlock(&payload->usb->mPartnerLock);
+            // Update Plugged temperature
+            payload->usb->mOverheat.getCurrentTemperature(kThermalZoneForTempReadPrimary,
+                    &payload->usb->mPluggedTemperatureCelsius);
+            ALOGI("Usb Plugged temp: %f", payload->usb->mPluggedTemperatureCelsius);
+        } else if (!strncmp(cp, "DEVTYPE=typec_", strlen("DEVTYPE=typec_")) ||
+                   !strncmp(cp, "DRIVER=max77759tcpc",
+                            strlen("DRIVER=max77759tcpc"))) {
+            hidl_vec<PortStatus> currentPortStatus_1_2;
+            queryVersionHelper(payload->usb, &currentPortStatus_1_2);
+
+            // Role switch is not in progress and port is in disconnected state
+            if (!pthread_mutex_trylock(&payload->usb->mRoleSwitchLock)) {
+                for (unsigned long i = 0; i < currentPortStatus_1_2.size(); i++) {
+                    DIR *dp =
+                        opendir(std::string("/sys/class/typec/" +
+                                            std::string(currentPortStatus_1_2[i]
+                                                            .status_1_1.status.portName.c_str()) +
+                                            "-partner")
+                                    .c_str());
+                    if (dp == NULL) {
+                        // PortRole role = {.role = static_cast<uint32_t>(PortMode::UFP)};
+                        switchToDrp(currentPortStatus_1_2[i].status_1_1.status.portName);
+                    } else {
+                        closedir(dp);
+                    }
+                }
+                pthread_mutex_unlock(&payload->usb->mRoleSwitchLock);
+            }
+            break;
+        } else if (!strncmp(cp, kOverheatStatsDev, strlen(kOverheatStatsDev))) {
+            ALOGV("Overheat Cooling device suez update");
+            report_overheat_event(payload->usb);
+        }
+        /* advance to after the next \0 */
+        while (*cp++) {
+        }
+    }
+}
+
+void *work(void *param) {
+    int epoll_fd, uevent_fd;
+    struct epoll_event ev;
+    int nevents = 0;
+    struct data payload;
+
+    ALOGE("creating thread");
+
+    uevent_fd = uevent_open_socket(64 * 1024, true);
+
+    if (uevent_fd < 0) {
+        ALOGE("uevent_init: uevent_open_socket failed\n");
+        return NULL;
+    }
+
+    payload.uevent_fd = uevent_fd;
+    payload.usb = (android::hardware::usb::V1_3::implementation::Usb *)param;
+
+    fcntl(uevent_fd, F_SETFL, O_NONBLOCK);
+
+    ev.events = EPOLLIN;
+    ev.data.ptr = (void *)uevent_event;
+
+    epoll_fd = epoll_create(64);
+    if (epoll_fd == -1) {
+        ALOGE("epoll_create failed; errno=%d", errno);
+        goto error;
+    }
+
+    if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, uevent_fd, &ev) == -1) {
+        ALOGE("epoll_ctl failed; errno=%d", errno);
+        goto error;
+    }
+
+    while (!destroyThread) {
+        struct epoll_event events[64];
+
+        nevents = epoll_wait(epoll_fd, events, 64, -1);
+        if (nevents == -1) {
+            if (errno == EINTR)
+                continue;
+            ALOGE("usb epoll_wait failed; errno=%d", errno);
+            break;
+        }
+
+        for (int n = 0; n < nevents; ++n) {
+            if (events[n].data.ptr)
+                (*(void (*)(int, struct data *payload))events[n].data.ptr)(events[n].events,
+                                                                           &payload);
+        }
+    }
+
+    ALOGI("exiting worker thread");
+error:
+    close(uevent_fd);
+
+    if (epoll_fd >= 0)
+        close(epoll_fd);
+
+    return NULL;
+}
+
+void sighandler(int sig) {
+    if (sig == SIGUSR1) {
+        destroyThread = true;
+        ALOGI("destroy set");
+        return;
+    }
+    signal(SIGUSR1, sighandler);
+}
+
+Return<void> Usb::setCallback(const sp<V1_0::IUsbCallback> &callback) {
+    sp<V1_1::IUsbCallback> callback_V1_1 = V1_1::IUsbCallback::castFrom(callback);
+    sp<IUsbCallback> callback_V1_2 = IUsbCallback::castFrom(callback);
+
+    if (callback != NULL) {
+        if (callback_V1_2 != NULL)
+            ALOGI("Registering 1.2 callback");
+        else if (callback_V1_1 != NULL)
+            ALOGI("Registering 1.1 callback");
+    }
+
+    pthread_mutex_lock(&mLock);
+    /*
+     * When both the old callback and new callback values are NULL,
+     * there is no need to spin off the worker thread.
+     * When both the values are not NULL, we would already have a
+     * worker thread running, so updating the callback object would
+     * be suffice.
+     */
+    if ((mCallback_1_0 == NULL && callback == NULL) ||
+        (mCallback_1_0 != NULL && callback != NULL)) {
+        /*
+         * Always store as V1_0 callback object. Type cast to V1_1
+         * when the callback is actually invoked.
+         */
+        mCallback_1_0 = callback;
+        pthread_mutex_unlock(&mLock);
+        return Void();
+    }
+
+    mCallback_1_0 = callback;
+    ALOGI("registering callback");
+
+    // Kill the worker thread if the new callback is NULL.
+    if (mCallback_1_0 == NULL) {
+        pthread_mutex_unlock(&mLock);
+        if (!pthread_kill(mPoll, SIGUSR1)) {
+            pthread_join(mPoll, NULL);
+            ALOGI("pthread destroyed");
+        }
+        return Void();
+    }
+
+    destroyThread = false;
+    signal(SIGUSR1, sighandler);
+
+    /*
+     * Create a background thread if the old callback value is NULL
+     * and being updated with a new value.
+     */
+    if (pthread_create(&mPoll, NULL, work, this)) {
+        ALOGE("pthread creation failed %d", errno);
+        mCallback_1_0 = NULL;
+    }
+
+    pthread_mutex_unlock(&mLock);
+    return Void();
+}
+
+}  // namespace implementation
+}  // namespace V1_3
+}  // namespace usb
+}  // namespace hardware
+}  // namespace android
diff --git a/usb/Usb.h b/usb/Usb.h
new file mode 100644
index 0000000..23ed011
--- /dev/null
+++ b/usb/Usb.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#pragma once
+
+#include <android-base/file.h>
+#include <android/hardware/usb/1.3/IUsb.h>
+#include <android/hardware/usb/1.2/types.h>
+#include <android/hardware/usb/1.2/IUsbCallback.h>
+#include <hidl/Status.h>
+#include <pixelusb/UsbOverheatEvent.h>
+#include <utils/Log.h>
+
+#define UEVENT_MSG_LEN 2048
+// The type-c stack waits for 4.5 - 5.5 secs before declaring a port non-pd.
+// The -partner directory would not be created until this is done.
+// Having a margin of ~3 secs for the directory and other related bookeeping
+// structures created and uvent fired.
+#define PORT_TYPE_TIMEOUT 8
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace V1_3 {
+namespace implementation {
+
+using ::android::base::WriteStringToFile;
+using ::android::base::ReadFileToString;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::google::pixel::usb::UsbOverheatEvent;
+using ::android::hardware::google::pixel::usb::ZoneInfo;
+using ::android::hardware::thermal::V2_0::TemperatureType;
+using ::android::hardware::thermal::V2_0::ThrottlingSeverity;
+using ::android::hardware::usb::V1_0::PortRole;
+using ::android::hardware::usb::V1_0::PortRoleType;
+using ::android::hardware::usb::V1_0::PortDataRole;
+using ::android::hardware::usb::V1_0::PortPowerRole;
+using ::android::hardware::usb::V1_0::PortRole;
+using ::android::hardware::usb::V1_0::PortRoleType;
+using ::android::hardware::usb::V1_0::Status;
+using ::android::hardware::usb::V1_3::IUsb;
+using ::android::hardware::usb::V1_2::IUsbCallback;
+using ::android::hardware::usb::V1_2::PortStatus;
+using ::android::hardware::usb::V1_1::PortMode_1_1;
+using ::android::hardware::usb::V1_1::PortStatus_1_1;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::sp;
+
+enum class HALVersion{
+    V1_0,
+    V1_1,
+    V1_2,
+    V1_3
+};
+
+constexpr char kGadgetName[] = "11110000.dwc3";
+#define NEW_UDC_PATH "/sys/devices/platform/11110000.usb/"
+
+#define ID_PATH NEW_UDC_PATH "dwc3_exynos_otg_id"
+#define VBUS_PATH NEW_UDC_PATH "dwc3_exynos_otg_b_sess"
+#define USB_DATA_PATH NEW_UDC_PATH "usb_data_enabled"
+
+struct Usb : public IUsb {
+    Usb();
+
+    Return<void> switchRole(const hidl_string &portName, const PortRole &role) override;
+    Return<void> setCallback(const sp<V1_0::IUsbCallback>& callback) override;
+    Return<void> queryPortStatus() override;
+    Return<void> enableContaminantPresenceDetection(const hidl_string &portName, bool enable);
+    Return<void> enableContaminantPresenceProtection(const hidl_string &portName, bool enable);
+    Return<bool> enableUsbDataSignal(bool enable) override;
+
+    sp<V1_0::IUsbCallback> mCallback_1_0;
+    // Protects mCallback variable
+    pthread_mutex_t mLock;
+    // Protects roleSwitch operation
+    pthread_mutex_t mRoleSwitchLock;
+    // Threads waiting for the partner to come back wait here
+    pthread_cond_t mPartnerCV;
+    // lock protecting mPartnerCV
+    pthread_mutex_t mPartnerLock;
+    // Variable to signal partner coming back online after type switch
+    bool mPartnerUp;
+
+    // Usb Overheat object for push suez event
+    UsbOverheatEvent mOverheat;
+    // Temperature when connected
+    float mPluggedTemperatureCelsius;
+
+  private:
+    pthread_t mPoll;
+};
+
+}  // namespace implementation
+}  // namespace V1_3
+}  // namespace usb
+}  // namespace hardware
+}  // namespace android
diff --git a/usb/UsbGadget.cpp b/usb/UsbGadget.cpp
new file mode 100644
index 0000000..909fb48
--- /dev/null
+++ b/usb/UsbGadget.cpp
@@ -0,0 +1,393 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#define LOG_TAG "android.hardware.usb.gadget@1.2-service.gs101"
+
+#include "UsbGadget.h"
+#include <dirent.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <sys/inotify.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace gadget {
+namespace V1_2 {
+namespace implementation {
+
+UsbGadget::UsbGadget() {
+    if (access(OS_DESC_PATH, R_OK) != 0) {
+        ALOGE("configfs setup not done yet");
+        abort();
+    }
+}
+
+void currentFunctionsAppliedCallback(bool functionsApplied, void *payload) {
+    UsbGadget *gadget = (UsbGadget *)payload;
+    gadget->mCurrentUsbFunctionsApplied = functionsApplied;
+}
+
+Return<void> UsbGadget::getCurrentUsbFunctions(const sp<V1_0::IUsbGadgetCallback> &callback) {
+    Return<void> ret = callback->getCurrentUsbFunctionsCb(
+        mCurrentUsbFunctions,
+        mCurrentUsbFunctionsApplied ? Status::FUNCTIONS_APPLIED : Status::FUNCTIONS_NOT_APPLIED);
+    if (!ret.isOk())
+        ALOGE("Call to getCurrentUsbFunctionsCb failed %s", ret.description().c_str());
+
+    return Void();
+}
+
+Return<void> UsbGadget::getUsbSpeed(const sp<V1_2::IUsbGadgetCallback> &callback) {
+    std::string current_speed;
+    if (ReadFileToString(SPEED_PATH, &current_speed)) {
+        current_speed = Trim(current_speed);
+        ALOGI("current USB speed is %s", current_speed.c_str());
+        if (current_speed == "low-speed")
+            mUsbSpeed = UsbSpeed::LOWSPEED;
+        else if (current_speed == "full-speed")
+            mUsbSpeed = UsbSpeed::FULLSPEED;
+        else if (current_speed == "high-speed")
+            mUsbSpeed = UsbSpeed::HIGHSPEED;
+        else if (current_speed == "super-speed")
+            mUsbSpeed = UsbSpeed::SUPERSPEED;
+        else if (current_speed == "super-speed-plus")
+            mUsbSpeed = UsbSpeed::SUPERSPEED_10Gb;
+        else if (current_speed == "UNKNOWN")
+            mUsbSpeed = UsbSpeed::UNKNOWN;
+        else
+            mUsbSpeed = UsbSpeed::RESERVED_SPEED;
+    } else {
+        ALOGE("Fail to read current speed");
+        mUsbSpeed = UsbSpeed::UNKNOWN;
+    }
+
+    if (callback) {
+        Return<void> ret = callback->getUsbSpeedCb(mUsbSpeed);
+
+        if (!ret.isOk())
+            ALOGE("Call to getUsbSpeedCb failed %s", ret.description().c_str());
+    }
+
+    return Void();
+}
+
+V1_0::Status UsbGadget::tearDownGadget() {
+    if (resetGadget() != Status::SUCCESS)
+        return Status::ERROR;
+
+    if (monitorFfs.isMonitorRunning()) {
+        monitorFfs.reset();
+    } else {
+        ALOGI("mMonitor not running");
+    }
+    return Status::SUCCESS;
+}
+
+static V1_0::Status validateAndSetVidPid(uint64_t functions) {
+    V1_0::Status ret = Status::SUCCESS;
+    std::string vendorFunctions = getVendorFunctions();
+
+    switch (functions) {
+        case static_cast<uint64_t>(GadgetFunction::MTP):
+            if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                ret = Status::CONFIGURATION_NOT_SUPPORTED;
+            } else {
+                ret = setVidPid("0x18d1", "0x4ee1");
+            }
+            break;
+        case GadgetFunction::ADB | GadgetFunction::MTP:
+            if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                ret = Status::CONFIGURATION_NOT_SUPPORTED;
+            } else {
+                ret = setVidPid("0x18d1", "0x4ee2");
+            }
+            break;
+        case static_cast<uint64_t>(GadgetFunction::RNDIS):
+        case GadgetFunction::RNDIS | GadgetFunction::NCM:
+            if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                ret = Status::CONFIGURATION_NOT_SUPPORTED;
+            } else {
+                ret = setVidPid("0x18d1", "0x4ee3");
+            }
+            break;
+        case GadgetFunction::ADB | GadgetFunction::RNDIS:
+        case GadgetFunction::ADB | GadgetFunction::RNDIS | GadgetFunction::NCM:
+            if (vendorFunctions == "dm") {
+                ret = setVidPid("0x04e8", "0x6862");
+            } else {
+                if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                    ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                    ret = Status::CONFIGURATION_NOT_SUPPORTED;
+                } else {
+                    ret = setVidPid("0x18d1", "0x4ee4");
+                }
+            }
+            break;
+        case static_cast<uint64_t>(GadgetFunction::PTP):
+            if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                ret = Status::CONFIGURATION_NOT_SUPPORTED;
+            } else {
+                ret = setVidPid("0x18d1", "0x4ee5");
+            }
+            break;
+        case GadgetFunction::ADB | GadgetFunction::PTP:
+            if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                ret = Status::CONFIGURATION_NOT_SUPPORTED;
+            } else {
+                ret = setVidPid("0x18d1", "0x4ee6");
+            }
+            break;
+        case static_cast<uint64_t>(GadgetFunction::ADB):
+            if (vendorFunctions == "dm") {
+                ret = setVidPid("0x04e8", "0x6862");
+            } else if (vendorFunctions == "etr_miu") {
+                ret = setVidPid("0x18d1", "0x4ee2");
+            } else {
+                if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                    ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                    ret = Status::CONFIGURATION_NOT_SUPPORTED;
+                } else {
+                    ret = setVidPid("0x18d1", "0x4ee7");
+                }
+            }
+            break;
+        case static_cast<uint64_t>(GadgetFunction::MIDI):
+            if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                ret = Status::CONFIGURATION_NOT_SUPPORTED;
+            } else {
+                ret = setVidPid("0x18d1", "0x4ee8");
+            }
+            break;
+        case GadgetFunction::ADB | GadgetFunction::MIDI:
+            if (!(vendorFunctions == "user" || vendorFunctions == "")) {
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+                ret = Status::CONFIGURATION_NOT_SUPPORTED;
+            } else {
+                ret = setVidPid("0x18d1", "0x4ee9");
+            }
+            break;
+        case static_cast<uint64_t>(GadgetFunction::ACCESSORY):
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x2d00");
+            break;
+        case GadgetFunction::ADB | GadgetFunction::ACCESSORY:
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x2d01");
+            break;
+        case static_cast<uint64_t>(GadgetFunction::AUDIO_SOURCE):
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x2d02");
+            break;
+        case GadgetFunction::ADB | GadgetFunction::AUDIO_SOURCE:
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x2d03");
+            break;
+        case GadgetFunction::ACCESSORY | GadgetFunction::AUDIO_SOURCE:
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x2d04");
+            break;
+        case GadgetFunction::ADB | GadgetFunction::ACCESSORY | GadgetFunction::AUDIO_SOURCE:
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x2d05");
+            break;
+        case static_cast<uint64_t>(GadgetFunction::NCM):
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x4eeb");
+            break;
+        case GadgetFunction::ADB | GadgetFunction::NCM:
+            if (!(vendorFunctions == "user" || vendorFunctions == ""))
+                ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
+            ret = setVidPid("0x18d1", "0x4eec");
+            break;
+        default:
+            ALOGE("Combination not supported");
+            ret = Status::CONFIGURATION_NOT_SUPPORTED;
+    }
+    return ret;
+}
+
+Return<Status> UsbGadget::reset() {
+    ALOGI("USB Gadget reset");
+
+    if (!WriteStringToFile("none", PULLUP_PATH)) {
+        ALOGI("Gadget cannot be pulled down");
+        return Status::ERROR;
+    }
+
+    usleep(kDisconnectWaitUs);
+
+    if (!WriteStringToFile(kGadgetName, PULLUP_PATH)) {
+        ALOGI("Gadget cannot be pulled up");
+        return Status::ERROR;
+    }
+
+    return Status::SUCCESS;
+}
+
+V1_0::Status UsbGadget::setupFunctions(uint64_t functions,
+                                       const sp<V1_0::IUsbGadgetCallback> &callback,
+                                       uint64_t timeout) {
+    bool ffsEnabled = false;
+    int i = 0;
+
+    if (addGenericAndroidFunctions(&monitorFfs, functions, &ffsEnabled, &i) !=
+        Status::SUCCESS)
+        return Status::ERROR;
+
+    std::string vendorFunctions = getVendorFunctions();
+
+    if (vendorFunctions == "dm") {
+        ALOGI("enable usbradio debug functions");
+        if ((functions & GadgetFunction::RNDIS) != 0) {
+            if (linkFunction("acm.gs6", i++))
+	        return Status::ERROR;
+            if (linkFunction("dm.gs7", i++))
+                return Status::ERROR;
+        } else {
+            if (linkFunction("dm.gs7", i++))
+                return Status::ERROR;
+            if (linkFunction("acm.gs6", i++))
+                return Status::ERROR;
+	}
+    } else if (vendorFunctions == "etr_miu") {
+        ALOGI("enable etr_miu functions");
+        if (linkFunction("etr_miu.gs11", i++))
+            return Status::ERROR;
+    }
+
+    if ((functions & GadgetFunction::ADB) != 0) {
+        ffsEnabled = true;
+        if (addAdb(&monitorFfs, &i) != Status::SUCCESS)
+            return Status::ERROR;
+    }
+
+    if ((functions & GadgetFunction::NCM) != 0) {
+        ALOGI("setCurrentUsbFunctions ncm");
+        if (linkFunction("ncm.gs9", i++))
+            return Status::ERROR;
+    }
+
+    // Pull up the gadget right away when there are no ffs functions.
+    if (!ffsEnabled) {
+        if (!WriteStringToFile(kGadgetName, PULLUP_PATH))
+            return Status::ERROR;
+        mCurrentUsbFunctionsApplied = true;
+        if (callback)
+            callback->setCurrentUsbFunctionsCb(functions, Status::SUCCESS);
+        return Status::SUCCESS;
+    }
+
+    monitorFfs.registerFunctionsAppliedCallback(&currentFunctionsAppliedCallback, this);
+    // Monitors the ffs paths to pull up the gadget when descriptors are written.
+    // Also takes of the pulling up the gadget again if the userspace process
+    // dies and restarts.
+    monitorFfs.startMonitor();
+
+    if (kDebug)
+        ALOGI("Mainthread in Cv");
+
+    if (callback) {
+        bool pullup = monitorFfs.waitForPullUp(timeout);
+        Return<void> ret = callback->setCurrentUsbFunctionsCb(
+            functions, pullup ? Status::SUCCESS : Status::ERROR);
+        if (!ret.isOk())
+            ALOGE("setCurrentUsbFunctionsCb error %s", ret.description().c_str());
+    }
+
+    return Status::SUCCESS;
+}
+
+Return<void> UsbGadget::setCurrentUsbFunctions(uint64_t functions,
+                                               const sp<V1_0::IUsbGadgetCallback> &callback,
+                                               uint64_t timeout) {
+    std::unique_lock<std::mutex> lk(mLockSetCurrentFunction);
+
+    mCurrentUsbFunctions = functions;
+    mCurrentUsbFunctionsApplied = false;
+
+    // Unlink the gadget and stop the monitor if running.
+    V1_0::Status status = tearDownGadget();
+    if (status != Status::SUCCESS) {
+        goto error;
+    }
+
+    ALOGI("Returned from tearDown gadget");
+
+    // Leave the gadget pulled down to give time for the host to sense disconnect.
+    usleep(kDisconnectWaitUs);
+
+    if (functions == static_cast<uint64_t>(GadgetFunction::NONE)) {
+        if (callback == NULL)
+            return Void();
+        Return<void> ret = callback->setCurrentUsbFunctionsCb(functions, Status::SUCCESS);
+        if (!ret.isOk())
+            ALOGE("Error while calling setCurrentUsbFunctionsCb %s", ret.description().c_str());
+        return Void();
+    }
+
+    status = validateAndSetVidPid(functions);
+
+    if (status != Status::SUCCESS) {
+        goto error;
+    }
+
+    status = setupFunctions(functions, callback, timeout);
+    if (status != Status::SUCCESS) {
+        goto error;
+    }
+
+    if (functions & GadgetFunction::NCM) {
+        SetProperty("vendor.usb.dwc3_irq", "big");
+    } else {
+        SetProperty("vendor.usb.dwc3_irq", "medium");
+    }
+
+    ALOGI("Usb Gadget setcurrent functions called successfully");
+    return Void();
+
+error:
+    ALOGI("Usb Gadget setcurrent functions failed");
+    if (callback == NULL)
+        return Void();
+    Return<void> ret = callback->setCurrentUsbFunctionsCb(functions, status);
+    if (!ret.isOk())
+        ALOGE("Error while calling setCurrentUsbFunctionsCb %s", ret.description().c_str());
+    return Void();
+}
+}  // namespace implementation
+}  // namespace V1_2
+}  // namespace gadget
+}  // namespace usb
+}  // namespace hardware
+}  // namespace android
diff --git a/usb/UsbGadget.h b/usb/UsbGadget.h
new file mode 100644
index 0000000..2669f8d
--- /dev/null
+++ b/usb/UsbGadget.h
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#pragma once
+
+#include <android-base/file.h>
+#include <android-base/properties.h>
+#include <android-base/unique_fd.h>
+#include <android-base/strings.h>
+#include <android/hardware/usb/gadget/1.2/IUsbGadget.h>
+#include <android/hardware/usb/gadget/1.2/types.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <pixelusb/UsbGadgetCommon.h>
+#include <sys/epoll.h>
+#include <sys/eventfd.h>
+#include <utils/Log.h>
+#include <chrono>
+#include <condition_variable>
+#include <mutex>
+#include <string>
+#include <thread>
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace gadget {
+namespace V1_2 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::base::GetProperty;
+using ::android::base::SetProperty;
+using ::android::base::unique_fd;
+using ::android::base::ReadFileToString;
+using ::android::base::Trim;
+using ::android::base::WriteStringToFile;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::google::pixel::usb::addAdb;
+using ::android::hardware::google::pixel::usb::addEpollFd;
+using ::android::hardware::google::pixel::usb::getVendorFunctions;
+using ::android::hardware::google::pixel::usb::kDebug;
+using ::android::hardware::google::pixel::usb::kDisconnectWaitUs;
+using ::android::hardware::google::pixel::usb::linkFunction;
+using ::android::hardware::google::pixel::usb::MonitorFfs;
+using ::android::hardware::google::pixel::usb::resetGadget;
+using ::android::hardware::google::pixel::usb::setVidPid;
+using ::android::hardware::google::pixel::usb::unlinkFunctions;
+using ::android::hardware::usb::gadget::V1_0::Status;
+using ::android::hardware::usb::gadget::V1_0::IUsbGadgetCallback;
+using ::android::hardware::usb::gadget::V1_2::IUsbGadget;
+using ::android::hardware::usb::gadget::V1_2::GadgetFunction;
+using ::std::string;
+
+constexpr char kGadgetName[] = "11110000.dwc3";
+#ifndef UDC_PATH
+#define UDC_PATH "/sys/class/udc/11110000.dwc3/"
+#endif
+static MonitorFfs monitorFfs(kGadgetName);
+
+#define SPEED_PATH UDC_PATH "current_speed"
+
+struct UsbGadget : public IUsbGadget {
+    UsbGadget();
+
+    // Makes sure that only one request is processed at a time.
+    std::mutex mLockSetCurrentFunction;
+    uint64_t mCurrentUsbFunctions;
+    bool mCurrentUsbFunctionsApplied;
+    UsbSpeed mUsbSpeed;
+
+    Return<void> setCurrentUsbFunctions(uint64_t functions,
+                                        const sp<V1_0::IUsbGadgetCallback> &callback,
+                                        uint64_t timeout) override;
+
+    Return<void> getCurrentUsbFunctions(const sp<V1_0::IUsbGadgetCallback> &callback) override;
+
+    Return<Status> reset() override;
+
+    Return<void> getUsbSpeed(const sp<V1_2::IUsbGadgetCallback> &callback) override;
+
+  private:
+    Status tearDownGadget();
+    Status setupFunctions(uint64_t functions, const sp<V1_0::IUsbGadgetCallback> &callback,
+                          uint64_t timeout);
+};
+
+}  // namespace implementation
+}  // namespace V1_2
+}  // namespace gadget
+}  // namespace usb
+}  // namespace hardware
+}  // namespace android
diff --git a/usb/android.hardware.usb.gadget@1.2-service.gs101.xml b/usb/android.hardware.usb.gadget@1.2-service.gs101.xml
new file mode 100644
index 0000000..8557f6f
--- /dev/null
+++ b/usb/android.hardware.usb.gadget@1.2-service.gs101.xml
@@ -0,0 +1,11 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.usb.gadget</name>
+        <transport>hwbinder</transport>
+        <version>1.2</version>
+        <interface>
+            <name>IUsbGadget</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</manifest>
diff --git a/usb/android.hardware.usb@1.3-service.gs101.rc b/usb/android.hardware.usb@1.3-service.gs101.rc
new file mode 100644
index 0000000..966726b
--- /dev/null
+++ b/usb/android.hardware.usb@1.3-service.gs101.rc
@@ -0,0 +1,97 @@
+service vendor.usb-hal-1-3 /vendor/bin/hw/android.hardware.usb@1.3-service.gs101
+    class hal
+    user system
+    group system shell mtp wakelock
+    capabilities WAKE_ALARM BLOCK_SUSPEND
+
+on post-fs
+    chown root system /sys/class/typec/port0/power_role
+    chown root system /sys/class/typec/port0/data_role
+    chown root system /sys/class/typec/port0/port_type
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-5/i2c-max77759tcpc/contaminant_detection
+    chown root system /sys/devices/platform/10d50000.hsi2c/i2c-6/i2c-max77759tcpc/contaminant_detection
+    chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_b_sess
+    chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_id
+    chown root system /sys/devices/platform/11110000.usb/usb_data_enabled
+    chmod 664 /sys/class/typec/port0/power_role
+    chmod 664 /sys/class/typec/port0/data_role
+    chmod 664 /sys/class/typec/port0/port_type
+    chmod 664 /sys/devices/platform/11110000.usb/dwc3_exynos_otg_b_sess
+    chmod 664 /sys/devices/platform/11110000.usb/dwc3_exynos_otg_id
+    chmod 664 /sys/devices/platform/11110000.usb/usb_data_enabled
+
+on property:vendor.usb.functions.ready=1
+    chown system system /config/usb_gadget/
+    chown system system /config/usb_gadget/g1
+    chown system system /config/usb_gadget/g1/UDC
+    chown system system /config/usb_gadget/g1/bDeviceClass
+    chown system system /config/usb_gadget/g1/bDeviceProtocol
+    chown system system /config/usb_gadget/g1/bDeviceSubClass
+    chown system system /config/usb_gadget/g1/bMaxPacketSize0
+    chown system system /config/usb_gadget/g1/bcdDevice
+    chown system system /config/usb_gadget/g1/bcdUSB
+    chown system system /config/usb_gadget/g1/configs
+    chown system system /config/usb_gadget/g1/configs/b.1
+    chown system system /config/usb_gadget/g1/configs/b.1/MaxPower
+    chown system system /config/usb_gadget/g1/configs/b.1/bmAttributes
+    chown system system /config/usb_gadget/g1/configs/b.1/strings
+    chown system system /config/usb_gadget/g1/functions
+    chown system system /config/usb_gadget/g1/functions/accessory.gs2
+    chown system system /config/usb_gadget/g1/functions/acm.gs6
+    chown system system /config/usb_gadget/g1/functions/acm.gs6/port_num
+    chown system system /config/usb_gadget/g1/functions/audio_source.gs3
+    chown system system /config/usb_gadget/g1/functions/dm.gs7
+    chown system system /config/usb_gadget/g1/functions/ffs.adb
+    chown system system /config/usb_gadget/g1/functions/ffs.mtp
+    chown system system /config/usb_gadget/g1/functions/ffs.ptp
+    chown system system /config/usb_gadget/g1/functions/midi.gs5
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/buflen
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/id
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/in_ports
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/index
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/out_ports
+    chown system system /config/usb_gadget/g1/functions/midi.gs5/qlen
+    chown system system /config/usb_gadget/g1/functions/mtp.gs0
+    chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc
+    chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP
+    chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/compatible_id
+    chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/sub_compatible_id
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/dev_addr
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/host_addr
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/ifname
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/sub_compatible_id
+    chown system system /config/usb_gadget/g1/functions/ncm.gs9/qmult
+    chown system system /config/usb_gadget/g1/functions/ptp.gs1
+    chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc
+    chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP
+    chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/compatible_id
+    chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/sub_compatible_id
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/class
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/dev_addr
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/host_addr
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/ifname
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/compatible_id
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/sub_compatible_id
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/protocol
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/qmult
+    chown system system /config/usb_gadget/g1/functions/rndis.gs4/subclass
+    chown system system /config/usb_gadget/g1/idProduct
+    chown system system /config/usb_gadget/g1/idVendor
+    chown system system /config/usb_gadget/g1/max_speed
+    chown system system /config/usb_gadget/g1/os_desc
+    chown system system /config/usb_gadget/g1/os_desc/b.1
+    chown system system /config/usb_gadget/g1/os_desc/b_vendor_code
+    chown system system /config/usb_gadget/g1/os_desc/qw_sign
+    chown system system /config/usb_gadget/g1/os_desc/use
+    chown system system /config/usb_gadget/g1/strings
+    chown system system /config/usb_gadget/g1/strings/0x409
+    chown system system /config/usb_gadget/g1/strings/0x409/manufacturer
+    chown system system /config/usb_gadget/g1/strings/0x409/product
+    chown system system /config/usb_gadget/g1/strings/0x409/serialnumber
diff --git a/usb/android.hardware.usb@1.3-service.gs101.xml b/usb/android.hardware.usb@1.3-service.gs101.xml
new file mode 100644
index 0000000..cd54268
--- /dev/null
+++ b/usb/android.hardware.usb@1.3-service.gs101.xml
@@ -0,0 +1,12 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.usb</name>
+        <transport>hwbinder</transport>
+        <version>1.3</version>
+        <interface>
+            <name>IUsb</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</manifest>
+
diff --git a/usb/service.cpp b/usb/service.cpp
new file mode 100644
index 0000000..a4a30d2
--- /dev/null
+++ b/usb/service.cpp
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#define LOG_TAG "android.hardware.usb@1.3-service.gs101"
+
+#include <hidl/HidlTransportSupport.h>
+#include "Usb.h"
+#include "UsbGadget.h"
+
+using android::sp;
+
+// libhwbinder:
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+
+// Generated HIDL files
+using android::hardware::usb::gadget::V1_2::IUsbGadget;
+using android::hardware::usb::gadget::V1_2::implementation::UsbGadget;
+using android::hardware::usb::V1_3::IUsb;
+using android::hardware::usb::V1_3::implementation::Usb;
+
+using android::OK;
+using android::status_t;
+
+int main() {
+    android::sp<IUsb> service = new Usb();
+    android::sp<IUsbGadget> service2 = new UsbGadget();
+
+    configureRpcThreadpool(2, true /*callerWillJoin*/);
+    status_t status = service->registerAsService();
+
+    if (status != OK) {
+        ALOGE("Cannot register USB HAL service");
+        return 1;
+    }
+
+    status = service2->registerAsService();
+
+    if (status != OK) {
+        ALOGE("Cannot register USB Gadget HAL service");
+        return 1;
+    }
+
+    ALOGI("USB HAL Ready.");
+    joinRpcThreadpool();
+    // Under noraml cases, execution will not reach this line.
+    ALOGI("USB HAL failed to join thread pool.");
+    return 1;
+}
diff --git a/uwb/uwb.mk b/uwb/uwb.mk
new file mode 100644
index 0000000..4a28fe8
--- /dev/null
+++ b/uwb/uwb.mk
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2021 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.
+
+# UWB - ultra wide band
+$(call inherit-product-if-exists, vendor/qorvo/uwb/uwb.mk)
+
diff --git a/vendor_dlkm.blocklist b/vendor_dlkm.blocklist
new file mode 100644
index 0000000..4458aef
--- /dev/null
+++ b/vendor_dlkm.blocklist
@@ -0,0 +1,10 @@
+blocklist bcmdhd43752
+blocklist bcmdhd4389
+blocklist drv2624
+blocklist ftm5
+blocklist pktgen
+blocklist sec_touch
+blocklist snd-soc-cs35l41-i2c
+blocklist snd-soc-cs35l41-spi
+blocklist st33spi
+blocklist st54spi
diff --git a/vibrator/Android.mk b/vibrator/Android.mk
new file mode 100644
index 0000000..5b089be
--- /dev/null
+++ b/vibrator/Android.mk
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2020 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.
+#
+
+include $(call first-makefiles-under, $(call my-dir))
diff --git a/wifi/coex_table.xml b/wifi/coex_table.xml
new file mode 100644
index 0000000..ec61422
--- /dev/null
+++ b/wifi/coex_table.xml
@@ -0,0 +1,351 @@
+<table>
+  <entry>
+    <rat>LTE</rat>
+    <band>1</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>1</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>2</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+      <intermodParams5g>
+        <N>-2</N>
+        <M>1</M>
+        <overlap>10</overlap>
+      </intermodParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>2</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+      <intermodParams5g>
+        <N>-2</N>
+        <M>1</M>
+        <overlap>10</overlap>
+      </intermodParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>3</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+      <intermodParams5g>
+        <N>-2</N>
+        <M>1</M>
+        <overlap>10</overlap>
+      </intermodParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>3</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+      <intermodParams5g>
+        <N>-2</N>
+        <M>1</M>
+        <overlap>10</overlap>
+      </intermodParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>4</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+      <intermodParams5g>
+        <N>-2</N>
+        <M>1</M>
+        <overlap>10</overlap>
+      </intermodParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>5</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>5</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>7</band>
+    <params>
+      <neighborThresholds>
+        <wifiVictimMhz>50</wifiVictimMhz>
+        <cellVictimMhz>50</cellVictimMhz>
+      </neighborThresholds>
+      <intermodParams2g>
+        <N>2</N>
+        <M>-1</M>
+        <overlap>10</overlap>
+      </intermodParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>7</band>
+    <params>
+      <neighborThresholds>
+        <wifiVictimMhz>50</wifiVictimMhz>
+        <cellVictimMhz>50</cellVictimMhz>
+      </neighborThresholds>
+      <intermodParams2g>
+        <N>2</N>
+        <M>-1</M>
+        <overlap>10</overlap>
+      </intermodParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>18</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>18</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>19</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>25</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+      <intermodParams5g>
+        <N>-2</N>
+        <M>1</M>
+        <overlap>10</overlap>
+      </intermodParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>25</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+      <intermodParams5g>
+        <N>-2</N>
+        <M>1</M>
+        <overlap>10</overlap>
+      </intermodParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>26</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>26</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>27</band>
+    <params>
+      <harmonicParams2g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams2g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>38</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>38</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>39</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>39</band>
+    <params>
+      <harmonicParams5g>
+        <N>3</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>40</band>
+    <params>
+      <neighborThresholds>
+        <wifiVictimMhz>50</wifiVictimMhz>
+        <cellVictimMhz>50</cellVictimMhz>
+      </neighborThresholds>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>40</band>
+    <params>
+      <neighborThresholds>
+        <wifiVictimMhz>50</wifiVictimMhz>
+        <cellVictimMhz>50</cellVictimMhz>
+      </neighborThresholds>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>LTE</rat>
+    <band>41</band>
+    <params>
+      <neighborThresholds>
+        <wifiVictimMhz>50</wifiVictimMhz>
+        <cellVictimMhz>50</cellVictimMhz>
+      </neighborThresholds>
+      <harmonicParams5g>
+        <N>2</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+
+  <entry>
+    <rat>NR</rat>
+    <band>41</band>
+    <params>
+      <neighborThresholds>
+        <wifiVictimMhz>50</wifiVictimMhz>
+        <cellVictimMhz>50</cellVictimMhz>
+      </neighborThresholds>
+      <harmonicParams5g>
+        <N>2</N>
+        <overlap>10</overlap>
+      </harmonicParams5g>
+    </params>
+  </entry>
+</table>
diff --git a/wifi/p2p_supplicant.conf b/wifi/p2p_supplicant.conf
new file mode 100644
index 0000000..2f0bc1b
--- /dev/null
+++ b/wifi/p2p_supplicant.conf
@@ -0,0 +1,9 @@
+driver_param=use_p2p_group_interface=1p2p_device=1
+update_config=1
+eapol_version=1
+ap_scan=1
+fast_reauth=1
+pmf=1
+p2p_add_cli_chan=1
+disable_scan_offload=1
+p2p_go_vht=1
diff --git a/wifi/wpa_supplicant_overlay.conf b/wifi/wpa_supplicant_overlay.conf
new file mode 100644
index 0000000..6f274c1
--- /dev/null
+++ b/wifi/wpa_supplicant_overlay.conf
@@ -0,0 +1,10 @@
+sae_pwe=2
+driver_param=use_p2p_group_interface=1p2p_device=1
+disable_scan_offload=1
+wowlan_triggers=any
+bss_max_count=512
+interworking=1
+hs20=1
+auto_interworking=0
+bss_no_flush_when_down=1
+btm_offload=1